diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml
deleted file mode 100644
index 59a02f767..000000000
--- a/.github/workflows/android.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-name: android
-
-on:
- push:
- branches:
- - main
- paths:
- - "examples/simple-chatbot/client/android/**"
- - "examples/p2p-webrtc/video-transform/client/android/**"
- pull_request:
- branches:
- - "**"
- paths:
- - "examples/simple-chatbot/client/android/**"
- - "examples/p2p-webrtc/video-transform/client/android/**"
- workflow_dispatch:
- inputs:
- sdk_git_ref:
- type: string
- description: "Which git ref of the app to build"
-
-concurrency:
- group: build-android-${{ github.event.pull_request.number || github.ref }}
- cancel-in-progress: true
-
-jobs:
- sdk:
- name: "Demo apps"
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repo
- uses: actions/checkout@v4
- with:
- ref: ${{ github.event.inputs.sdk_git_ref || github.ref }}
-
- - name: "Install Java"
- uses: actions/setup-java@v4
- with:
- distribution: 'temurin'
- java-version: '17'
-
- - name: "Example app: Simple Chatbot"
- working-directory: examples/simple-chatbot/client/android
- run: ./gradlew :simple-chatbot-client:assembleDebug
-
- - name: Upload Simple Chatbot APK
- uses: actions/upload-artifact@v4
- with:
- name: Simple Chatbot Android Client
- path: examples/simple-chatbot/client/android/simple-chatbot-client/build/outputs/apk/debug/simple-chatbot-client-debug.apk
-
- - name: "Example app: Small WebRTC Client"
- working-directory: examples/p2p-webrtc/video-transform/client/android
- run: ./gradlew :small-webrtc-client:assembleDebug
-
- - name: Upload Small WebRTC APK
- uses: actions/upload-artifact@v4
- with:
- name: Small WebRTC Android Client
- path: examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/build/outputs/apk/debug/small-webrtc-client-debug.apk
diff --git a/.gitignore b/.gitignore
index 308e41140..2e5da188e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,9 +31,6 @@ MANIFEST
fly.toml
# Examples
-examples/telnyx-chatbot/templates/streams.xml
-examples/twilio-chatbot/templates/streams.xml
-examples/plivo-chatbot/templates/streams.xml
examples/**/node_modules/
examples/**/.expo/
examples/**/dist/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 66c145670..58a64ae90 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `examples/foundational/07ac-interruptible-asyncai.py` (WebSocket demo)
- `examples/foundational/07ac-interruptible-asyncai-http.py` (HTTP demo)
+- Added `transcription_bucket` params support to the `DailyRESTHelper`.
+
- Added a new TTS service, `InworldTTSService`. This service provides
low-latency, high-quality speech generation using Inworld's streaming API.
@@ -32,6 +34,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added `set_log_level` to `DailyTransport`, allowing setting the logging level
for Daily's internal logging system.
+- Added `on_transcription_stopped` and `on_transcription_error` to Daily callbacks.
+
### Changed
- Play delayed messages from `ElevenLabsTTSService` if they still belong to the
@@ -81,13 +85,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
+- Fixed an issue in the `TranscriptProcessor` where newline characters could
+ cause the transcript output to be corrupted (e.g. missing all spaces).
+
- Fixed an issue in `AudioBufferProcessor` when using `SmallWebRTCTransport` where, if
the microphone was muted, track timing was not respected.
+- Fixed an error that occurs when pushing an `LLMMessagesFrame`. Only some LLM
+ services, like Grok, are impacted by this issue. The fix is to remove the
+ optional `name` property that was being added to the message.
+
- Fixed an issue in `AudioBufferProcessor` that caused garbled audio when
`enable_turn_audio` was enabled and audio resampling was required.
-- Fixed a dependency issue for uv users where an `llvmlite` version required python 3.9.
+- Fixed a dependency issue for uv users where an `llvmlite` version required
+ python 3.9.
- Fixed an issue in `MiniMaxHttpTTSService` where the `pitch` param was the
incorrect type.
@@ -111,6 +123,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed an issue in `LiveKitTransport` where the `on_audio_track_subscribed` was never emitted.
+### Other
+
+- Removed most of the examples from the pipecat repo. Examples can now be
+ found in: https://github.com/pipecat-ai/pipecat-examples.
+
## [0.0.76] - 2025-07-11
### Added
@@ -152,7 +169,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
user started early, while the bot was still working through
`trigger_assistant_response()`.
-## [0.0.75] - 2025-07-08
+## [0.0.75] - 2025-07-08 [YANKED]
+
+**This release has been yanked due to resampling issues affecting audio output
+quality and critical bugs impacting `ParallelPipelines` functionality.**
+
+**Please upgrade to version 0.0.76 or later.**
### Added
@@ -213,7 +235,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Remove unncessary push task in each `FrameProcessor`.
-## [0.0.74] - 2025-07-03
+## [0.0.74] - 2025-07-03 [YANKED]
+
+**This release has been yanked due to resampling issues affecting audio output
+quality and critical bugs impacting `ParallelPipelines` functionality.**
+
+**Please upgrade to version 0.0.76 or later.**
### Added
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index f10db656d..000000000
--- a/Dockerfile
+++ /dev/null
@@ -1,40 +0,0 @@
-# setup
-FROM python:3.11.5
-
-WORKDIR /app
-COPY requirements.txt /app
-COPY *.py /app
-COPY pyproject.toml /app
-
-COPY src/ /app/src/
-COPY examples/ /app/examples/
-
-WORKDIR /app
-RUN ls --recursive /app/
-RUN pip3 install --upgrade -r requirements.txt
-RUN python -m build .
-RUN pip3 install .
-RUN pip3 install gunicorn
-# If running on Ubuntu, Azure TTS requires some extra config
-# https://learn.microsoft.com/en-us/azure/ai-services/speech-service/quickstarts/setup-platform?pivots=programming-language-python&tabs=linux%2Cubuntu%2Cdotnetcli%2Cdotnet%2Cjre%2Cmaven%2Cnodejs%2Cmac%2Cpypi
-
-RUN wget -O - https://www.openssl.org/source/openssl-1.1.1w.tar.gz | tar zxf -
-WORKDIR openssl-1.1.1w
-RUN ./config --prefix=/usr/local
-RUN make -j $(nproc)
-RUN make install_sw install_ssldirs
-RUN ldconfig -v
-ENV SSL_CERT_DIR=/etc/ssl/certs
-
-#ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
-RUN apt clean
-RUN apt-get update
-RUN apt-get -y install build-essential libssl-dev ca-certificates libasound2 wget
-
-ENV PYTHONUNBUFFERED=1
-
-WORKDIR /app
-
-EXPOSE 8000
-# run
-CMD ["gunicorn", "--workers=2", "--log-level", "debug", "--chdir", "examples/server", "--capture-output", "daily-bot-manager:app", "--bind=0.0.0.0:8000"]
diff --git a/README.md b/README.md
index 0723ec9bc..7e42af4a1 100644
--- a/README.md
+++ b/README.md
@@ -31,11 +31,11 @@
## ๐ฌ See it in action
-
-
+
+
-
-
+
+
## ๐ฑ Client SDKs
@@ -88,7 +88,7 @@ pip install "pipecat-ai[option,...]"
## ๐งช Code examples
- [Foundational](https://github.com/pipecat-ai/pipecat/tree/main/examples/foundational) โ small snippets that build on each other, introducing one or two concepts at a time
-- [Example apps](https://github.com/pipecat-ai/pipecat/tree/main/examples/) โ complete applications that you can use as starting points for development
+- [Example apps](https://github.com/pipecat-ai/pipecat-examples) โ complete applications that you can use as starting points for development
## ๐ ๏ธ Hacking on the framework itself
diff --git a/examples/README.md b/examples/README.md
index 01150b450..62c7124e8 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -1,88 +1,31 @@
+# Pipecat Examples
+This directory contains examples to help you learn how to build with Pipecat.
-# Pipecat — Examples
+## Getting Started
-## Foundational snippets
-Small snippets that build on each other, introducing one or two concepts at a time.
+New to Pipecat? Start here:
-โก๏ธ [Take a look](https://github.com/pipecat-ai/pipecat/tree/main/examples/foundational)
+- **[Quickstart](quickstart/)** - Get your first voice AI bot running in 5 minutes _(coming soon)_
+- **[Client/Server Web](client-server-web/)** - Learn to build web applications with Pipecat's client SDKs _(coming soon)_
+- **[Phone Bot with Twilio](phone-bot-twilio/)** - Connect your bot to a phone number _(coming soon)_
-## Chatbot examples
-Collection of self-contained real-time voice and video AI demo applications built with Pipecat.
+## Foundational Examples
-### Quickstart
+Single-file examples that introduce core Pipecat concepts one at a time. These examples:
-Each project has its own set of dependencies and configuration variables. They intentionally avoids shared code across projects — you can grab whichever demo folder you want to work with as a starting point.
+- Build on each other progressively
+- Focus on specific features or integrations
+- Are used for testing with every Pipecat release
-We recommend you start with a virtual environment:
+See the **[Foundational Examples README](foundational/)** for the complete list.
-```shell
-cd pipecat-ai/examples/simple-chatbot
+## More Advanced Examples
-python -m venv venv
+Ready to explore complex use cases? Visit **[pipecat-examples](https://github.com/pipecat-ai/pipecat-examples)** for:
-source venv/bin/activate
-
-pip install -r requirements.txt
-```
-
-Next, follow the steps in the README for each demo.
-
-โน๏ธ Make sure you `pip install -r requirements.txt` for each demo project, so you can be sure to have the necessary service dependencies that extend the functionality of Pipecat. You can read more about the framework architecture [here](https://github.com/pipecat-ai/pipecat/tree/main/docs).
-
-## Projects:
-
-| Project | Description | Services |
-|----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------|
-| [Simple Chatbot](simple-chatbot) | Basic voice-driven conversational bot. A good starting point for learning the flow of the framework. | Deepgram, ElevenLabs, OpenAI, Daily, Daily Prebuilt UI |
-| [Storytelling Chatbot](storytelling-chatbot) | Stitches together multiple third-party services to create a collaborative storytime experience. | Deepgram, ElevenLabs, OpenAI, Fal, Daily, Custom UI |
-| [Translation Chatbot](translation-chatbot) | Listens for user speech, then translates that speech to Spanish and speaks the translation back. Demonstrates multi-participant use-cases. | Deepgram, Azure, OpenAI, Daily, Daily Prebuilt UI |
-| [Moondream Chatbot](moondream-chatbot) | Demonstrates how to add vision capabilities to GPT4. **Note: works best with a GPU** | Deepgram, ElevenLabs, OpenAI, Moondream, Daily, Daily Prebuilt UI |
-| [Patient intake](patient-intake) | A chatbot that can call functions in response to user input. | Deepgram, ElevenLabs, OpenAI, Daily, Daily Prebuilt UI |
-| [Phone Chatbot](phone-chatbot) | A chatbot that connects to PSTN/SIP phone calls, powered by Daily or Twilio. | Deepgram, ElevenLabs, OpenAI, Daily, Twilio |
-| [Twilio Chatbot](twilio-chatbot) | A chatbot that connects to an incoming phone call from Twilio. | Deepgram, ElevenLabs, OpenAI, Daily, Twilio |
-| [studypal](studypal) | A chatbot to have a conversation about any article on the web | |
-| [WebSocket Chatbot Server](websocket-server) | A real-time websocket server that handles audio streaming and bot interactions with speech-to-text and text-to-speech capabilities. | Cartesia, Deepgram, OpenAI, Websockets |
-
-> [!IMPORTANT]
-> These example projects use Daily as a WebRTC transport and can be joined using their hosted Prebuilt UI.
-> It provides a quick way to join a real-time session with your bot and test your ideas without building any frontend code. If you'd like to see an example of a custom UI, try Storybot.
-
-
-## FAQ
-
-### Deployment
-
-For each of these demos we've included a `Dockerfile`. Out of the box, this should provide everything needed to get the respective demo running on a VM:
-
-```shell
-docker build username/app:tag .
-
-docker run -p 7860:7860 --env-file ./.env username/app:tag
-
-docker push ...
-```
-
-### SSL
-
-If you're working with a custom UI (such as with the Storytelling Chatbot), it's important to ensure your deployment platform supports HTTPS, as accessing user devices such as mics and webcams requires SSL.
-
-If you try to run a custom UI without SSL, you may see an error in the console telling you that `navigator` is undefined, or no devices are available.
-
-### Are these examples production ready?
-
-Yes, kind of.
-
-These demos attempt to keep things simple and are unopinionated regarding environment or scalability.
-
-We're using FastAPI to spawn a subprocess for the bots / agents — useful for small tests, but not so great for production grade apps with many concurrent users. You can see how this works in each project's `start` endpoint in `server.py`.
-
-Creating virtualized worker pools and on-demand instances is out of scope for these examples, but we hope to add some examples to this repo soon!
-
-For projects that have CUDA as a requirement, such as Moondream Chatbot, be sure to deploy to a GPU-powered platform (such as [fly.io](https://fly.io) or [Runpod](https://runpod.io).)
-
-## Getting help
-
-โก๏ธ [Join our Discord](https://discord.gg/pipecat)
-
-โก๏ธ [Reach us on Twitter](https://x.com/pipecat_ai)
+- Production-ready applications
+- Multi-platform client implementations
+- Telephony integrations
+- Multimodal and creative applications
+- Deployment and monitoring examples
diff --git a/examples/aws-strands/README.md b/examples/aws-strands/README.md
deleted file mode 100644
index 6bc99a689..000000000
--- a/examples/aws-strands/README.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# AWS Strands Examples
-
-This folder contains two Python examples demonstrating how to use Pipecat with the AWS Strands agent.
-
-## Overview
-
-These examples show how to delegate complex, multi-step tasks to a Strands agent, which can reason step-by-step and call tools to accomplish user requests.
-
-These examples are intentionally simplified for demonstration, using mock API calls. They work best if you ask it:
-
-> What's the weather where the Golden Gate Bridge is?
-
-## Example Scripts
-
-### `black-box.py`
-
-A minimal example that demonstrates how to use the Strands agent with Pipecat. The agent can handle multi-step queries by calling tools, but does not explain its reasoning out loud.
-
-### `explain-thinking.py`
-
-An enhanced example where the Strands agent explains each step of its reasoning in clear, simple language as it works through a multi-step task.
-
-## Quick Start
-
-1. **Clone the repository and navigate to this example:**
-
- ```bash
- git clone https://github.com/pipecat-ai/pipecat.git
- cd pipecat/examples/aws-strands
- ```
-
-2. **Set up a virtual environment:**
-
- ```bash
- python -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
-3. **Install dependencies:**
-
- ```bash
- pip install -r requirements.txt
- ```
-4. **Enable AWS Bedrock models:**
- โ ๏ธ **Important:** AWS Strands uses Bedrock models by default. You must first activate the required models in your AWS Bedrock console before running these examples. Visit the [AWS Bedrock Model Access documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-permissions.html) to enable model access permissions.
-
-
-5. **Configure environment variables:**
-
- Copy the provided `env.example` file to `.env` and fill in the necessary credentials:
-
- ```bash
- cp env.example .env
- # Then edit .env with your preferred editor
- ```
-
-6. **Run an example:**
-
- ```bash
- python black-box.py
- # or
- python explain-thinking.py
- # The transport is selected via the --transport or -t command line argument. Choices are daily webrtc and twilio.defaults to # webrtc
- ```
diff --git a/examples/aws-strands/black-box.py b/examples/aws-strands/black-box.py
deleted file mode 100644
index 12ce441a0..000000000
--- a/examples/aws-strands/black-box.py
+++ /dev/null
@@ -1,206 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import os
-
-from dotenv import load_dotenv
-from loguru import logger
-from strands import Agent, tool
-from strands.models import BedrockModel
-
-from pipecat.adapters.schemas.tools_schema import ToolsSchema
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.network.fastapi_websocket import FastAPIWebsocketParams
-from pipecat.transports.services.daily import DailyParams
-
-load_dotenv(override=True)
-
-"""This example demonstrates how to use the Strands agent with Pipecat.
-
-You can delegate complex, multi-step tasks to the Strands agent, which can cycle through LLM-based reasoning and tool calls to accomplish the task.
-
-Try asking: "What's the weather where the Golden Gate Bridge is?"
-"""
-
-# Strands agent tools
-
-
-@tool
-def get_location_name_from_landmark(landmark: str) -> str:
- """
- Get the location name from a landmark.
-
- Args:
- landmark (str): The name of the landmark, e.g. "Golden Gate Bridge".
- """
- # Simulate fetching location
- return "San Francisco, CA"
-
-
-@tool
-def get_lat_long_from_location_name(location: str) -> dict:
- """
- Get the latitude and longitude for a location name.
-
- Args:
- location (str): The city and state, e.g. "San Francisco, CA".
- """
- # Simulate fetching lat/long from a geocoding service
- return {"lat": 37.7749, "long": -122.4194}
-
-
-@tool
-def get_current_weather_from_lat_long(lat: float, long: float) -> dict:
- """
- Get the current weather for a specific latitude and longitude.
-
- Args:
- lat (float): The latitude of the location.
- long (float): The longitude of the location.
- """
- # Simulate fetching weather data from a weather service
- return {"conditions": "nice", "temperature": "75"}
-
-
-# We store functions so objects (e.g. SileroVADAnalyzer) don't get
-# instantiated. The function will be called when the desired transport gets
-# selected.
-transport_params = {
- "daily": lambda: DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- "twilio": lambda: FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- "webrtc": lambda: TransportParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
-}
-
-
-async def run_example(transport: BaseTransport, _: argparse.Namespace, handle_sigint: bool):
- logger.info(f"Starting bot")
-
- strands_agent = Agent(
- model=BedrockModel(
- model_id="us.anthropic.claude-3-7-sonnet-20250219-v1:0", max_tokens=64000
- ),
- tools=[
- get_location_name_from_landmark,
- get_lat_long_from_location_name,
- get_current_weather_from_lat_long,
- ],
- system_prompt="""
- You are a helpful personal assistant who can look up information about places and weather.
-
- Your key capabilities:
- 1. Look up where landmarks are located.
- 2. Find latitude and longitude for a location.
- 3. Look up the current weather for a specific latitude and longitude.
-
- Explain each step of your reasoning in clear, simple, and concise language. Your responses will be converted to audio, so avoid special characters and numbered lists.
- """,
- )
-
- async def handle_location_or_weather_related_queries(params: FunctionCallParams, query: str):
- """
- Handle location or weather related queries.
-
- Args:
- query (str): The user's query, e.g. "What's the weather where the Golden Gate Bridge is?".
- """
- # Run in a background thread
- # (Otherwise the agent blocks the event loop; one effect of that is that we don't hear
- # "let me check on that" until the agent finishes)
- loop = asyncio.get_running_loop()
- result = await loop.run_in_executor(None, strands_agent, query)
- await params.result_callback(result.message)
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- llm.register_direct_function(handle_location_or_weather_related_queries)
-
- @llm.event_handler("on_function_calls_started")
- async def on_function_calls_started(service, function_calls):
- await tts.queue_frame(TTSSpeakFrame("Let me check on that."))
-
- tools = ToolsSchema(standard_tools=[handle_location_or_weather_related_queries])
-
- messages = [
- {
- "role": "system",
- "content": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way. Start by suggesting that the user ask about the weather where the Golden Gate Bridge is.",
- },
- ]
-
- context = OpenAILLMContext(messages, tools)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(),
- stt,
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info(f"Client connected")
- # Kick off the conversation.
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info(f"Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=handle_sigint)
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- from pipecat.examples.run import main
-
- main(run_example, transport_params=transport_params)
diff --git a/examples/aws-strands/env.example b/examples/aws-strands/env.example
deleted file mode 100644
index cf1803b4d..000000000
--- a/examples/aws-strands/env.example
+++ /dev/null
@@ -1,8 +0,0 @@
-OPENAI_API_KEY=
-CARTESIA_API_KEY=
-DEEPGRAM_API_KEY=
-DAILY_API_KEY=
-DAILY_SAMPLE_ROOM_URL=
-AWS_SECRET_ACCESS_KEY=
-AWS_ACCESS_KEY_ID=
-AWS_REGION=
\ No newline at end of file
diff --git a/examples/aws-strands/explain-thinking.py b/examples/aws-strands/explain-thinking.py
deleted file mode 100644
index 1bc04d8e5..000000000
--- a/examples/aws-strands/explain-thinking.py
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import os
-import threading
-import time
-
-from dotenv import load_dotenv
-from loguru import logger
-from strands import Agent, tool
-from strands.models import BedrockModel
-
-from pipecat.adapters.schemas.tools_schema import ToolsSchema
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.network.fastapi_websocket import FastAPIWebsocketParams
-from pipecat.transports.services.daily import DailyParams
-
-load_dotenv(override=True)
-
-"""This example demonstrates how to use the Strands agent with Pipecat in a way where the agent explains its reasoning step-by-step.
-
-You can delegate complex, multi-step tasks to the Strands agent, which can cycle through LLM-based reasoning and tool calls to accomplish the task.
-
-Try asking: "What's the weather where the Golden Gate Bridge is?"
-"""
-
-
-# Strands agent tools
-
-
-@tool
-def get_location_name_from_landmark(landmark: str) -> str:
- """
- Get the location name from a landmark.
-
- Args:
- landmark (str): The name of the landmark, e.g. "Golden Gate Bridge".
- """
- # Simulate fetching location (slowly)
- time.sleep(3)
- return "San Francisco, CA"
-
-
-@tool
-def get_lat_long_from_location_name(location: str) -> dict:
- """
- Get the latitude and longitude for a location name.
-
- Args:
- location (str): The city and state, e.g. "San Francisco, CA".
- """
- # Simulate fetching lat/long from a geocoding service (slowly)
- time.sleep(3)
- return {"lat": 37.7749, "long": -122.4194}
-
-
-@tool
-def get_current_weather_from_lat_long(lat: float, long: float) -> dict:
- """
- Get the current weather for a specific latitude and longitude.
-
- Args:
- lat (float): The latitude of the location.
- long (float): The longitude of the location.
- """
- # Simulate fetching weather data from a weather service (slowly)
- time.sleep(3)
- return {"conditions": "nice", "temperature": "75"}
-
-
-# We store functions so objects (e.g. SileroVADAnalyzer) don't get
-# instantiated. The function will be called when the desired transport gets
-# selected.
-transport_params = {
- "daily": lambda: DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- "twilio": lambda: FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- "webrtc": lambda: TransportParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
-}
-
-
-async def run_example(transport: BaseTransport, _: argparse.Namespace, handle_sigint: bool):
- logger.info(f"Starting bot")
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- next_strands_message_is_last = False
- strands_messages_queue = asyncio.Queue()
-
- def strands_callback_handler(**kwargs):
- """
- Handle events from the Strands agent.
- """
- nonlocal next_strands_message_is_last
- if "event" in kwargs:
- event_obj = kwargs["event"]
- if event_obj and "messageStop" in event_obj:
- message_stop = event_obj["messageStop"]
- if message_stop and "stopReason" in message_stop:
- stop_reason = message_stop["stopReason"]
- if stop_reason == "end_turn":
- next_strands_message_is_last = True
- elif "message" in kwargs:
- message_obj = kwargs["message"]
- if message_obj and "content" in message_obj and "role" in message_obj:
- role = message_obj["role"]
- content = message_obj["content"]
- if role == "assistant" and isinstance(content, list):
- for content_obj in content:
- if isinstance(content_obj, dict) and "text" in content_obj:
- message = content_obj["text"]
- if not next_strands_message_is_last:
- strands_messages_queue.put_nowait(message)
-
- async def process_strands_messages():
- while True:
- message = await strands_messages_queue.get()
- await tts.queue_frame(TTSSpeakFrame(message))
- strands_messages_queue.task_done()
-
- asyncio.create_task(process_strands_messages())
-
- strands_agent = Agent(
- model=BedrockModel(
- model_id="us.anthropic.claude-3-7-sonnet-20250219-v1:0", max_tokens=64000
- ),
- tools=[
- get_location_name_from_landmark,
- get_lat_long_from_location_name,
- get_current_weather_from_lat_long,
- ],
- system_prompt="""
- You are a helpful personal assistant who can look up information about places and weather.
-
- Your key capabilities:
- 1. Look up where landmarks are located.
- 2. Find latitude and longitude for a location.
- 3. Look up the current weather for a specific latitude and longitude.
-
- Explain each step of your reasoning in clear, simple, and concise language. Your responses will be converted to audio, so avoid special characters and numbered lists.
- """,
- callback_handler=strands_callback_handler,
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- async def handle_location_or_weather_related_queries(params: FunctionCallParams, query: str):
- """
- Handle location or weather related queries.
-
- Args:
- query (str): The user's query, e.g. "What's the weather where the Golden Gate Bridge is?".
- """
- # Run in a background thread
- # (Otherwise the agent blocks the event loop; one effect of that is that we don't hear
- # the agent's "thinking" messages until the agent finishes)
- loop = asyncio.get_running_loop()
- result = await loop.run_in_executor(None, strands_agent, query)
- await params.result_callback(result.message)
-
- llm.register_direct_function(handle_location_or_weather_related_queries)
-
- @llm.event_handler("on_function_calls_started")
- async def on_function_calls_started(service, function_calls):
- await tts.queue_frame(TTSSpeakFrame("Let me check on that."))
-
- tools = ToolsSchema(standard_tools=[handle_location_or_weather_related_queries])
-
- messages = [
- {
- "role": "system",
- "content": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way. Start by suggesting that the user ask about the weather where the Golden Gate Bridge is.",
- },
- ]
-
- context = OpenAILLMContext(messages, tools)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(),
- stt,
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info(f"Client connected")
- # Kick off the conversation.
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info(f"Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=handle_sigint)
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- from pipecat.examples.run import main
-
- main(run_example, transport_params=transport_params)
diff --git a/examples/aws-strands/requirements.txt b/examples/aws-strands/requirements.txt
deleted file mode 100644
index ce3ab667c..000000000
--- a/examples/aws-strands/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-fastapi
-uvicorn
-python-dotenv
-pipecat-ai[webrtc,daily,deepgram,cartesia]
-pipecat-ai-small-webrtc-prebuilt
-strands-agents
\ No newline at end of file
diff --git a/examples/bot-ready-signalling/README.md b/examples/bot-ready-signalling/README.md
deleted file mode 100644
index 668b95124..000000000
--- a/examples/bot-ready-signalling/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Bot ready signaling
-
-A simple Pipecat example demonstrating how to handle signaling between the client and the bot,
-ensuring that the bot starts sending audio only when the client is available,
-thereby avoiding the risk of cutting off the beginning of the audio.
-
-## Quick Start
-
-### First, start the bot server:
-
-1. Navigate to the server directory:
- ```bash
- cd server
- ```
-2. Create and activate a virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-3. Install requirements:
- ```bash
- pip install -r requirements.txt
- ```
-4. Copy env.example to .env and configure:
- - Add your API keys
-5. Start the server:
- ```bash
- python server.py
- ```
-
-### Next, connect using the client app:
-
-For client-side setup, refer to the [JavaScript Guide](client/javascript/README.md).
-
-## Important Note
-
-Ensure the bot server is running before using any client implementations.
-
-## Requirements
-
-- Python 3.10+
-- Node.js 16+ (for JavaScript)
-- Daily API key
-- Cartesia API key
-- Modern web browser with WebRTC support
\ No newline at end of file
diff --git a/examples/bot-ready-signalling/client/javascript/README.md b/examples/bot-ready-signalling/client/javascript/README.md
deleted file mode 100644
index 3b0c7f96e..000000000
--- a/examples/bot-ready-signalling/client/javascript/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# JavaScript Implementation
-
-Basic implementation using the [Pipecat JavaScript SDK](https://docs.pipecat.ai/client/js/introduction).
-
-## Setup
-
-1. Run the bot server. See the [server README](../../README).
-
-2. Navigate to the `client/javascript` directory:
-
-```bash
-cd client/javascript
-```
-
-3. Install dependencies:
-
-```bash
-npm install
-```
-
-4. Run the client app:
-
-```
-npm run dev
-```
-
-5. Visit http://localhost:5173 in your browser.
diff --git a/examples/bot-ready-signalling/client/javascript/index.html b/examples/bot-ready-signalling/client/javascript/index.html
deleted file mode 100644
index 71dfe4597..000000000
--- a/examples/bot-ready-signalling/client/javascript/index.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
- AI Chatbot
-
-
-
-
-
-
- Status: Disconnected
-
-
- Connect
- Disconnect
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/bot-ready-signalling/client/javascript/package-lock.json b/examples/bot-ready-signalling/client/javascript/package-lock.json
deleted file mode 100644
index 7fe9f7377..000000000
--- a/examples/bot-ready-signalling/client/javascript/package-lock.json
+++ /dev/null
@@ -1,1076 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@daily-co/daily-js": "0.74.0"
- },
- "devDependencies": {
- "vite": "^6.3.5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
- "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.74.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.74.0.tgz",
- "integrity": "sha512-wyZzt+sH7yh5Cg3DQeoZ1Yen8+bbai0/Zq8JZzklqELrpjiFuu34e3qwjwt79cx7T9eukbZbK6gtk3cmCBW3iw==",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz",
- "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz",
- "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz",
- "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz",
- "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz",
- "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz",
- "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz",
- "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz",
- "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz",
- "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz",
- "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz",
- "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz",
- "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz",
- "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz",
- "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz",
- "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz",
- "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz",
- "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz",
- "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz",
- "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz",
- "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz",
- "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz",
- "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz",
- "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz",
- "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz",
- "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz",
- "integrity": "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.1.tgz",
- "integrity": "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.1.tgz",
- "integrity": "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.1.tgz",
- "integrity": "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.1.tgz",
- "integrity": "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.1.tgz",
- "integrity": "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.1.tgz",
- "integrity": "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.1.tgz",
- "integrity": "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.1.tgz",
- "integrity": "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.1.tgz",
- "integrity": "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.1.tgz",
- "integrity": "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.1.tgz",
- "integrity": "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.1.tgz",
- "integrity": "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.1.tgz",
- "integrity": "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz",
- "integrity": "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz",
- "integrity": "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz",
- "integrity": "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.1.tgz",
- "integrity": "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.1.tgz",
- "integrity": "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.1.tgz",
- "integrity": "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
- "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
- "dev": true
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.3",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz",
- "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.3",
- "@esbuild/android-arm": "0.25.3",
- "@esbuild/android-arm64": "0.25.3",
- "@esbuild/android-x64": "0.25.3",
- "@esbuild/darwin-arm64": "0.25.3",
- "@esbuild/darwin-x64": "0.25.3",
- "@esbuild/freebsd-arm64": "0.25.3",
- "@esbuild/freebsd-x64": "0.25.3",
- "@esbuild/linux-arm": "0.25.3",
- "@esbuild/linux-arm64": "0.25.3",
- "@esbuild/linux-ia32": "0.25.3",
- "@esbuild/linux-loong64": "0.25.3",
- "@esbuild/linux-mips64el": "0.25.3",
- "@esbuild/linux-ppc64": "0.25.3",
- "@esbuild/linux-riscv64": "0.25.3",
- "@esbuild/linux-s390x": "0.25.3",
- "@esbuild/linux-x64": "0.25.3",
- "@esbuild/netbsd-arm64": "0.25.3",
- "@esbuild/netbsd-x64": "0.25.3",
- "@esbuild/openbsd-arm64": "0.25.3",
- "@esbuild/openbsd-x64": "0.25.3",
- "@esbuild/sunos-x64": "0.25.3",
- "@esbuild/win32-arm64": "0.25.3",
- "@esbuild/win32-ia32": "0.25.3",
- "@esbuild/win32-x64": "0.25.3"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.4",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
- "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
- "dev": true,
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.3",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
- "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.8",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
- "node_modules/rollup": {
- "version": "4.40.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.1.tgz",
- "integrity": "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==",
- "dev": true,
- "dependencies": {
- "@types/estree": "1.0.7"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.40.1",
- "@rollup/rollup-android-arm64": "4.40.1",
- "@rollup/rollup-darwin-arm64": "4.40.1",
- "@rollup/rollup-darwin-x64": "4.40.1",
- "@rollup/rollup-freebsd-arm64": "4.40.1",
- "@rollup/rollup-freebsd-x64": "4.40.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.40.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.40.1",
- "@rollup/rollup-linux-arm64-gnu": "4.40.1",
- "@rollup/rollup-linux-arm64-musl": "4.40.1",
- "@rollup/rollup-linux-loongarch64-gnu": "4.40.1",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.40.1",
- "@rollup/rollup-linux-riscv64-musl": "4.40.1",
- "@rollup/rollup-linux-s390x-gnu": "4.40.1",
- "@rollup/rollup-linux-x64-gnu": "4.40.1",
- "@rollup/rollup-linux-x64-musl": "4.40.1",
- "@rollup/rollup-win32-arm64-msvc": "4.40.1",
- "@rollup/rollup-win32-ia32-msvc": "4.40.1",
- "@rollup/rollup-win32-x64-msvc": "4.40.1",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
- "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
- "dev": true,
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/examples/bot-ready-signalling/client/javascript/package.json b/examples/bot-ready-signalling/client/javascript/package.json
deleted file mode 100644
index d8ef9f320..000000000
--- a/examples/bot-ready-signalling/client/javascript/package.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "vite": "^6.3.5"
- },
- "dependencies": {
- "@daily-co/daily-js": "0.74.0"
- }
-}
diff --git a/examples/bot-ready-signalling/client/javascript/src/app.js b/examples/bot-ready-signalling/client/javascript/src/app.js
deleted file mode 100644
index 5e0232f68..000000000
--- a/examples/bot-ready-signalling/client/javascript/src/app.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * Copyright (c) 2024โ2025, Daily
- *
- * SPDX-License-Identifier: BSD 2-Clause License
- */
-
-import Daily from "@daily-co/daily-js";
-
-/**
- * ChatbotClient handles the connection and media management for a real-time
- * voice interaction with an AI bot.
- */
-class ChatbotClient {
- constructor() {
- // Initialize client state
- this.dailyCallObject = null;
- this.setupDOMElements();
- this.setupEventListeners();
- }
-
- /**
- * Set up references to DOM elements and create necessary media elements
- */
- setupDOMElements() {
- // Get references to UI control elements
- this.connectBtn = document.getElementById('connect-btn');
- this.disconnectBtn = document.getElementById('disconnect-btn');
- this.statusSpan = document.getElementById('connection-status');
- this.debugLog = document.getElementById('debug-log');
-
- // Create an audio element for bot's voice output
- this.botAudio = document.createElement('audio');
- this.botAudio.autoplay = true;
- this.botAudio.playsInline = true;
- document.body.appendChild(this.botAudio);
- }
-
- /**
- * Set up event listeners for connect/disconnect buttons
- */
- setupEventListeners() {
- this.connectBtn.addEventListener('click', () => this.connect());
- this.disconnectBtn.addEventListener('click', () => this.disconnect());
- }
-
- /**
- * Add a timestamped message to the debug log
- */
- log(message) {
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
-
- // Add styling based on message type
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3'; // blue for user
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50'; // green for bot
- }
-
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- console.log(message);
- }
-
- /**
- * Update the connection status display
- */
- updateStatus(status) {
- this.statusSpan.textContent = status;
- this.log(`Status: ${status}`);
- }
-
- handleEventToConsole (evt) {
- this.log(`Received event: ${evt.action}`);
- };
-
- /**
- * Set up listeners for track events (start/stop)
- * This handles new tracks being added during the session
- */
- setupTrackListeners() {
- if (!this.dailyCallObject) return;
-
- this.dailyCallObject.on("joined-meeting", () => {
- this.updateStatus('Connected');
- this.connectBtn.disabled = true;
- this.disconnectBtn.disabled = false;
- this.log('Client connected');
- });
- this.dailyCallObject.on("track-started", (evt) => {
- if (evt.track.kind === "audio" && evt.participant.local === false) {
- this.log("Audio track started.")
- this.setupAudioTrack(evt.track);
- }
- });
- this.dailyCallObject.on("track-stopped", this.handleEventToConsole.bind(this));
- this.dailyCallObject.on("participant-joined", this.handleEventToConsole.bind(this));
- this.dailyCallObject.on("participant-updated", this.handleEventToConsole.bind(this));
- this.dailyCallObject.on("participant-left", () => {
- // When the bot leaves, we are also disconnecting from the call
- this.disconnect()
- });
- this.dailyCallObject.on("left-meeting", () => {
- this.updateStatus('Disconnected');
- this.connectBtn.disabled = false;
- this.disconnectBtn.disabled = true;
- this.log('Client disconnected');
- });
- this.dailyCallObject.on("error", this.handleEventToConsole.bind(this));
- }
-
- /**
- * Set up an audio track for playback
- * Handles both initial setup and track updates
- */
- setupAudioTrack(track) {
- this.log(`Setting up audio track, track state: ${track.readyState}, muted: ${track.muted}`);
-
- // Check if we're already playing this track
- if (this.botAudio.srcObject) {
- const oldTrack = this.botAudio.srcObject.getAudioTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
- // Create a new MediaStream with the track and set it as the audio source
- this.botAudio.srcObject = new MediaStream([track]);
- this.botAudio.onplaying = async (event) => {
- this.log("onplaying")
- this.log("Will send the audio message to play the audio at the next tick")
- this.dailyCallObject.sendAppMessage("playable")
- }
- }
-
- async fetchRoomInfo() {
- let connectUrl = '/connect'
- let res = await fetch(connectUrl, {
- method: "POST",
- mode: "cors",
- headers: new Headers({
- "Content-Type": "application/json"
- }),
- })
- if (res.ok) {
- return res.json();
- }
- }
-
- /**
- * Initialize and connect to the bot
- * This sets up the RTVI client, initializes devices, and establishes the connection
- */
- async connect() {
- try {
- // Initialize the client
- this.dailyCallObject = Daily.createCallObject({
- subscribeToTracksAutomatically: true,
- });
-
- // Set up listeners for media track events
- this.setupTrackListeners();
-
- this.log('Creating the bot...');
- let roomInfo = await this.fetchRoomInfo()
-
- // Connect to the bot
- this.log('Connecting to bot...');
- // Only for making debugger easier
- window.callObject = this.dailyCallObject;
- await this.dailyCallObject.join({
- url: roomInfo.room_url,
- });
-
- this.log('Connection complete');
- } catch (error) {
- // Handle any errors during connection
- this.log(`Error connecting: ${error.message}`);
- this.log(`Error stack: ${error.stack}`);
- this.updateStatus('Error');
-
- // Clean up if there's an error
- if (this.dailyCallObject) {
- try {
- await this.dailyCallObject.leave();
- } catch (disconnectError) {
- this.log(`Error during disconnect: ${disconnectError.message}`);
- }
- }
- }
- }
-
- /**
- * Disconnect from the bot and clean up media resources
- */
- async disconnect() {
- if (this.dailyCallObject) {
- try {
- // Disconnect the RTVI client
- await this.dailyCallObject.leave();
- await this.dailyCallObject.destroy();
- this.dailyCallObject = null;
-
- // Clean up audio
- if (this.botAudio.srcObject) {
- this.botAudio.srcObject.getTracks().forEach((track) => track.stop());
- this.botAudio.srcObject = null;
- }
- } catch (error) {
- this.log(`Error disconnecting: ${error.message}`);
- }
- }
- }
-}
-
-// Initialize the client when the page loads
-window.addEventListener('DOMContentLoaded', () => {
- new ChatbotClient();
-});
diff --git a/examples/bot-ready-signalling/client/javascript/src/style.css b/examples/bot-ready-signalling/client/javascript/src/style.css
deleted file mode 100644
index a3cb55776..000000000
--- a/examples/bot-ready-signalling/client/javascript/src/style.css
+++ /dev/null
@@ -1,98 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#bot-video-container {
- width: 640px;
- height: 360px;
- background-color: #e0e0e0;
- border-radius: 8px;
- margin: 20px auto;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-#bot-video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 200px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/bot-ready-signalling/client/javascript/vite.config.js b/examples/bot-ready-signalling/client/javascript/vite.config.js
deleted file mode 100644
index 5ccad4a6b..000000000
--- a/examples/bot-ready-signalling/client/javascript/vite.config.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { defineConfig } from 'vite';
-
-export default defineConfig({
- server: {
- proxy: {
- // Proxy /api requests to the backend server
- '/connect': {
- target: 'http://0.0.0.0:7860', // Replace with your backend URL
- changeOrigin: true,
- },
- },
- },
-});
diff --git a/examples/bot-ready-signalling/client/react-native/.nvmrc b/examples/bot-ready-signalling/client/react-native/.nvmrc
deleted file mode 100644
index 744ca17ec..000000000
--- a/examples/bot-ready-signalling/client/react-native/.nvmrc
+++ /dev/null
@@ -1 +0,0 @@
-22.14
diff --git a/examples/bot-ready-signalling/client/react-native/README.md b/examples/bot-ready-signalling/client/react-native/README.md
deleted file mode 100644
index 5da0c67be..000000000
--- a/examples/bot-ready-signalling/client/react-native/README.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# React Native Implementation
-
-Basic implementation using the [Pipecat React Native SDK](https://docs.pipecat.ai/client/react-native/introduction).
-
-## Usage
-
-### Expo requirements
-
-This project cannot be used with an [Expo Go](https://docs.expo.dev/workflow/expo-go/) app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
-
-When a project requires custom native code or a config plugin, we need to transition from using [Expo Go](https://docs.expo.dev/workflow/expo-go/)
-to a [development build](https://docs.expo.dev/development/introduction/).
-
-More details about the custom native code used by this demo can be found in [rn-daily-js-expo-config-plugin](https://github.com/daily-co/rn-daily-js-expo-config-plugin).
-
-### Building remotely
-
-If you do not have experience with Xcode and Android Studio builds or do not have them installed locally on your computer, you will need to follow [this guide from Expo to use EAS Build](https://docs.expo.dev/development/create-development-builds/#create-and-install-eas-build).
-
-### Building locally
-
-You will need to have installed locally on your computer:
-- [Xcode](https://developer.apple.com/xcode/) to build for iOS;
-- [Android Studio](https://developer.android.com/studio) to build for Android;
-
-#### Install the demo dependencies
-
-```bash
-# Use the version of node specified in .nvmrc
-nvm i
-
-# Install dependencies
-npm i
-
-# Before a native app can be compiled, the native source code must be generated.
-npx expo prebuild
-
-# Configure the environment variable to connect to the local server
-cp env.example .env
-# edit .env and add your local ip address, for example: http://192.168.1.16:7860
-```
-
-#### Running on Android
-
-After plugging in an Android device [configured for debugging](https://developer.android.com/studio/debug/dev-options), run the following command:
-
-```
-npm run android
-```
-
-#### Running on iOS
-
-Run the following command:
-
-```
-npm run ios
-```
-
-#### Connect to the server
-Use the http://localhost:5173 in your app.
diff --git a/examples/bot-ready-signalling/client/react-native/app.json b/examples/bot-ready-signalling/client/react-native/app.json
deleted file mode 100644
index fb9394e96..000000000
--- a/examples/bot-ready-signalling/client/react-native/app.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "expo": {
- "name": "bot-ready-rn",
- "slug": "bot-ready-rn",
- "version": "1.0.0",
- "orientation": "portrait",
- "icon": "./assets/icon.png",
- "userInterfaceStyle": "light",
- "splash": {
- "image": "./assets/splash.png",
- "resizeMode": "contain",
- "backgroundColor": "#ffffff"
- },
- "updates": {
- "fallbackToCacheTimeout": 0
- },
- "assetBundlePatterns": [
- "**/*"
- ],
- "ios": {
- "supportsTablet": true,
- "bitcode": false,
- "bundleIdentifier": "co.daily.expo.BotReady",
- "infoPlist": {
- "UIBackgroundModes": [
- "voip"
- ]
- },
- "appleTeamId": "EEBGKV9N3N"
- },
- "android": {
- "adaptiveIcon": {
- "foregroundImage": "./assets/adaptive-icon.png",
- "backgroundColor": "#FFFFFF"
- },
- "package": "co.daily.expo.BotReady",
- "permissions": [
- "android.permission.ACCESS_NETWORK_STATE",
- "android.permission.BLUETOOTH",
- "android.permission.CAMERA",
- "android.permission.INTERNET",
- "android.permission.MODIFY_AUDIO_SETTINGS",
- "android.permission.RECORD_AUDIO",
- "android.permission.SYSTEM_ALERT_WINDOW",
- "android.permission.WAKE_LOCK",
- "android.permission.FOREGROUND_SERVICE",
- "android.permission.FOREGROUND_SERVICE_CAMERA",
- "android.permission.FOREGROUND_SERVICE_MICROPHONE",
- "android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION",
- "android.permission.POST_NOTIFICATIONS"
- ]
- },
- "web": {
- "favicon": "./assets/favicon.png"
- },
- "plugins": [
- "@config-plugins/react-native-webrtc",
- "@daily-co/config-plugin-rn-daily-js",
- [
- "expo-build-properties",
- {
- "android": {
- "minSdkVersion": 24,
- "compileSdkVersion": 35,
- "targetSdkVersion": 34,
- "buildToolsVersion": "35.0.0"
- },
- "ios": {
- "deploymentTarget": "15.1"
- }
- }
- ]
- ]
- }
-}
diff --git a/examples/bot-ready-signalling/client/react-native/assets/adaptive-icon.png b/examples/bot-ready-signalling/client/react-native/assets/adaptive-icon.png
deleted file mode 100644
index 03d6f6b6c..000000000
Binary files a/examples/bot-ready-signalling/client/react-native/assets/adaptive-icon.png and /dev/null differ
diff --git a/examples/bot-ready-signalling/client/react-native/assets/favicon.png b/examples/bot-ready-signalling/client/react-native/assets/favicon.png
deleted file mode 100644
index e75f697b1..000000000
Binary files a/examples/bot-ready-signalling/client/react-native/assets/favicon.png and /dev/null differ
diff --git a/examples/bot-ready-signalling/client/react-native/assets/icon.png b/examples/bot-ready-signalling/client/react-native/assets/icon.png
deleted file mode 100644
index a0b1526fc..000000000
Binary files a/examples/bot-ready-signalling/client/react-native/assets/icon.png and /dev/null differ
diff --git a/examples/bot-ready-signalling/client/react-native/assets/splash.png b/examples/bot-ready-signalling/client/react-native/assets/splash.png
deleted file mode 100644
index 0e89705a9..000000000
Binary files a/examples/bot-ready-signalling/client/react-native/assets/splash.png and /dev/null differ
diff --git a/examples/bot-ready-signalling/client/react-native/babel.config.js b/examples/bot-ready-signalling/client/react-native/babel.config.js
deleted file mode 100644
index 81d4cb0da..000000000
--- a/examples/bot-ready-signalling/client/react-native/babel.config.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = function(api) {
- api.cache(true);
- return {
- presets: ['babel-preset-expo'],
- plugins: [["module:react-native-dotenv"]],
- };
-};
diff --git a/examples/bot-ready-signalling/client/react-native/env.example b/examples/bot-ready-signalling/client/react-native/env.example
deleted file mode 100644
index 4c242c880..000000000
--- a/examples/bot-ready-signalling/client/react-native/env.example
+++ /dev/null
@@ -1 +0,0 @@
-API_BASE_URL=http://YOUR_LOCAL_IP:7860
diff --git a/examples/bot-ready-signalling/client/react-native/index.js b/examples/bot-ready-signalling/client/react-native/index.js
deleted file mode 100644
index 9d93586db..000000000
--- a/examples/bot-ready-signalling/client/react-native/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { registerRootComponent } from "expo";
-
-import App from "./src/App";
-
-// registerRootComponent calls AppRegistry.registerComponent('main', () => App);
-// It also ensures that the environment is set up appropriately
-registerRootComponent(App);
diff --git a/examples/bot-ready-signalling/client/react-native/metro.config.js b/examples/bot-ready-signalling/client/react-native/metro.config.js
deleted file mode 100644
index 9430b0f9b..000000000
--- a/examples/bot-ready-signalling/client/react-native/metro.config.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// Learn more https://docs.expo.io/guides/customizing-metro
-const { getDefaultConfig } = require('expo/metro-config');
-
-module.exports = getDefaultConfig(__dirname);
diff --git a/examples/bot-ready-signalling/client/react-native/package-lock.json b/examples/bot-ready-signalling/client/react-native/package-lock.json
deleted file mode 100644
index 244ba6a98..000000000
--- a/examples/bot-ready-signalling/client/react-native/package-lock.json
+++ /dev/null
@@ -1,10627 +0,0 @@
-{
- "name": "bot-ready-rn",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "bot-ready-rn",
- "version": "1.0.0",
- "dependencies": {
- "@config-plugins/react-native-webrtc": "^10.0.0",
- "@daily-co/config-plugin-rn-daily-js": "0.0.7",
- "@daily-co/react-native-daily-js": "^0.70.0",
- "@daily-co/react-native-webrtc": "^118.0.3-daily.2",
- "@react-native-async-storage/async-storage": "1.23.1",
- "expo": "^52.0.0",
- "expo-build-properties": "~0.13.1",
- "expo-dev-client": "~5.0.5",
- "expo-splash-screen": "~0.29.16",
- "expo-status-bar": "~2.0.0",
- "react": "18.3.1",
- "react-native": "0.76.3",
- "react-native-background-timer": "^2.4.1",
- "react-native-dotenv": "^3.4.11",
- "react-native-get-random-values": "^1.11.0"
- },
- "devDependencies": {
- "@babel/core": "^7.12.9"
- }
- },
- "node_modules/@0no-co/graphql.web": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.1.2.tgz",
- "integrity": "sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==",
- "peerDependencies": {
- "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"
- },
- "peerDependenciesMeta": {
- "graphql": {
- "optional": true
- }
- }
- },
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.26.2",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
- "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.25.9",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
- "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
- "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.10",
- "@babel/helper-compilation-targets": "^7.26.5",
- "@babel/helper-module-transforms": "^7.26.0",
- "@babel/helpers": "^7.26.10",
- "@babel/parser": "^7.26.10",
- "@babel/template": "^7.26.9",
- "@babel/traverse": "^7.26.10",
- "@babel/types": "^7.26.10",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz",
- "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==",
- "dependencies": {
- "@babel/parser": "^7.27.0",
- "@babel/types": "^7.27.0",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^3.0.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
- "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
- "dependencies": {
- "@babel/types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz",
- "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==",
- "dependencies": {
- "@babel/compat-data": "^7.26.8",
- "@babel/helper-validator-option": "^7.25.9",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz",
- "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-member-expression-to-functions": "^7.25.9",
- "@babel/helper-optimise-call-expression": "^7.25.9",
- "@babel/helper-replace-supers": "^7.26.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/traverse": "^7.27.0",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz",
- "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "regexpu-core": "^6.2.0",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz",
- "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==",
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
- "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
- "dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
- "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
- "dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
- "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
- "dependencies": {
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9",
- "@babel/traverse": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
- "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
- "dependencies": {
- "@babel/types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
- "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
- "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-wrap-function": "^7.25.9",
- "@babel/traverse": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
- "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
- "dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.25.9",
- "@babel/helper-optimise-call-expression": "^7.25.9",
- "@babel/traverse": "^7.26.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
- "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
- "dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
- "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-wrap-function": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
- "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
- "dependencies": {
- "@babel/template": "^7.25.9",
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz",
- "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==",
- "dependencies": {
- "@babel/template": "^7.27.0",
- "@babel/types": "^7.27.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz",
- "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.25.9",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
- },
- "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
- "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
- "dependencies": {
- "@babel/types": "^7.27.0"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz",
- "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/traverse": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz",
- "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz",
- "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
- "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/plugin-transform-optional-chaining": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.13.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz",
- "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/traverse": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-proposal-class-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
- "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
- "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.",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz",
- "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/plugin-syntax-decorators": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-export-default-from": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz",
- "integrity": "sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
- "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
- "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.",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-optional-chaining": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz",
- "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==",
- "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.",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.21.0-placeholder-for-preset-env.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
- "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
- "peer": true,
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-decorators": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz",
- "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-export-default-from": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.9.tgz",
- "integrity": "sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-flow": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz",
- "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
- "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
- "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
- "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
- "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
- "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz",
- "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz",
- "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/helper-remap-async-to-generator": "^7.25.9",
- "@babel/traverse": "^7.26.8"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
- "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
- "dependencies": {
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-remap-async-to-generator": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz",
- "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz",
- "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz",
- "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz",
- "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==",
- "peer": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.12.0"
- }
- },
- "node_modules/@babel/plugin-transform-classes": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz",
- "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-compilation-targets": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-replace-supers": "^7.25.9",
- "@babel/traverse": "^7.25.9",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
- "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/template": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz",
- "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz",
- "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==",
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz",
- "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz",
- "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==",
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz",
- "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
- "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz",
- "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-flow-strip-types": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.26.5.tgz",
- "integrity": "sha512-eGK26RsbIkYUns3Y8qKl362juDDYK+wEdPGHGrhzUl6CewZFo55VZ7hg+CyMFU4dd5QQakBN86nBMpRsFpRvbQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/plugin-syntax-flow": "^7.26.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-for-of": {
- "version": "7.26.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz",
- "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-function-name": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz",
- "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==",
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/traverse": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz",
- "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-literals": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz",
- "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz",
- "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz",
- "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz",
- "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==",
- "peer": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
- "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
- "dependencies": {
- "@babel/helper-module-transforms": "^7.26.0",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz",
- "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==",
- "peer": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9",
- "@babel/traverse": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz",
- "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==",
- "peer": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz",
- "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-new-target": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz",
- "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.26.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
- "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz",
- "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz",
- "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==",
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/plugin-transform-parameters": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-object-super": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz",
- "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-replace-supers": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz",
- "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz",
- "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-parameters": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz",
- "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz",
- "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz",
- "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz",
- "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz",
- "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz",
- "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/plugin-syntax-jsx": "^7.25.9",
- "@babel/types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx-development": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz",
- "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==",
- "dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx-self": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
- "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx-source": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
- "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-pure-annotations": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz",
- "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz",
- "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5",
- "regenerator-transform": "^0.15.2"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-regexp-modifiers": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz",
- "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==",
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz",
- "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-runtime": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz",
- "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==",
- "dependencies": {
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.26.5",
- "babel-plugin-polyfill-corejs2": "^0.4.10",
- "babel-plugin-polyfill-corejs3": "^0.11.0",
- "babel-plugin-polyfill-regenerator": "^0.6.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz",
- "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-spread": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz",
- "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz",
- "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz",
- "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz",
- "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typescript": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz",
- "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-create-class-features-plugin": "^7.27.0",
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/plugin-syntax-typescript": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz",
- "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz",
- "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==",
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz",
- "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==",
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz",
- "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==",
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/preset-env": {
- "version": "7.26.9",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz",
- "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==",
- "peer": true,
- "dependencies": {
- "@babel/compat-data": "^7.26.8",
- "@babel/helper-compilation-targets": "^7.26.5",
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/helper-validator-option": "^7.25.9",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9",
- "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@babel/plugin-syntax-import-assertions": "^7.26.0",
- "@babel/plugin-syntax-import-attributes": "^7.26.0",
- "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.25.9",
- "@babel/plugin-transform-async-generator-functions": "^7.26.8",
- "@babel/plugin-transform-async-to-generator": "^7.25.9",
- "@babel/plugin-transform-block-scoped-functions": "^7.26.5",
- "@babel/plugin-transform-block-scoping": "^7.25.9",
- "@babel/plugin-transform-class-properties": "^7.25.9",
- "@babel/plugin-transform-class-static-block": "^7.26.0",
- "@babel/plugin-transform-classes": "^7.25.9",
- "@babel/plugin-transform-computed-properties": "^7.25.9",
- "@babel/plugin-transform-destructuring": "^7.25.9",
- "@babel/plugin-transform-dotall-regex": "^7.25.9",
- "@babel/plugin-transform-duplicate-keys": "^7.25.9",
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
- "@babel/plugin-transform-dynamic-import": "^7.25.9",
- "@babel/plugin-transform-exponentiation-operator": "^7.26.3",
- "@babel/plugin-transform-export-namespace-from": "^7.25.9",
- "@babel/plugin-transform-for-of": "^7.26.9",
- "@babel/plugin-transform-function-name": "^7.25.9",
- "@babel/plugin-transform-json-strings": "^7.25.9",
- "@babel/plugin-transform-literals": "^7.25.9",
- "@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
- "@babel/plugin-transform-member-expression-literals": "^7.25.9",
- "@babel/plugin-transform-modules-amd": "^7.25.9",
- "@babel/plugin-transform-modules-commonjs": "^7.26.3",
- "@babel/plugin-transform-modules-systemjs": "^7.25.9",
- "@babel/plugin-transform-modules-umd": "^7.25.9",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
- "@babel/plugin-transform-new-target": "^7.25.9",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6",
- "@babel/plugin-transform-numeric-separator": "^7.25.9",
- "@babel/plugin-transform-object-rest-spread": "^7.25.9",
- "@babel/plugin-transform-object-super": "^7.25.9",
- "@babel/plugin-transform-optional-catch-binding": "^7.25.9",
- "@babel/plugin-transform-optional-chaining": "^7.25.9",
- "@babel/plugin-transform-parameters": "^7.25.9",
- "@babel/plugin-transform-private-methods": "^7.25.9",
- "@babel/plugin-transform-private-property-in-object": "^7.25.9",
- "@babel/plugin-transform-property-literals": "^7.25.9",
- "@babel/plugin-transform-regenerator": "^7.25.9",
- "@babel/plugin-transform-regexp-modifiers": "^7.26.0",
- "@babel/plugin-transform-reserved-words": "^7.25.9",
- "@babel/plugin-transform-shorthand-properties": "^7.25.9",
- "@babel/plugin-transform-spread": "^7.25.9",
- "@babel/plugin-transform-sticky-regex": "^7.25.9",
- "@babel/plugin-transform-template-literals": "^7.26.8",
- "@babel/plugin-transform-typeof-symbol": "^7.26.7",
- "@babel/plugin-transform-unicode-escapes": "^7.25.9",
- "@babel/plugin-transform-unicode-property-regex": "^7.25.9",
- "@babel/plugin-transform-unicode-regex": "^7.25.9",
- "@babel/plugin-transform-unicode-sets-regex": "^7.25.9",
- "@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.10",
- "babel-plugin-polyfill-corejs3": "^0.11.0",
- "babel-plugin-polyfill-regenerator": "^0.6.1",
- "core-js-compat": "^3.40.0",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-flow": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.9.tgz",
- "integrity": "sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-validator-option": "^7.25.9",
- "@babel/plugin-transform-flow-strip-types": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-modules": {
- "version": "0.1.6-no-external-plugins",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
- "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/@babel/preset-react": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz",
- "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-validator-option": "^7.25.9",
- "@babel/plugin-transform-react-display-name": "^7.25.9",
- "@babel/plugin-transform-react-jsx": "^7.25.9",
- "@babel/plugin-transform-react-jsx-development": "^7.25.9",
- "@babel/plugin-transform-react-pure-annotations": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-typescript": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz",
- "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/helper-validator-option": "^7.25.9",
- "@babel/plugin-syntax-jsx": "^7.25.9",
- "@babel/plugin-transform-modules-commonjs": "^7.26.3",
- "@babel/plugin-transform-typescript": "^7.27.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/register": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz",
- "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==",
- "dependencies": {
- "clone-deep": "^4.0.1",
- "find-cache-dir": "^2.0.0",
- "make-dir": "^2.1.0",
- "pirates": "^4.0.6",
- "source-map-support": "^0.5.16"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
- "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
- "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
- "dependencies": {
- "@babel/code-frame": "^7.26.2",
- "@babel/parser": "^7.27.0",
- "@babel/types": "^7.27.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
- "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
- "dependencies": {
- "@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.27.0",
- "@babel/parser": "^7.27.0",
- "@babel/template": "^7.27.0",
- "@babel/types": "^7.27.0",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse--for-generate-function-map": {
- "name": "@babel/traverse",
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz",
- "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==",
- "dependencies": {
- "@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.27.0",
- "@babel/parser": "^7.27.0",
- "@babel/template": "^7.27.0",
- "@babel/types": "^7.27.0",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
- "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
- "dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@config-plugins/react-native-webrtc": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/@config-plugins/react-native-webrtc/-/react-native-webrtc-10.0.0.tgz",
- "integrity": "sha512-q6owBOwQo3HRx4/b0FteE06Ymlcx7pK5bw+Stg77wgTWyxWAJ90yfVvvdMckzxuxMwDd78o9yCLKIONTulHD4A==",
- "peerDependencies": {
- "expo": "^52"
- }
- },
- "node_modules/@daily-co/config-plugin-rn-daily-js": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/@daily-co/config-plugin-rn-daily-js/-/config-plugin-rn-daily-js-0.0.7.tgz",
- "integrity": "sha512-8j6itEb2sxkxPDOnaO0FKpGIKvbvtLho0l25CdS01aa4VEAUKHWrxyUO6OVQkt2btfifsugBD6oUpO0X1fCbKQ==",
- "dependencies": {
- "expo-build-properties": "~0.8.3"
- },
- "peerDependencies": {
- "expo": "^52.0.0"
- }
- },
- "node_modules/@daily-co/config-plugin-rn-daily-js/node_modules/expo-build-properties": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/expo-build-properties/-/expo-build-properties-0.8.3.tgz",
- "integrity": "sha512-kEDDuAadHqJTkvCGK4fXYHVrePiJO1DjyW95AicmwuGwQvGJydYFbuoauf9ybAU+4UH4arhbce8gHI3ZpIj3Jw==",
- "dependencies": {
- "ajv": "^8.11.0",
- "semver": "^7.5.3"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/@daily-co/config-plugin-rn-daily-js/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.73.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.73.0.tgz",
- "integrity": "sha512-Wz8c60hgmkx8fcEeDAi4L4J0rbafiihWKyXFyhYoFYPsw2OdChHpA4RYwIB+1enRws5IK+/HdmzFDYLQsB4A6w==",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@daily-co/react-native-daily-js": {
- "version": "0.70.0",
- "resolved": "https://registry.npmjs.org/@daily-co/react-native-daily-js/-/react-native-daily-js-0.70.0.tgz",
- "integrity": "sha512-arHUJSQXs756XPq6PlddBcFDYgBMMg900B7KJhazr8tKBBsL4nb0bbz+WJfAAcsPOOJEamiFvlp9Qw3LlM3GfA==",
- "dependencies": {
- "@daily-co/daily-js": "^0.73.0",
- "@types/react-native-background-timer": "^2.0.0",
- "base-64": "^1.0.0",
- "react-native-url-polyfill": "^1.1.2"
- },
- "peerDependencies": {
- "@daily-co/react-native-webrtc": "^118.0.3-daily.2",
- "@react-native-async-storage/async-storage": "^1.15.7",
- "react-native-background-timer": "^2.3.1",
- "react-native-get-random-values": "^1.9.0"
- }
- },
- "node_modules/@daily-co/react-native-webrtc": {
- "version": "118.0.3-daily.2",
- "resolved": "https://registry.npmjs.org/@daily-co/react-native-webrtc/-/react-native-webrtc-118.0.3-daily.2.tgz",
- "integrity": "sha512-Ofwvnx0WL+Q21tQBJOWNKvV1gk/5kwPerwUCD7hCREuBDVRfSNtpRhQcuISNjmn7Z2eV405hgK0c9kOUu8vDQg==",
- "dependencies": {
- "@types/react": "17.0.40",
- "@types/react-native": "0.67.3",
- "base64-js": "1.5.1",
- "debug": "4.3.4",
- "event-target-shim": "6.0.2"
- },
- "peerDependencies": {
- "react-native": ">=0.60.0"
- }
- },
- "node_modules/@daily-co/react-native-webrtc/node_modules/@types/react": {
- "version": "17.0.40",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.40.tgz",
- "integrity": "sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ==",
- "dependencies": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@daily-co/react-native-webrtc/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@daily-co/react-native-webrtc/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@expo/bunyan": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz",
- "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==",
- "dependencies": {
- "uuid": "^8.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@expo/cli": {
- "version": "0.22.26",
- "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.26.tgz",
- "integrity": "sha512-I689wc8Fn/AX7aUGiwrh3HnssiORMJtR2fpksX+JIe8Cj/EDleblYMSwRPd0025wrwOV9UN1KM/RuEt/QjCS3Q==",
- "dependencies": {
- "@0no-co/graphql.web": "^1.0.8",
- "@babel/runtime": "^7.20.0",
- "@expo/code-signing-certificates": "^0.0.5",
- "@expo/config": "~10.0.11",
- "@expo/config-plugins": "~9.0.17",
- "@expo/devcert": "^1.1.2",
- "@expo/env": "~0.4.2",
- "@expo/image-utils": "^0.6.5",
- "@expo/json-file": "^9.0.2",
- "@expo/metro-config": "~0.19.12",
- "@expo/osascript": "^2.1.6",
- "@expo/package-manager": "^1.7.2",
- "@expo/plist": "^0.2.2",
- "@expo/prebuild-config": "~8.2.0",
- "@expo/rudder-sdk-node": "^1.1.1",
- "@expo/spawn-async": "^1.7.2",
- "@expo/ws-tunnel": "^1.0.1",
- "@expo/xcpretty": "^4.3.0",
- "@react-native/dev-middleware": "0.76.9",
- "@urql/core": "^5.0.6",
- "@urql/exchange-retry": "^1.3.0",
- "accepts": "^1.3.8",
- "arg": "^5.0.2",
- "better-opn": "~3.0.2",
- "bplist-creator": "0.0.7",
- "bplist-parser": "^0.3.1",
- "cacache": "^18.0.2",
- "chalk": "^4.0.0",
- "ci-info": "^3.3.0",
- "compression": "^1.7.4",
- "connect": "^3.7.0",
- "debug": "^4.3.4",
- "env-editor": "^0.4.1",
- "fast-glob": "^3.3.2",
- "form-data": "^3.0.1",
- "freeport-async": "^2.0.0",
- "fs-extra": "~8.1.0",
- "getenv": "^1.0.0",
- "glob": "^10.4.2",
- "internal-ip": "^4.3.0",
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1",
- "lodash.debounce": "^4.0.8",
- "minimatch": "^3.0.4",
- "node-forge": "^1.3.1",
- "npm-package-arg": "^11.0.0",
- "ora": "^3.4.0",
- "picomatch": "^3.0.1",
- "pretty-bytes": "^5.6.0",
- "pretty-format": "^29.7.0",
- "progress": "^2.0.3",
- "prompts": "^2.3.2",
- "qrcode-terminal": "0.11.0",
- "require-from-string": "^2.0.2",
- "requireg": "^0.2.2",
- "resolve": "^1.22.2",
- "resolve-from": "^5.0.0",
- "resolve.exports": "^2.0.3",
- "semver": "^7.6.0",
- "send": "^0.19.0",
- "slugify": "^1.3.4",
- "source-map-support": "~0.5.21",
- "stacktrace-parser": "^0.1.10",
- "structured-headers": "^0.4.1",
- "tar": "^6.2.1",
- "temp-dir": "^2.0.0",
- "tempy": "^0.7.1",
- "terminal-link": "^2.1.1",
- "undici": "^6.18.2",
- "unique-string": "~2.0.0",
- "wrap-ansi": "^7.0.0",
- "ws": "^8.12.1"
- },
- "bin": {
- "expo-internal": "build/bin/cli"
- }
- },
- "node_modules/@expo/cli/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/code-signing-certificates": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz",
- "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==",
- "dependencies": {
- "node-forge": "^1.2.1",
- "nullthrows": "^1.1.1"
- }
- },
- "node_modules/@expo/config": {
- "version": "10.0.11",
- "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.11.tgz",
- "integrity": "sha512-nociJ4zr/NmbVfMNe9j/+zRlt7wz/siISu7PjdWE4WE+elEGxWWxsGzltdJG0llzrM+khx8qUiFK5aiVcdMBww==",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "@expo/config-plugins": "~9.0.17",
- "@expo/config-types": "^52.0.5",
- "@expo/json-file": "^9.0.2",
- "deepmerge": "^4.3.1",
- "getenv": "^1.0.0",
- "glob": "^10.4.2",
- "require-from-string": "^2.0.2",
- "resolve-from": "^5.0.0",
- "resolve-workspace-root": "^2.0.0",
- "semver": "^7.6.0",
- "slugify": "^1.3.4",
- "sucrase": "3.35.0"
- }
- },
- "node_modules/@expo/config-plugins": {
- "version": "9.0.17",
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.17.tgz",
- "integrity": "sha512-m24F1COquwOm7PBl5wRbkT9P9DviCXe0D7S7nQsolfbhdCWuvMkfXeoWmgjtdhy7sDlOyIgBrAdnB6MfsWKqIg==",
- "dependencies": {
- "@expo/config-types": "^52.0.5",
- "@expo/json-file": "~9.0.2",
- "@expo/plist": "^0.2.2",
- "@expo/sdk-runtime-versions": "^1.0.0",
- "chalk": "^4.1.2",
- "debug": "^4.3.5",
- "getenv": "^1.0.0",
- "glob": "^10.4.2",
- "resolve-from": "^5.0.0",
- "semver": "^7.5.4",
- "slash": "^3.0.0",
- "slugify": "^1.6.6",
- "xcode": "^3.0.1",
- "xml2js": "0.6.0"
- }
- },
- "node_modules/@expo/config-plugins/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/config-types": {
- "version": "52.0.5",
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.5.tgz",
- "integrity": "sha512-AMDeuDLHXXqd8W+0zSjIt7f37vUd/BP8p43k68NHpyAvQO+z8mbQZm3cNQVAMySeayK2XoPigAFB1JF2NFajaA=="
- },
- "node_modules/@expo/config/node_modules/@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/@expo/config/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/devcert": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.0.tgz",
- "integrity": "sha512-Uilcv3xGELD5t/b0eM4cxBFEKQRIivB3v7i+VhWLV/gL98aw810unLKKJbGAxAIhY6Ipyz8ChWibFsKFXYwstA==",
- "dependencies": {
- "@expo/sudo-prompt": "^9.3.1",
- "debug": "^3.1.0",
- "glob": "^10.4.2"
- }
- },
- "node_modules/@expo/devcert/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/@expo/env": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.4.2.tgz",
- "integrity": "sha512-TgbCgvSk0Kq0e2fLoqHwEBL4M0ztFjnBEz0YCDm5boc1nvkV1VMuIMteVdeBwnTh8Z0oPJTwHCD49vhMEt1I6A==",
- "dependencies": {
- "chalk": "^4.0.0",
- "debug": "^4.3.4",
- "dotenv": "~16.4.5",
- "dotenv-expand": "~11.0.6",
- "getenv": "^1.0.0"
- }
- },
- "node_modules/@expo/fingerprint": {
- "version": "0.11.11",
- "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.11.tgz",
- "integrity": "sha512-gNyn1KnAOpEa8gSNsYqXMTcq0fSwqU/vit6fP5863vLSKxHm/dNt/gm/uZJxrRZxKq71KUJWF6I7d3z8qIfq5g==",
- "dependencies": {
- "@expo/spawn-async": "^1.7.2",
- "arg": "^5.0.2",
- "chalk": "^4.1.2",
- "debug": "^4.3.4",
- "find-up": "^5.0.0",
- "getenv": "^1.0.0",
- "minimatch": "^3.0.4",
- "p-limit": "^3.1.0",
- "resolve-from": "^5.0.0",
- "semver": "^7.6.0"
- },
- "bin": {
- "fingerprint": "bin/cli.js"
- }
- },
- "node_modules/@expo/fingerprint/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/image-utils": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.6.5.tgz",
- "integrity": "sha512-RsS/1CwJYzccvlprYktD42KjyfWZECH6PPIEowvoSmXfGLfdViwcUEI4RvBfKX5Jli6P67H+6YmHvPTbGOboew==",
- "dependencies": {
- "@expo/spawn-async": "^1.7.2",
- "chalk": "^4.0.0",
- "fs-extra": "9.0.0",
- "getenv": "^1.0.0",
- "jimp-compact": "0.16.1",
- "parse-png": "^2.1.0",
- "resolve-from": "^5.0.0",
- "semver": "^7.6.0",
- "temp-dir": "~2.0.0",
- "unique-string": "~2.0.0"
- }
- },
- "node_modules/@expo/image-utils/node_modules/fs-extra": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz",
- "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/image-utils/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@expo/image-utils/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/image-utils/node_modules/universalify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
- "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@expo/json-file": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.2.tgz",
- "integrity": "sha512-yAznIUrybOIWp3Uax7yRflB0xsEpvIwIEqIjao9SGi2Gaa+N0OamWfe0fnXBSWF+2zzF4VvqwT4W5zwelchfgw==",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "json5": "^2.2.3",
- "write-file-atomic": "^2.3.0"
- }
- },
- "node_modules/@expo/json-file/node_modules/@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/@expo/metro-config": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.12.tgz",
- "integrity": "sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==",
- "dependencies": {
- "@babel/core": "^7.20.0",
- "@babel/generator": "^7.20.5",
- "@babel/parser": "^7.20.0",
- "@babel/types": "^7.20.0",
- "@expo/config": "~10.0.11",
- "@expo/env": "~0.4.2",
- "@expo/json-file": "~9.0.2",
- "@expo/spawn-async": "^1.7.2",
- "chalk": "^4.1.0",
- "debug": "^4.3.2",
- "fs-extra": "^9.1.0",
- "getenv": "^1.0.0",
- "glob": "^10.4.2",
- "jsc-safe-url": "^0.2.4",
- "lightningcss": "~1.27.0",
- "minimatch": "^3.0.4",
- "postcss": "~8.4.32",
- "resolve-from": "^5.0.0"
- }
- },
- "node_modules/@expo/metro-config/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/metro-config/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@expo/metro-config/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@expo/osascript": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.6.tgz",
- "integrity": "sha512-SbMp4BUwDAKiFF4zZEJf32rRYMeNnLK9u4FaPo0lQRer60F+SKd20NTSys0wgssiVeQyQz2OhGLRx3cxYowAGw==",
- "dependencies": {
- "@expo/spawn-async": "^1.7.2",
- "exec-async": "^2.2.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@expo/package-manager": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.7.2.tgz",
- "integrity": "sha512-wT/qh9ebNjl6xr00bYkSh93b6E/78J3JPlT6WzGbxbsnv5FIZKB/nr522oWqVe1E+ML7BpXs8WugErWDN9kOFg==",
- "dependencies": {
- "@expo/json-file": "^9.0.2",
- "@expo/spawn-async": "^1.7.2",
- "ansi-regex": "^5.0.0",
- "chalk": "^4.0.0",
- "find-up": "^5.0.0",
- "js-yaml": "^3.13.1",
- "micromatch": "^4.0.8",
- "npm-package-arg": "^11.0.0",
- "ora": "^3.4.0",
- "resolve-workspace-root": "^2.0.0",
- "split": "^1.0.1",
- "sudo-prompt": "9.1.1"
- }
- },
- "node_modules/@expo/plist": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.2.tgz",
- "integrity": "sha512-ZZGvTO6vEWq02UAPs3LIdja+HRO18+LRI5QuDl6Hs3Ps7KX7xU6Y6kjahWKY37Rx2YjNpX07dGpBFzzC+vKa2g==",
- "dependencies": {
- "@xmldom/xmldom": "~0.7.7",
- "base64-js": "^1.2.3",
- "xmlbuilder": "^14.0.0"
- }
- },
- "node_modules/@expo/prebuild-config": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.2.0.tgz",
- "integrity": "sha512-CxiPpd980s0jyxi7eyN3i/7YKu3XL+8qPjBZUCYtc0+axpGweqIkq2CslyLSKHyqVyH/zlPkbVgWdyiYavFS5Q==",
- "dependencies": {
- "@expo/config": "~10.0.11",
- "@expo/config-plugins": "~9.0.17",
- "@expo/config-types": "^52.0.5",
- "@expo/image-utils": "^0.6.5",
- "@expo/json-file": "^9.0.2",
- "@react-native/normalize-colors": "0.76.9",
- "debug": "^4.3.1",
- "fs-extra": "^9.0.0",
- "resolve-from": "^5.0.0",
- "semver": "^7.6.0",
- "xml2js": "0.6.0"
- }
- },
- "node_modules/@expo/prebuild-config/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/prebuild-config/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@expo/prebuild-config/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/prebuild-config/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@expo/rudder-sdk-node": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz",
- "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==",
- "dependencies": {
- "@expo/bunyan": "^4.0.0",
- "@segment/loosely-validate-event": "^2.0.0",
- "fetch-retry": "^4.1.1",
- "md5": "^2.2.1",
- "node-fetch": "^2.6.1",
- "remove-trailing-slash": "^0.1.0",
- "uuid": "^8.3.2"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@expo/sdk-runtime-versions": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz",
- "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ=="
- },
- "node_modules/@expo/spawn-async": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz",
- "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==",
- "dependencies": {
- "cross-spawn": "^7.0.3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@expo/sudo-prompt": {
- "version": "9.3.2",
- "resolved": "https://registry.npmjs.org/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz",
- "integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw=="
- },
- "node_modules/@expo/vector-icons": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.1.0.tgz",
- "integrity": "sha512-7T09UE9h8QDTsUeMGymB4i+iqvtEeaO5VvUjryFB4tugDTG/bkzViWA74hm5pfjjDEhYMXWaX112mcvhccmIwQ==",
- "peerDependencies": {
- "expo-font": "*",
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@expo/ws-tunnel": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz",
- "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q=="
- },
- "node_modules/@expo/xcpretty": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.2.tgz",
- "integrity": "sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==",
- "dependencies": {
- "@babel/code-frame": "7.10.4",
- "chalk": "^4.1.0",
- "find-up": "^5.0.0",
- "js-yaml": "^4.1.0"
- },
- "bin": {
- "excpretty": "build/cli.js"
- }
- },
- "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/@expo/xcpretty/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
- },
- "node_modules/@expo/xcpretty/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/@isaacs/ttlcache": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz",
- "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
- "dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/create-cache-key-function": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz",
- "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==",
- "dependencies": {
- "@jest/types": "^29.6.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/environment": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
- "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
- "dependencies": {
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-mock": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/fake-timers": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
- "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@sinonjs/fake-timers": "^10.0.2",
- "@types/node": "*",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/schemas": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dependencies": {
- "@sinclair/typebox": "^0.27.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/transform": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
- "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "babel-plugin-istanbul": "^6.1.1",
- "chalk": "^4.0.0",
- "convert-source-map": "^2.0.0",
- "fast-json-stable-stringify": "^2.1.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
- "slash": "^3.0.0",
- "write-file-atomic": "^4.0.2"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/transform/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
- },
- "node_modules/@jest/transform/node_modules/write-file-atomic": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
- "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
- "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
- "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@npmcli/fs": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
- "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
- "dependencies": {
- "semver": "^7.3.5"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/@npmcli/fs/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@react-native-async-storage/async-storage": {
- "version": "1.23.1",
- "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz",
- "integrity": "sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA==",
- "dependencies": {
- "merge-options": "^3.0.4"
- },
- "peerDependencies": {
- "react-native": "^0.0.0-0 || >=0.60 <1.0"
- }
- },
- "node_modules/@react-native/assets-registry": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.3.tgz",
- "integrity": "sha512-7Fnc3lzCFFpnoyL1egua6d/qUp0KiIpeSLbfOMln4nI2g2BMzyFHdPjJnpLV2NehmS0omOOkrfRqK5u1F/MXzA==",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/babel-plugin-codegen": {
- "version": "0.76.9",
- "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.9.tgz",
- "integrity": "sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==",
- "dependencies": {
- "@react-native/codegen": "0.76.9"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/babel-preset": {
- "version": "0.76.9",
- "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.9.tgz",
- "integrity": "sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==",
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/plugin-proposal-export-default-from": "^7.24.7",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-default-from": "^7.24.7",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.24.7",
- "@babel/plugin-transform-async-generator-functions": "^7.25.4",
- "@babel/plugin-transform-async-to-generator": "^7.24.7",
- "@babel/plugin-transform-block-scoping": "^7.25.0",
- "@babel/plugin-transform-class-properties": "^7.25.4",
- "@babel/plugin-transform-classes": "^7.25.4",
- "@babel/plugin-transform-computed-properties": "^7.24.7",
- "@babel/plugin-transform-destructuring": "^7.24.8",
- "@babel/plugin-transform-flow-strip-types": "^7.25.2",
- "@babel/plugin-transform-for-of": "^7.24.7",
- "@babel/plugin-transform-function-name": "^7.25.1",
- "@babel/plugin-transform-literals": "^7.25.2",
- "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
- "@babel/plugin-transform-modules-commonjs": "^7.24.8",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
- "@babel/plugin-transform-numeric-separator": "^7.24.7",
- "@babel/plugin-transform-object-rest-spread": "^7.24.7",
- "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
- "@babel/plugin-transform-optional-chaining": "^7.24.8",
- "@babel/plugin-transform-parameters": "^7.24.7",
- "@babel/plugin-transform-private-methods": "^7.24.7",
- "@babel/plugin-transform-private-property-in-object": "^7.24.7",
- "@babel/plugin-transform-react-display-name": "^7.24.7",
- "@babel/plugin-transform-react-jsx": "^7.25.2",
- "@babel/plugin-transform-react-jsx-self": "^7.24.7",
- "@babel/plugin-transform-react-jsx-source": "^7.24.7",
- "@babel/plugin-transform-regenerator": "^7.24.7",
- "@babel/plugin-transform-runtime": "^7.24.7",
- "@babel/plugin-transform-shorthand-properties": "^7.24.7",
- "@babel/plugin-transform-spread": "^7.24.7",
- "@babel/plugin-transform-sticky-regex": "^7.24.7",
- "@babel/plugin-transform-typescript": "^7.25.2",
- "@babel/plugin-transform-unicode-regex": "^7.24.7",
- "@babel/template": "^7.25.0",
- "@react-native/babel-plugin-codegen": "0.76.9",
- "babel-plugin-syntax-hermes-parser": "^0.25.1",
- "babel-plugin-transform-flow-enums": "^0.0.2",
- "react-refresh": "^0.14.0"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@babel/core": "*"
- }
- },
- "node_modules/@react-native/codegen": {
- "version": "0.76.9",
- "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.9.tgz",
- "integrity": "sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==",
- "dependencies": {
- "@babel/parser": "^7.25.3",
- "glob": "^7.1.1",
- "hermes-parser": "0.23.1",
- "invariant": "^2.2.4",
- "jscodeshift": "^0.14.0",
- "mkdirp": "^0.5.1",
- "nullthrows": "^1.1.1",
- "yargs": "^17.6.2"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@babel/preset-env": "^7.1.6"
- }
- },
- "node_modules/@react-native/codegen/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@react-native/community-cli-plugin": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.3.tgz",
- "integrity": "sha512-vgsLixHS24jR0d0QqPykBWFaC+V8x9cM3cs4oYXw3W199jgBNGP9MWcUJLazD2vzrT/lUTVBVg0rBeB+4XR6fg==",
- "dependencies": {
- "@react-native/dev-middleware": "0.76.3",
- "@react-native/metro-babel-transformer": "0.76.3",
- "chalk": "^4.0.0",
- "execa": "^5.1.1",
- "invariant": "^2.2.4",
- "metro": "^0.81.0",
- "metro-config": "^0.81.0",
- "metro-core": "^0.81.0",
- "node-fetch": "^2.2.0",
- "readline": "^1.3.0",
- "semver": "^7.1.3"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@react-native-community/cli-server-api": "*"
- },
- "peerDependenciesMeta": {
- "@react-native-community/cli-server-api": {
- "optional": true
- }
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.3.tgz",
- "integrity": "sha512-pMHQ3NpPB28RxXciSvm2yD+uDx3pkhzfuWkc7VFgOduyzPSIr0zotUiOJzsAtrj8++bPbOsAraCeQhCqoOTWQw==",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.3.tgz",
- "integrity": "sha512-b+2IpW40z1/S5Jo5JKrWPmucYU/PzeGyGBZZ/SJvmRnBDaP3txb9yIqNZAII1EWsKNhedh8vyRO5PSuJ9Juqzw==",
- "dependencies": {
- "@isaacs/ttlcache": "^1.4.1",
- "@react-native/debugger-frontend": "0.76.3",
- "chrome-launcher": "^0.15.2",
- "chromium-edge-launcher": "^0.2.0",
- "connect": "^3.6.5",
- "debug": "^2.2.0",
- "nullthrows": "^1.1.1",
- "open": "^7.0.3",
- "selfsigned": "^2.4.1",
- "serve-static": "^1.13.1",
- "ws": "^6.2.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
- },
- "node_modules/@react-native/community-cli-plugin/node_modules/ws": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
- "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
- "dependencies": {
- "async-limiter": "~1.0.0"
- }
- },
- "node_modules/@react-native/debugger-frontend": {
- "version": "0.76.9",
- "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.9.tgz",
- "integrity": "sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/dev-middleware": {
- "version": "0.76.9",
- "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.9.tgz",
- "integrity": "sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==",
- "dependencies": {
- "@isaacs/ttlcache": "^1.4.1",
- "@react-native/debugger-frontend": "0.76.9",
- "chrome-launcher": "^0.15.2",
- "chromium-edge-launcher": "^0.2.0",
- "connect": "^3.6.5",
- "debug": "^2.2.0",
- "invariant": "^2.2.4",
- "nullthrows": "^1.1.1",
- "open": "^7.0.3",
- "selfsigned": "^2.4.1",
- "serve-static": "^1.13.1",
- "ws": "^6.2.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/dev-middleware/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/@react-native/dev-middleware/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/@react-native/dev-middleware/node_modules/ws": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
- "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
- "dependencies": {
- "async-limiter": "~1.0.0"
- }
- },
- "node_modules/@react-native/gradle-plugin": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.3.tgz",
- "integrity": "sha512-t0aYZ8ND7+yc+yIm6Yp52bInneYpki6RSIFZ9/LMUzgMKvEB62ptt/7sfho9QkKHCNxE1DJSWIqLIGi/iHHkyg==",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/js-polyfills": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.3.tgz",
- "integrity": "sha512-pubJFArMMrdZiytH+W95KngcSQs+LsxOBsVHkwgMnpBfRUxXPMK4fudtBwWvhnwN76Oe+WhxSq7vOS5XgoPhmw==",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/metro-babel-transformer": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.3.tgz",
- "integrity": "sha512-b2zQPXmW7avw/7zewc9nzMULPIAjsTwN03hskhxHUJH5pzUf7pIklB3FrgYPZrRhJgzHiNl3tOPu7vqiKzBYPg==",
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@react-native/babel-preset": "0.76.3",
- "hermes-parser": "0.23.1",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@babel/core": "*"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.3.tgz",
- "integrity": "sha512-mZ7jmIIg4bUnxCqY3yTOkoHvvzsDyrZgfnIKiTGm5QACrsIGa5eT3pMFpMm2OpxGXRDrTMsYdPXE2rCyDX52VQ==",
- "dependencies": {
- "@react-native/codegen": "0.76.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.3.tgz",
- "integrity": "sha512-zi2nPlQf9q2fmfPyzwWEj6DU96v8ziWtEfG7CTAX2PG/Vjfsr94vn/wWrCdhBVvLRQ6Kvd/MFAuDYpxmQwIiVQ==",
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/plugin-proposal-export-default-from": "^7.24.7",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-default-from": "^7.24.7",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.24.7",
- "@babel/plugin-transform-async-generator-functions": "^7.25.4",
- "@babel/plugin-transform-async-to-generator": "^7.24.7",
- "@babel/plugin-transform-block-scoping": "^7.25.0",
- "@babel/plugin-transform-class-properties": "^7.25.4",
- "@babel/plugin-transform-classes": "^7.25.4",
- "@babel/plugin-transform-computed-properties": "^7.24.7",
- "@babel/plugin-transform-destructuring": "^7.24.8",
- "@babel/plugin-transform-flow-strip-types": "^7.25.2",
- "@babel/plugin-transform-for-of": "^7.24.7",
- "@babel/plugin-transform-function-name": "^7.25.1",
- "@babel/plugin-transform-literals": "^7.25.2",
- "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
- "@babel/plugin-transform-modules-commonjs": "^7.24.8",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
- "@babel/plugin-transform-numeric-separator": "^7.24.7",
- "@babel/plugin-transform-object-rest-spread": "^7.24.7",
- "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
- "@babel/plugin-transform-optional-chaining": "^7.24.8",
- "@babel/plugin-transform-parameters": "^7.24.7",
- "@babel/plugin-transform-private-methods": "^7.24.7",
- "@babel/plugin-transform-private-property-in-object": "^7.24.7",
- "@babel/plugin-transform-react-display-name": "^7.24.7",
- "@babel/plugin-transform-react-jsx": "^7.25.2",
- "@babel/plugin-transform-react-jsx-self": "^7.24.7",
- "@babel/plugin-transform-react-jsx-source": "^7.24.7",
- "@babel/plugin-transform-regenerator": "^7.24.7",
- "@babel/plugin-transform-runtime": "^7.24.7",
- "@babel/plugin-transform-shorthand-properties": "^7.24.7",
- "@babel/plugin-transform-spread": "^7.24.7",
- "@babel/plugin-transform-sticky-regex": "^7.24.7",
- "@babel/plugin-transform-typescript": "^7.25.2",
- "@babel/plugin-transform-unicode-regex": "^7.24.7",
- "@babel/template": "^7.25.0",
- "@react-native/babel-plugin-codegen": "0.76.3",
- "babel-plugin-syntax-hermes-parser": "^0.25.1",
- "babel-plugin-transform-flow-enums": "^0.0.2",
- "react-refresh": "^0.14.0"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@babel/core": "*"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.3.tgz",
- "integrity": "sha512-oJCH/jbYeGmFJql8/y76gqWCCd74pyug41yzYAjREso1Z7xL88JhDyKMvxEnfhSdMOZYVl479N80xFiXPy3ZYA==",
- "dependencies": {
- "@babel/parser": "^7.25.3",
- "glob": "^7.1.1",
- "hermes-parser": "0.23.1",
- "invariant": "^2.2.4",
- "jscodeshift": "^0.14.0",
- "mkdirp": "^0.5.1",
- "nullthrows": "^1.1.1",
- "yargs": "^17.6.2"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@babel/preset-env": "^7.1.6"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@react-native/normalize-colors": {
- "version": "0.76.9",
- "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz",
- "integrity": "sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw=="
- },
- "node_modules/@react-native/virtualized-lists": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.3.tgz",
- "integrity": "sha512-wTGv9pVh3vAOWb29xFm+J9VRe9dUcUcb9FyaMLT/Hxa88W4wqa5ZMe1V9UvrrBiA1G5DKjv8/1ZcDsJhyugVKA==",
- "dependencies": {
- "invariant": "^2.2.4",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@types/react": "^18.2.6",
- "react": "*",
- "react-native": "*"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@segment/loosely-validate-event": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz",
- "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==",
- "dependencies": {
- "component-type": "^1.2.1",
- "join-component": "^1.1.0"
- }
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="
- },
- "node_modules/@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
- "dependencies": {
- "@sinonjs/commons": "^3.0.0"
- }
- },
- "node_modules/@types/babel__core": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
- "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
- "dependencies": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "node_modules/@types/babel__generator": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
- "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
- "dependencies": {
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
- "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__traverse": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
- "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
- "dependencies": {
- "@babel/types": "^7.20.7"
- }
- },
- "node_modules/@types/graceful-fs": {
- "version": "4.1.9",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
- "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
- "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="
- },
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
- "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
- "dependencies": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
- "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
- "dependencies": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "node_modules/@types/node": {
- "version": "22.15.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz",
- "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@types/node-forge": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
- "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.14",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
- "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ=="
- },
- "node_modules/@types/react": {
- "version": "18.3.20",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz",
- "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==",
- "dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/react-native": {
- "version": "0.67.3",
- "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.67.3.tgz",
- "integrity": "sha512-hF4uOZFl2PPQtGWOtLoafrlCJeU815X3PgfVePM+7EhOIZhYXKH7+p3R3cZSnwVnrU5Ep/JfiHimMDliY3o8oQ==",
- "dependencies": {
- "@types/react": "*"
- }
- },
- "node_modules/@types/react-native-background-timer": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@types/react-native-background-timer/-/react-native-background-timer-2.0.2.tgz",
- "integrity": "sha512-cMAep0M5yqUHjiiRPvGiviqiJYdI45KSjbI5ufsIFSQGFwHwrHJC/8yawNhy0G3Gix6fufWLsEj6jC5niUNHiQ=="
- },
- "node_modules/@types/scheduler": {
- "version": "0.26.0",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.26.0.tgz",
- "integrity": "sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA=="
- },
- "node_modules/@types/stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="
- },
- "node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@types/yargs-parser": {
- "version": "21.0.3",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
- "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="
- },
- "node_modules/@urql/core": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.1.1.tgz",
- "integrity": "sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==",
- "dependencies": {
- "@0no-co/graphql.web": "^1.0.5",
- "wonka": "^6.3.2"
- }
- },
- "node_modules/@urql/exchange-retry": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.1.tgz",
- "integrity": "sha512-EEmtFu8JTuwsInqMakhLq+U3qN8ZMd5V3pX44q0EqD2imqTDsa8ikZqJ1schVrN8HljOdN+C08cwZ1/r5uIgLw==",
- "dependencies": {
- "@urql/core": "^5.1.1",
- "wonka": "^6.3.2"
- },
- "peerDependencies": {
- "@urql/core": "^5.0.0"
- }
- },
- "node_modules/@xmldom/xmldom": {
- "version": "0.7.13",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
- "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==",
- "deprecated": "this version is no longer supported, please update to at least 0.8.*",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
- "node_modules/abort-controller/node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/anser": {
- "version": "1.4.10",
- "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
- "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww=="
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
- },
- "node_modules/ast-types": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz",
- "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==",
- "dependencies": {
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/babel-core": {
- "version": "7.0.0-bridge.0",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
- "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/babel-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
- "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
- "dependencies": {
- "@jest/transform": "^29.7.0",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.6.3",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.8.0"
- }
- },
- "node_modules/babel-plugin-istanbul": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-jest-hoist": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
- "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
- "dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.13",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz",
- "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==",
- "dependencies": {
- "@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.6.4",
- "semver": "^6.3.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz",
- "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==",
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.3",
- "core-js-compat": "^3.40.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz",
- "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==",
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-react-native-web": {
- "version": "0.19.13",
- "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz",
- "integrity": "sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ=="
- },
- "node_modules/babel-plugin-syntax-hermes-parser": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz",
- "integrity": "sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==",
- "dependencies": {
- "hermes-parser": "0.25.1"
- }
- },
- "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-estree": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
- "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="
- },
- "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-parser": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
- "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
- "dependencies": {
- "hermes-estree": "0.25.1"
- }
- },
- "node_modules/babel-plugin-transform-flow-enums": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz",
- "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==",
- "dependencies": {
- "@babel/plugin-syntax-flow": "^7.12.1"
- }
- },
- "node_modules/babel-preset-current-node-syntax": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
- "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
- "dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-import-attributes": "^7.24.7",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/babel-preset-expo": {
- "version": "12.0.11",
- "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.11.tgz",
- "integrity": "sha512-4m6D92nKEieg+7DXa8uSvpr0GjfuRfM/G0t0I/Q5hF8HleEv5ms3z4dJ+p52qXSJsm760tMqLdO93Ywuoi7cCQ==",
- "dependencies": {
- "@babel/plugin-proposal-decorators": "^7.12.9",
- "@babel/plugin-transform-export-namespace-from": "^7.22.11",
- "@babel/plugin-transform-object-rest-spread": "^7.12.13",
- "@babel/plugin-transform-parameters": "^7.22.15",
- "@babel/preset-react": "^7.22.15",
- "@babel/preset-typescript": "^7.23.0",
- "@react-native/babel-preset": "0.76.9",
- "babel-plugin-react-native-web": "~0.19.13",
- "react-refresh": "^0.14.2"
- },
- "peerDependencies": {
- "babel-plugin-react-compiler": "^19.0.0-beta-9ee70a1-20241017",
- "react-compiler-runtime": "^19.0.0-beta-8a03594-20241020"
- },
- "peerDependenciesMeta": {
- "babel-plugin-react-compiler": {
- "optional": true
- },
- "react-compiler-runtime": {
- "optional": true
- }
- }
- },
- "node_modules/babel-preset-jest": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
- "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
- "dependencies": {
- "babel-plugin-jest-hoist": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/base-64": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
- "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/better-opn": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz",
- "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==",
- "dependencies": {
- "open": "^8.0.4"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/better-opn/node_modules/open": {
- "version": "8.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
- "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
- "dependencies": {
- "define-lazy-prop": "^2.0.0",
- "is-docker": "^2.1.1",
- "is-wsl": "^2.2.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/big-integer": {
- "version": "1.6.52",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
- "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
- },
- "node_modules/bplist-creator": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
- "integrity": "sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==",
- "dependencies": {
- "stream-buffers": "~2.2.0"
- }
- },
- "node_modules/bplist-parser": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz",
- "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==",
- "dependencies": {
- "big-integer": "1.6.x"
- },
- "engines": {
- "node": ">= 5.10.0"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
- "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001688",
- "electron-to-chromium": "^1.5.73",
- "node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.1"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dependencies": {
- "node-int64": "^0.4.0"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "dependencies": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "node_modules/buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
- },
- "node_modules/buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ=="
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/cacache": {
- "version": "18.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
- "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
- "dependencies": {
- "@npmcli/fs": "^3.1.0",
- "fs-minipass": "^3.0.0",
- "glob": "^10.2.2",
- "lru-cache": "^10.0.1",
- "minipass": "^7.0.3",
- "minipass-collect": "^2.0.1",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "p-map": "^4.0.0",
- "ssri": "^10.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^3.0.0"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
- "node_modules/cacache/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/caller-callsite": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
- "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==",
- "dependencies": {
- "callsites": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==",
- "dependencies": {
- "caller-callsite": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/callsites": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
- "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001715",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz",
- "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/charenc": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/chrome-launcher": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz",
- "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==",
- "dependencies": {
- "@types/node": "*",
- "escape-string-regexp": "^4.0.0",
- "is-wsl": "^2.2.0",
- "lighthouse-logger": "^1.0.0"
- },
- "bin": {
- "print-chrome-path": "bin/print-chrome-path.js"
- },
- "engines": {
- "node": ">=12.13.0"
- }
- },
- "node_modules/chromium-edge-launcher": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz",
- "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==",
- "dependencies": {
- "@types/node": "*",
- "escape-string-regexp": "^4.0.0",
- "is-wsl": "^2.2.0",
- "lighthouse-logger": "^1.0.0",
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- }
- },
- "node_modules/chromium-edge-launcher/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ci-info": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
- "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
- "dependencies": {
- "restore-cursor": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cli-spinners": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
- "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/cliui/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
- },
- "node_modules/component-type": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz",
- "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "dependencies": {
- "mime-db": ">= 1.43.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/compression": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz",
- "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==",
- "dependencies": {
- "bytes": "3.1.2",
- "compressible": "~2.0.18",
- "debug": "2.6.9",
- "negotiator": "~0.6.4",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.2.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/compression/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/compression/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/compression/node_modules/negotiator": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
- "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
- },
- "node_modules/connect": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
- "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
- "dependencies": {
- "debug": "2.6.9",
- "finalhandler": "1.1.2",
- "parseurl": "~1.3.3",
- "utils-merge": "1.0.1"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/connect/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/connect/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
- },
- "node_modules/core-js-compat": {
- "version": "3.41.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz",
- "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==",
- "dependencies": {
- "browserslist": "^4.24.4"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/cosmiconfig": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
- "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
- "dependencies": {
- "import-fresh": "^2.0.0",
- "is-directory": "^0.3.1",
- "js-yaml": "^3.13.1",
- "parse-json": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cross-fetch": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz",
- "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==",
- "dependencies": {
- "node-fetch": "^2.7.0"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/crypt": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
- },
- "node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/default-gateway": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
- "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
- "dependencies": {
- "execa": "^1.0.0",
- "ip-regex": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/defaults": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
- "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
- "dependencies": {
- "clone": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/define-lazy-prop": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
- "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/del": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
- "dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
- "bin": {
- "detect-libc": "bin/detect-libc.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dotenv": {
- "version": "16.4.7",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
- "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/dotenv-expand": {
- "version": "11.0.7",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz",
- "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==",
- "dependencies": {
- "dotenv": "^16.4.5"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.143",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.143.tgz",
- "integrity": "sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g=="
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/env-editor": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz",
- "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/error-stack-parser": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
- "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
- "dependencies": {
- "stackframe": "^1.3.4"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/event-target-shim": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz",
- "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==",
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/exec-async": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz",
- "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw=="
- },
- "node_modules/execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dependencies": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/execa/node_modules/cross-spawn": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
- "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
- "dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "engines": {
- "node": ">=4.8"
- }
- },
- "node_modules/execa/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/execa/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/execa/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/execa/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/execa/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
- },
- "node_modules/execa/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/expo": {
- "version": "52.0.46",
- "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.46.tgz",
- "integrity": "sha512-JG89IVZLp7DWzgeiQb+0N43kWOF1DUm3esBvAS9cPFWZsM9x8nDXgbvtREcycDPA6E+yJsSC+086CigeUY6sVA==",
- "dependencies": {
- "@babel/runtime": "^7.20.0",
- "@expo/cli": "0.22.26",
- "@expo/config": "~10.0.11",
- "@expo/config-plugins": "~9.0.17",
- "@expo/fingerprint": "0.11.11",
- "@expo/metro-config": "0.19.12",
- "@expo/vector-icons": "^14.0.0",
- "babel-preset-expo": "~12.0.11",
- "expo-asset": "~11.0.5",
- "expo-constants": "~17.0.8",
- "expo-file-system": "~18.0.12",
- "expo-font": "~13.0.4",
- "expo-keep-awake": "~14.0.3",
- "expo-modules-autolinking": "2.0.8",
- "expo-modules-core": "2.2.3",
- "fbemitter": "^3.0.0",
- "web-streams-polyfill": "^3.3.2",
- "whatwg-url-without-unicode": "8.0.0-3"
- },
- "bin": {
- "expo": "bin/cli",
- "expo-modules-autolinking": "bin/autolinking",
- "fingerprint": "bin/fingerprint"
- },
- "peerDependencies": {
- "@expo/dom-webview": "*",
- "@expo/metro-runtime": "*",
- "react": "*",
- "react-native": "*",
- "react-native-webview": "*"
- },
- "peerDependenciesMeta": {
- "@expo/dom-webview": {
- "optional": true
- },
- "@expo/metro-runtime": {
- "optional": true
- },
- "react-native-webview": {
- "optional": true
- }
- }
- },
- "node_modules/expo-asset": {
- "version": "11.0.5",
- "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.5.tgz",
- "integrity": "sha512-TL60LmMBGVzs3NQcO8ylWqBumMh4sx0lmeJsn7+9C88fylGDhyyVnKZ1PyTXo9CVDBkndutZx2JUEQWM9BaiXw==",
- "dependencies": {
- "@expo/image-utils": "^0.6.5",
- "expo-constants": "~17.0.8",
- "invariant": "^2.2.4",
- "md5-file": "^3.2.3"
- },
- "peerDependencies": {
- "expo": "*",
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo-build-properties": {
- "version": "0.13.2",
- "resolved": "https://registry.npmjs.org/expo-build-properties/-/expo-build-properties-0.13.2.tgz",
- "integrity": "sha512-ML2GwBgn0Bo4yPgnSGb7h3XVxCigS/KFdid3xPC2HldEioTP3UewB/2Qa4WBsam9Fb7lAuRyVHAfRoA3swpDzg==",
- "dependencies": {
- "ajv": "^8.11.0",
- "semver": "^7.6.0"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-build-properties/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/expo-constants": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.8.tgz",
- "integrity": "sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg==",
- "dependencies": {
- "@expo/config": "~10.0.11",
- "@expo/env": "~0.4.2"
- },
- "peerDependencies": {
- "expo": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo-dev-client": {
- "version": "5.0.20",
- "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-5.0.20.tgz",
- "integrity": "sha512-bLNkHdU7V3I4UefgJbJnIDUBUL0LxIal/xYEx9BbgDd3B7wgQKY//+BpPIxBOKCQ22lkyiHY8y9tLhO903sAgg==",
- "dependencies": {
- "expo-dev-launcher": "5.0.35",
- "expo-dev-menu": "6.0.25",
- "expo-dev-menu-interface": "1.9.3",
- "expo-manifests": "~0.15.8",
- "expo-updates-interface": "~1.0.0"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-dev-launcher": {
- "version": "5.0.35",
- "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-5.0.35.tgz",
- "integrity": "sha512-hEQr0ZREnUMxZ6wtQgfK1lzYnbb0zar3HqYZhmANzXmE6UEPbQ4GByLzhpfz/d+xxdBVQZsrHdtiV28KPG2sog==",
- "dependencies": {
- "ajv": "8.11.0",
- "expo-dev-menu": "6.0.25",
- "expo-manifests": "~0.15.8",
- "resolve-from": "^5.0.0"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-dev-launcher/node_modules/ajv": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
- "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/expo-dev-menu": {
- "version": "6.0.25",
- "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-6.0.25.tgz",
- "integrity": "sha512-K2m4z/I+CPWbMtHlDzU68lHaQs52De0v5gbsjAmA5ig8FrYh4MKZvPxSVANaiKENzgmtglu8qaFh7ua9Gt2TfA==",
- "dependencies": {
- "expo-dev-menu-interface": "1.9.3"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-dev-menu-interface": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/expo-dev-menu-interface/-/expo-dev-menu-interface-1.9.3.tgz",
- "integrity": "sha512-KY/dWTBE1l47i9V366JN5rC6YIdOc9hz8yAmZzkl5DrPia5l3M2WIjtnpHC9zUkNjiSiG2urYoOAq4H/uLdmyg==",
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-file-system": {
- "version": "18.0.12",
- "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.12.tgz",
- "integrity": "sha512-HAkrd/mb8r+G3lJ9MzmGeuW2B+BxQR1joKfeCyY4deLl1zoZ48FrAWjgZjHK9aHUVhJ0ehzInu/NQtikKytaeg==",
- "dependencies": {
- "web-streams-polyfill": "^3.3.2"
- },
- "peerDependencies": {
- "expo": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo-font": {
- "version": "13.0.4",
- "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.0.4.tgz",
- "integrity": "sha512-eAP5hyBgC8gafFtprsz0HMaB795qZfgJWqTmU0NfbSin1wUuVySFMEPMOrTkTgmazU73v4Cb4x7p86jY1XXYUw==",
- "dependencies": {
- "fontfaceobserver": "^2.1.0"
- },
- "peerDependencies": {
- "expo": "*",
- "react": "*"
- }
- },
- "node_modules/expo-json-utils": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.14.0.tgz",
- "integrity": "sha512-xjGfK9dL0B1wLnOqNkX0jM9p48Y0I5xEPzHude28LY67UmamUyAACkqhZGaPClyPNfdzczk7Ej6WaRMT3HfXvw=="
- },
- "node_modules/expo-keep-awake": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.0.3.tgz",
- "integrity": "sha512-6Jh94G6NvTZfuLnm2vwIpKe3GdOiVBuISl7FI8GqN0/9UOg9E0WXXp5cDcfAG8bn80RfgLJS8P7EPUGTZyOvhg==",
- "peerDependencies": {
- "expo": "*",
- "react": "*"
- }
- },
- "node_modules/expo-manifests": {
- "version": "0.15.8",
- "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-0.15.8.tgz",
- "integrity": "sha512-VuIyaMfRfLZeETNsRohqhy1l7iZ7I+HKMPfZXVL2Yn17TT0WkOhZoq1DzYwPbOHPgp1Uk6phNa86EyaHrD2DLw==",
- "dependencies": {
- "@expo/config": "~10.0.11",
- "expo-json-utils": "~0.14.0"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-modules-autolinking": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.0.8.tgz",
- "integrity": "sha512-DezgnEYFQYic8hKGhkbztBA3QUmSftjaNDIKNAtS2iGJmzCcNIkatjN2slFDSWjSTNo8gOvPQyMKfyHWFvLpOQ==",
- "dependencies": {
- "@expo/spawn-async": "^1.7.2",
- "chalk": "^4.1.0",
- "commander": "^7.2.0",
- "fast-glob": "^3.2.5",
- "find-up": "^5.0.0",
- "fs-extra": "^9.1.0",
- "require-from-string": "^2.0.2",
- "resolve-from": "^5.0.0"
- },
- "bin": {
- "expo-modules-autolinking": "bin/expo-modules-autolinking.js"
- }
- },
- "node_modules/expo-modules-autolinking/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/expo-modules-autolinking/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/expo-modules-autolinking/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/expo-modules-core": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.2.3.tgz",
- "integrity": "sha512-01QqZzpP/wWlxnNly4G06MsOBUTbMDj02DQigZoXfDh80vd/rk3/uVXqnZgOdLSggTs6DnvOgAUy0H2q30XdUg==",
- "dependencies": {
- "invariant": "^2.2.4"
- }
- },
- "node_modules/expo-splash-screen": {
- "version": "0.29.24",
- "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.29.24.tgz",
- "integrity": "sha512-k2rdjbb3Qeg4g104Sdz6+qXXYba8QgiuZRSxHX8IpsSYiiTU48BmCCGy12sN+O1B+sD1/+WPL4duCa1Fy6+Y4g==",
- "dependencies": {
- "@expo/prebuild-config": "~8.2.0"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-status-bar": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-2.0.1.tgz",
- "integrity": "sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg==",
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo-updates-interface": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-1.0.0.tgz",
- "integrity": "sha512-93oWtvULJOj+Pp+N/lpTcFfuREX1wNeHtp7Lwn8EbzYYmdn37MvZU3TPW2tYYCZuhzmKEXnUblYcruYoDu7IrQ==",
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/exponential-backoff": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz",
- "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA=="
- },
- "node_modules/fast-base64-decode": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz",
- "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q=="
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "node_modules/fast-uri": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
- "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fastify"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fastify"
- }
- ]
- },
- "node_modules/fastq": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
- "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fb-watchman": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
- "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
- "dependencies": {
- "bser": "2.1.1"
- }
- },
- "node_modules/fbemitter": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz",
- "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==",
- "dependencies": {
- "fbjs": "^3.0.0"
- }
- },
- "node_modules/fbjs": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz",
- "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==",
- "dependencies": {
- "cross-fetch": "^3.1.5",
- "fbjs-css-vars": "^1.0.0",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^1.0.35"
- }
- },
- "node_modules/fbjs-css-vars": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz",
- "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ=="
- },
- "node_modules/fetch-retry": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz",
- "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA=="
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "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"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/finalhandler/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/finalhandler/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flow-enums-runtime": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz",
- "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw=="
- },
- "node_modules/flow-parser": {
- "version": "0.268.0",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.268.0.tgz",
- "integrity": "sha512-URZmPy/jKDDIJUHUfC+5KNwaPcfONTL3R8xltQWVEoCKLWowVebEBg89nbAnYHNo6ev8KzKWFpOROfHZdaCoxA==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/fontfaceobserver": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz",
- "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg=="
- },
- "node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/form-data": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz",
- "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "mime-types": "^2.1.35"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/freeport-async": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz",
- "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/fs-minipass": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
- "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
- "dependencies": {
- "minipass": "^7.0.3"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/getenv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz",
- "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/hermes-estree": {
- "version": "0.23.1",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz",
- "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg=="
- },
- "node_modules/hermes-parser": {
- "version": "0.23.1",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz",
- "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==",
- "dependencies": {
- "hermes-estree": "0.23.1"
- }
- },
- "node_modules/hosted-git-info": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
- "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
- "dependencies": {
- "lru-cache": "^10.0.1"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
- "node_modules/hosted-git-info/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-errors/node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/image-size": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz",
- "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==",
- "dependencies": {
- "queue": "6.0.2"
- },
- "bin": {
- "image-size": "bin/image-size.js"
- },
- "engines": {
- "node": ">=16.x"
- }
- },
- "node_modules/import-fresh": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
- "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==",
- "dependencies": {
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/import-fresh/node_modules/resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "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.",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
- },
- "node_modules/internal-ip": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
- "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
- "dependencies": {
- "default-gateway": "^4.2.0",
- "ipaddr.js": "^1.9.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
- "dependencies": {
- "loose-envify": "^1.0.0"
- }
- },
- "node_modules/ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
- },
- "node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-directory": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
- "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
- "dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jest-environment-node": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
- "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-haste-map": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
- "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/graceful-fs": "^4.1.3",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- }
- },
- "node_modules/jest-message-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
- "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
- "dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.6.3",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-mock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
- "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-regex-util": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
- "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
- "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-util/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-validate/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-worker": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
- "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
- "dependencies": {
- "@types/node": "*",
- "jest-util": "^29.7.0",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/jimp-compact": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz",
- "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww=="
- },
- "node_modules/join-component": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz",
- "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ=="
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsc-android": {
- "version": "250231.0.0",
- "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz",
- "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw=="
- },
- "node_modules/jsc-safe-url": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz",
- "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q=="
- },
- "node_modules/jscodeshift": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz",
- "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==",
- "dependencies": {
- "@babel/core": "^7.13.16",
- "@babel/parser": "^7.13.16",
- "@babel/plugin-proposal-class-properties": "^7.13.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8",
- "@babel/plugin-proposal-optional-chaining": "^7.13.12",
- "@babel/plugin-transform-modules-commonjs": "^7.13.8",
- "@babel/preset-flow": "^7.13.13",
- "@babel/preset-typescript": "^7.13.0",
- "@babel/register": "^7.13.16",
- "babel-core": "^7.0.0-bridge.0",
- "chalk": "^4.1.2",
- "flow-parser": "0.*",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "neo-async": "^2.5.0",
- "node-dir": "^0.1.17",
- "recast": "^0.21.0",
- "temp": "^0.8.4",
- "write-file-atomic": "^2.3.0"
- },
- "bin": {
- "jscodeshift": "bin/jscodeshift.js"
- },
- "peerDependencies": {
- "@babel/preset-env": "^7.1.6"
- }
- },
- "node_modules/jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
- },
- "node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/lighthouse-logger": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz",
- "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==",
- "dependencies": {
- "debug": "^2.6.9",
- "marky": "^1.2.2"
- }
- },
- "node_modules/lighthouse-logger/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/lighthouse-logger/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/lightningcss": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.27.0.tgz",
- "integrity": "sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==",
- "dependencies": {
- "detect-libc": "^1.0.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "lightningcss-darwin-arm64": "1.27.0",
- "lightningcss-darwin-x64": "1.27.0",
- "lightningcss-freebsd-x64": "1.27.0",
- "lightningcss-linux-arm-gnueabihf": "1.27.0",
- "lightningcss-linux-arm64-gnu": "1.27.0",
- "lightningcss-linux-arm64-musl": "1.27.0",
- "lightningcss-linux-x64-gnu": "1.27.0",
- "lightningcss-linux-x64-musl": "1.27.0",
- "lightningcss-win32-arm64-msvc": "1.27.0",
- "lightningcss-win32-x64-msvc": "1.27.0"
- }
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz",
- "integrity": "sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-x64": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz",
- "integrity": "sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-freebsd-x64": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz",
- "integrity": "sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz",
- "integrity": "sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz",
- "integrity": "sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz",
- "integrity": "sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz",
- "integrity": "sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-musl": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz",
- "integrity": "sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz",
- "integrity": "sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz",
- "integrity": "sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
- },
- "node_modules/lodash.throttle": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
- "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="
- },
- "node_modules/log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dependencies": {
- "chalk": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/log-symbols/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/log-symbols/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
- },
- "node_modules/log-symbols/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/log-symbols/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/makeerror": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
- "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
- "dependencies": {
- "tmpl": "1.0.5"
- }
- },
- "node_modules/marky": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz",
- "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ=="
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/md5": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
- "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
- "dependencies": {
- "charenc": "0.0.2",
- "crypt": "0.0.2",
- "is-buffer": "~1.1.6"
- }
- },
- "node_modules/md5-file": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz",
- "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==",
- "dependencies": {
- "buffer-alloc": "^1.1.0"
- },
- "bin": {
- "md5-file": "cli.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/memoize-one": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
- "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
- },
- "node_modules/merge-options": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz",
- "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==",
- "dependencies": {
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/metro": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro/-/metro-0.81.4.tgz",
- "integrity": "sha512-78f0aBNPuwXW7GFnSc+Y0vZhbuQorXxdgqQfvSRqcSizqwg9cwF27I05h47tL8AzQcizS1JZncvq4xf5u/Qykw==",
- "dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/core": "^7.25.2",
- "@babel/generator": "^7.25.0",
- "@babel/parser": "^7.25.3",
- "@babel/template": "^7.25.0",
- "@babel/traverse": "^7.25.3",
- "@babel/types": "^7.25.2",
- "accepts": "^1.3.7",
- "chalk": "^4.0.0",
- "ci-info": "^2.0.0",
- "connect": "^3.6.5",
- "debug": "^2.2.0",
- "error-stack-parser": "^2.0.6",
- "flow-enums-runtime": "^0.0.6",
- "graceful-fs": "^4.2.4",
- "hermes-parser": "0.25.1",
- "image-size": "^1.0.2",
- "invariant": "^2.2.4",
- "jest-worker": "^29.7.0",
- "jsc-safe-url": "^0.2.2",
- "lodash.throttle": "^4.1.1",
- "metro-babel-transformer": "0.81.4",
- "metro-cache": "0.81.4",
- "metro-cache-key": "0.81.4",
- "metro-config": "0.81.4",
- "metro-core": "0.81.4",
- "metro-file-map": "0.81.4",
- "metro-resolver": "0.81.4",
- "metro-runtime": "0.81.4",
- "metro-source-map": "0.81.4",
- "metro-symbolicate": "0.81.4",
- "metro-transform-plugins": "0.81.4",
- "metro-transform-worker": "0.81.4",
- "mime-types": "^2.1.27",
- "nullthrows": "^1.1.1",
- "serialize-error": "^2.1.0",
- "source-map": "^0.5.6",
- "throat": "^5.0.0",
- "ws": "^7.5.10",
- "yargs": "^17.6.2"
- },
- "bin": {
- "metro": "src/cli.js"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-babel-transformer": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.81.4.tgz",
- "integrity": "sha512-WW0yswWrW+eTVK9sYD+b1HwWOiUlZlUoomiw9TIOk0C+dh2V90Wttn/8g62kYi0Y4i+cJfISerB2LbV4nuRGTA==",
- "dependencies": {
- "@babel/core": "^7.25.2",
- "flow-enums-runtime": "^0.0.6",
- "hermes-parser": "0.25.1",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-babel-transformer/node_modules/hermes-estree": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
- "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="
- },
- "node_modules/metro-babel-transformer/node_modules/hermes-parser": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
- "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
- "dependencies": {
- "hermes-estree": "0.25.1"
- }
- },
- "node_modules/metro-cache": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.81.4.tgz",
- "integrity": "sha512-sxCPH3gowDxazSaZZrwdNPEpnxR8UeXDnvPjBF9+5btDBNN2DpWvDAXPvrohkYkFImhc0LajS2V7eOXvu9PnvQ==",
- "dependencies": {
- "exponential-backoff": "^3.1.1",
- "flow-enums-runtime": "^0.0.6",
- "metro-core": "0.81.4"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-cache-key": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.81.4.tgz",
- "integrity": "sha512-3SaWQybvf1ivasjBegIxzVKLJzOpcz+KsnGwXFOYADQq0VN4cnM7tT+u2jkOhk6yJiiO1WIjl68hqyMOQJRRLg==",
- "dependencies": {
- "flow-enums-runtime": "^0.0.6"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-config": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.81.4.tgz",
- "integrity": "sha512-QnhMy3bRiuimCTy7oi5Ug60javrSa3lPh0gpMAspQZHY9h6y86jwHtZPLtlj8hdWQESIlrbeL8inMSF6qI/i9Q==",
- "dependencies": {
- "connect": "^3.6.5",
- "cosmiconfig": "^5.0.5",
- "flow-enums-runtime": "^0.0.6",
- "jest-validate": "^29.7.0",
- "metro": "0.81.4",
- "metro-cache": "0.81.4",
- "metro-core": "0.81.4",
- "metro-runtime": "0.81.4"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-core": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.81.4.tgz",
- "integrity": "sha512-GdL4IgmgJhrMA/rTy2lRqXKeXfC77Rg+uvhUEkbhyfj/oz7PrdSgvIFzziapjdHwk1XYq0KyFh/CcVm8ZawG6A==",
- "dependencies": {
- "flow-enums-runtime": "^0.0.6",
- "lodash.throttle": "^4.1.1",
- "metro-resolver": "0.81.4"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-file-map": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.81.4.tgz",
- "integrity": "sha512-qUIBzkiqOi3qEuscu4cJ83OYQ4hVzjON19FAySWqYys9GKCmxlKa7LkmwqdpBso6lQl+JXZ7nCacX90w5wQvPA==",
- "dependencies": {
- "debug": "^2.2.0",
- "fb-watchman": "^2.0.0",
- "flow-enums-runtime": "^0.0.6",
- "graceful-fs": "^4.2.4",
- "invariant": "^2.2.4",
- "jest-worker": "^29.7.0",
- "micromatch": "^4.0.4",
- "nullthrows": "^1.1.1",
- "walker": "^1.0.7"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-file-map/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/metro-file-map/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/metro-minify-terser": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.81.4.tgz",
- "integrity": "sha512-oVvq/AGvqmbhuijJDZZ9npeWzaVyeBwQKtdlnjcQ9fH7nR15RiBr5y2zTdgTEdynqOIb1Kc16l8CQIUSzOWVFA==",
- "dependencies": {
- "flow-enums-runtime": "^0.0.6",
- "terser": "^5.15.0"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-resolver": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.81.4.tgz",
- "integrity": "sha512-Ng7G2mXjSExMeRzj6GC19G6IJ0mfIbOLgjArsMWJgtt9ViZiluCwgWsMW9juBC5NSwjJxUMK2x6pC5NIMFLiHA==",
- "dependencies": {
- "flow-enums-runtime": "^0.0.6"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-runtime": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.81.4.tgz",
- "integrity": "sha512-fBoRgqkF69CwyPtBNxlDi5ha26Zc8f85n2THXYoh13Jn/Bkg8KIDCdKPp/A1BbSeNnkH/++H2EIIfnmaff4uRg==",
- "dependencies": {
- "@babel/runtime": "^7.25.0",
- "flow-enums-runtime": "^0.0.6"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-source-map": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.4.tgz",
- "integrity": "sha512-IOwVQ7mLqoqvsL70RZtl1EyE3f9jp43kVsAsb/B/zoWmu0/k4mwEhGLTxmjdXRkLJqPqPrh7WmFChAEf9trW4Q==",
- "dependencies": {
- "@babel/traverse": "^7.25.3",
- "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3",
- "@babel/types": "^7.25.2",
- "flow-enums-runtime": "^0.0.6",
- "invariant": "^2.2.4",
- "metro-symbolicate": "0.81.4",
- "nullthrows": "^1.1.1",
- "ob1": "0.81.4",
- "source-map": "^0.5.6",
- "vlq": "^1.0.0"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-symbolicate": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.4.tgz",
- "integrity": "sha512-rWxTmYVN6/BOSaMDUHT8HgCuRf6acd0AjHkenYlHpmgxg7dqdnAG1hLq999q2XpW5rX+cMamZD5W5Ez2LqGaag==",
- "dependencies": {
- "flow-enums-runtime": "^0.0.6",
- "invariant": "^2.2.4",
- "metro-source-map": "0.81.4",
- "nullthrows": "^1.1.1",
- "source-map": "^0.5.6",
- "vlq": "^1.0.0"
- },
- "bin": {
- "metro-symbolicate": "src/index.js"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-transform-plugins": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.81.4.tgz",
- "integrity": "sha512-nlP069nDXm4v28vbll4QLApAlvVtlB66rP6h+ml8Q/CCQCPBXu2JLaoxUmkIOJQjLhMRUcgTyQHq+TXWJhydOQ==",
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/generator": "^7.25.0",
- "@babel/template": "^7.25.0",
- "@babel/traverse": "^7.25.3",
- "flow-enums-runtime": "^0.0.6",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro-transform-worker": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.81.4.tgz",
- "integrity": "sha512-lKAeRZ8EUMtx2cA/Y4KvICr9bIr5SE03iK3lm+l9wyn2lkjLUuPjYVep159inLeDqC6AtSubsA8MZLziP7c03g==",
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/generator": "^7.25.0",
- "@babel/parser": "^7.25.3",
- "@babel/types": "^7.25.2",
- "flow-enums-runtime": "^0.0.6",
- "metro": "0.81.4",
- "metro-babel-transformer": "0.81.4",
- "metro-cache": "0.81.4",
- "metro-cache-key": "0.81.4",
- "metro-minify-terser": "0.81.4",
- "metro-source-map": "0.81.4",
- "metro-transform-plugins": "0.81.4",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/metro/node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
- },
- "node_modules/metro/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/metro/node_modules/hermes-estree": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
- "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="
- },
- "node_modules/metro/node_modules/hermes-parser": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
- "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
- "dependencies": {
- "hermes-estree": "0.25.1"
- }
- },
- "node_modules/metro/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/metro/node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "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
- }
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
- "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types/node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/minipass-collect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
- "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
- "dependencies": {
- "minipass": "^7.0.3"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-flush/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-flush/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-pipeline/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-pipeline/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minizlib/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minizlib/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
- },
- "node_modules/nested-error-stacks": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz",
- "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A=="
- },
- "node_modules/nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
- },
- "node_modules/node-dir": {
- "version": "0.1.17",
- "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
- "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==",
- "dependencies": {
- "minimatch": "^3.0.2"
- },
- "engines": {
- "node": ">= 0.10.5"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-forge": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
- "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
- "engines": {
- "node": ">= 6.13.0"
- }
- },
- "node_modules/node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="
- },
- "node_modules/node-releases": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
- "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm-package-arg": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz",
- "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==",
- "dependencies": {
- "hosted-git-info": "^7.0.0",
- "proc-log": "^4.0.0",
- "semver": "^7.3.5",
- "validate-npm-package-name": "^5.0.0"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
- "node_modules/npm-package-arg/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
- "dependencies": {
- "path-key": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/nullthrows": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz",
- "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw=="
- },
- "node_modules/ob1": {
- "version": "0.81.4",
- "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.81.4.tgz",
- "integrity": "sha512-EZLYM8hfPraC2SYOR5EWLFAPV5e6g+p83m2Jth9bzCpFxP1NDQJYXdmXRB2bfbaWQSmm6NkIQlbzk7uU5lLfgg==",
- "dependencies": {
- "flow-enums-runtime": "^0.0.6"
- },
- "engines": {
- "node": ">=18.18"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
- "dependencies": {
- "mimic-fn": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/open": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
- "dependencies": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ora": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
- "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
- "dependencies": {
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-spinners": "^2.0.0",
- "log-symbols": "^2.2.0",
- "strip-ansi": "^5.2.0",
- "wcwidth": "^1.0.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ora/node_modules/ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ora/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ora/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ora/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/ora/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
- },
- "node_modules/ora/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/ora/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ora/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ora/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
- },
- "node_modules/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
- "dependencies": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/parse-png": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz",
- "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==",
- "dependencies": {
- "pngjs": "^3.3.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
- },
- "node_modules/picomatch": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz",
- "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
- "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-dir/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/plist": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
- "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
- "dependencies": {
- "@xmldom/xmldom": "^0.8.8",
- "base64-js": "^1.5.1",
- "xmlbuilder": "^15.1.1"
- },
- "engines": {
- "node": ">=10.4.0"
- }
- },
- "node_modules/plist/node_modules/@xmldom/xmldom": {
- "version": "0.8.10",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
- "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/plist/node_modules/xmlbuilder": {
- "version": "15.1.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
- "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/pngjs": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
- "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.49",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
- "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/pretty-bytes": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
- "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/proc-log": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
- "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "dependencies": {
- "asap": "~2.0.3"
- }
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pump": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
- "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qrcode-terminal": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz",
- "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==",
- "bin": {
- "qrcode-terminal": "bin/qrcode-terminal.js"
- }
- },
- "node_modules/queue": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
- "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
- "dependencies": {
- "inherits": "~2.0.3"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-devtools-core": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.2.tgz",
- "integrity": "sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==",
- "dependencies": {
- "shell-quote": "^1.6.1",
- "ws": "^7"
- }
- },
- "node_modules/react-devtools-core/node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "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
- }
- }
- },
- "node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
- },
- "node_modules/react-native": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.3.tgz",
- "integrity": "sha512-0TUhgmlouRNf6yuDIIAdbQl0g1VsONgCMsLs7Et64hjj5VLMCA7np+4dMrZvGZ3wRNqzgeyT9oWJsUm49AcwSQ==",
- "dependencies": {
- "@jest/create-cache-key-function": "^29.6.3",
- "@react-native/assets-registry": "0.76.3",
- "@react-native/codegen": "0.76.3",
- "@react-native/community-cli-plugin": "0.76.3",
- "@react-native/gradle-plugin": "0.76.3",
- "@react-native/js-polyfills": "0.76.3",
- "@react-native/normalize-colors": "0.76.3",
- "@react-native/virtualized-lists": "0.76.3",
- "abort-controller": "^3.0.0",
- "anser": "^1.4.9",
- "ansi-regex": "^5.0.0",
- "babel-jest": "^29.7.0",
- "babel-plugin-syntax-hermes-parser": "^0.23.1",
- "base64-js": "^1.5.1",
- "chalk": "^4.0.0",
- "commander": "^12.0.0",
- "event-target-shim": "^5.0.1",
- "flow-enums-runtime": "^0.0.6",
- "glob": "^7.1.1",
- "invariant": "^2.2.4",
- "jest-environment-node": "^29.6.3",
- "jsc-android": "^250231.0.0",
- "memoize-one": "^5.0.0",
- "metro-runtime": "^0.81.0",
- "metro-source-map": "^0.81.0",
- "mkdirp": "^0.5.1",
- "nullthrows": "^1.1.1",
- "pretty-format": "^29.7.0",
- "promise": "^8.3.0",
- "react-devtools-core": "^5.3.1",
- "react-refresh": "^0.14.0",
- "regenerator-runtime": "^0.13.2",
- "scheduler": "0.24.0-canary-efb381bbf-20230505",
- "semver": "^7.1.3",
- "stacktrace-parser": "^0.1.10",
- "whatwg-fetch": "^3.0.0",
- "ws": "^6.2.3",
- "yargs": "^17.6.2"
- },
- "bin": {
- "react-native": "cli.js"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@types/react": "^18.2.6",
- "react": "^18.2.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-native-background-timer": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/react-native-background-timer/-/react-native-background-timer-2.4.1.tgz",
- "integrity": "sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g==",
- "peerDependencies": {
- "react-native": ">=0.47.0"
- }
- },
- "node_modules/react-native-dotenv": {
- "version": "3.4.11",
- "resolved": "https://registry.npmjs.org/react-native-dotenv/-/react-native-dotenv-3.4.11.tgz",
- "integrity": "sha512-6vnIE+WHABSeHCaYP6l3O1BOEhWxKH6nHAdV7n/wKn/sciZ64zPPp2NUdEUf1m7g4uuzlLbjgr+6uDt89q2DOg==",
- "dependencies": {
- "dotenv": "^16.4.5"
- },
- "peerDependencies": {
- "@babel/runtime": "^7.20.6"
- }
- },
- "node_modules/react-native-get-random-values": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz",
- "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==",
- "dependencies": {
- "fast-base64-decode": "^1.0.0"
- },
- "peerDependencies": {
- "react-native": ">=0.56"
- }
- },
- "node_modules/react-native-url-polyfill": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz",
- "integrity": "sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==",
- "dependencies": {
- "whatwg-url-without-unicode": "8.0.0-3"
- },
- "peerDependencies": {
- "react-native": "*"
- }
- },
- "node_modules/react-native/node_modules/@react-native/codegen": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.3.tgz",
- "integrity": "sha512-oJCH/jbYeGmFJql8/y76gqWCCd74pyug41yzYAjREso1Z7xL88JhDyKMvxEnfhSdMOZYVl479N80xFiXPy3ZYA==",
- "dependencies": {
- "@babel/parser": "^7.25.3",
- "glob": "^7.1.1",
- "hermes-parser": "0.23.1",
- "invariant": "^2.2.4",
- "jscodeshift": "^0.14.0",
- "mkdirp": "^0.5.1",
- "nullthrows": "^1.1.1",
- "yargs": "^17.6.2"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@babel/preset-env": "^7.1.6"
- }
- },
- "node_modules/react-native/node_modules/@react-native/normalize-colors": {
- "version": "0.76.3",
- "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.3.tgz",
- "integrity": "sha512-Yrpmrh4IDEupUUM/dqVxhAN8QW1VEUR3Qrk2lzJC1jB2s46hDe0hrMP2vs12YJqlzshteOthjwXQlY0TgIzgbg=="
- },
- "node_modules/react-native/node_modules/babel-plugin-syntax-hermes-parser": {
- "version": "0.23.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz",
- "integrity": "sha512-uNLD0tk2tLUjGFdmCk+u/3FEw2o+BAwW4g+z2QVlxJrzZYOOPADroEcNtTPt5lNiScctaUmnsTkVEnOwZUOLhA==",
- "dependencies": {
- "hermes-parser": "0.23.1"
- }
- },
- "node_modules/react-native/node_modules/commander": {
- "version": "12.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
- "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/react-native/node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/react-native/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/react-native/node_modules/promise": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
- "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
- "dependencies": {
- "asap": "~2.0.6"
- }
- },
- "node_modules/react-native/node_modules/regenerator-runtime": {
- "version": "0.13.11",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
- },
- "node_modules/react-native/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/react-native/node_modules/ws": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
- "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
- "dependencies": {
- "async-limiter": "~1.0.0"
- }
- },
- "node_modules/react-refresh": {
- "version": "0.14.2",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
- "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/readline": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz",
- "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg=="
- },
- "node_modules/recast": {
- "version": "0.21.5",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz",
- "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==",
- "dependencies": {
- "ast-types": "0.15.2",
- "esprima": "~4.0.0",
- "source-map": "~0.6.1",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/recast/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
- },
- "node_modules/regenerate-unicode-properties": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
- "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
- "dependencies": {
- "regenerate": "^1.4.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
- "node_modules/regenerator-transform": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
- "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
- "dependencies": {
- "@babel/runtime": "^7.8.4"
- }
- },
- "node_modules/regexpu-core": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
- "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
- "dependencies": {
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.2.0",
- "regjsgen": "^0.8.0",
- "regjsparser": "^0.12.0",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regjsgen": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
- "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="
- },
- "node_modules/regjsparser": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz",
- "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
- "dependencies": {
- "jsesc": "~3.0.2"
- },
- "bin": {
- "regjsparser": "bin/parser"
- }
- },
- "node_modules/regjsparser/node_modules/jsesc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
- "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/remove-trailing-slash": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz",
- "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA=="
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/requireg": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz",
- "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==",
- "dependencies": {
- "nested-error-stacks": "~2.0.1",
- "rc": "~1.2.7",
- "resolve": "~1.7.1"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/requireg/node_modules/resolve": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
- "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
- "dependencies": {
- "path-parse": "^1.0.5"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.10",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
- "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
- "dependencies": {
- "is-core-module": "^2.16.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-workspace-root": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz",
- "integrity": "sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw=="
- },
- "node_modules/resolve.exports": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
- "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
- "dependencies": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/restore-cursor/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/sax": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
- "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="
- },
- "node_modules/scheduler": {
- "version": "0.24.0-canary-efb381bbf-20230505",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz",
- "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- },
- "node_modules/selfsigned": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
- "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
- "dependencies": {
- "@types/node-forge": "^1.3.0",
- "node-forge": "^1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/send": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz",
- "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/send/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/send/node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/send/node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/send/node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/serialize-error": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz",
- "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/serve-static": {
- "version": "1.16.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
- "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
- "dependencies": {
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.19.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/serve-static/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/serve-static/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/serve-static/node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/serve-static/node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/serve-static/node_modules/send": {
- "version": "0.19.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
- "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/serve-static/node_modules/send/node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/serve-static/node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
- "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/simple-plist": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz",
- "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==",
- "dependencies": {
- "bplist-creator": "0.1.0",
- "bplist-parser": "0.3.1",
- "plist": "^3.0.5"
- }
- },
- "node_modules/simple-plist/node_modules/bplist-creator": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz",
- "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==",
- "dependencies": {
- "stream-buffers": "2.2.x"
- }
- },
- "node_modules/simple-plist/node_modules/bplist-parser": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz",
- "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==",
- "dependencies": {
- "big-integer": "1.6.x"
- },
- "engines": {
- "node": ">= 5.10.0"
- }
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/slugify": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
- "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/source-map-support/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/split": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
- "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
- "dependencies": {
- "through": "2"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
- },
- "node_modules/ssri": {
- "version": "10.0.6",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
- "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
- "dependencies": {
- "minipass": "^7.0.3"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/stack-utils": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/stackframe": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
- "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="
- },
- "node_modules/stacktrace-parser": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz",
- "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==",
- "dependencies": {
- "type-fest": "^0.7.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/stream-buffers": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
- "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==",
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/string-width-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/structured-headers": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz",
- "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg=="
- },
- "node_modules/sucrase": {
- "version": "3.35.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
- "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "glob": "^10.3.10",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/sucrase/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/sudo-prompt": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz",
- "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-hyperlinks": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
- "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
- "dependencies": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tar": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
- "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/tar/node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/tar/node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/tar/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/tar/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/temp": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz",
- "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==",
- "dependencies": {
- "rimraf": "~2.6.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/temp-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
- "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/temp/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/temp/node_modules/rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/tempy": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz",
- "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==",
- "dependencies": {
- "del": "^6.0.0",
- "is-stream": "^2.0.0",
- "temp-dir": "^2.0.0",
- "type-fest": "^0.16.0",
- "unique-string": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/tempy/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/tempy/node_modules/type-fest": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz",
- "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dependencies": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/terser": {
- "version": "5.39.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
- "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
- "dependencies": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/test-exclude/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dependencies": {
- "any-promise": "^1.0.0"
- }
- },
- "node_modules/thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/throat": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
- "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA=="
- },
- "node_modules/through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
- },
- "node_modules/tmpl": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
- "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw=="
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
- },
- "node_modules/ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
- "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ua-parser-js": {
- "version": "1.0.40",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz",
- "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/ua-parser-js"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/faisalman"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/faisalman"
- }
- ],
- "bin": {
- "ua-parser-js": "script/cli.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/undici": {
- "version": "6.21.2",
- "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz",
- "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==",
- "engines": {
- "node": ">=18.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
- },
- "node_modules/unicode-canonical-property-names-ecmascript": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
- "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "dependencies": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
- "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
- "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unique-filename": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
- "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
- "dependencies": {
- "unique-slug": "^4.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/unique-slug": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
- "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
- "dependencies": {
- "imurmurhash": "^0.1.4"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "dependencies": {
- "crypto-random-string": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
- "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/validate-npm-package-name": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
- "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/vlq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz",
- "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w=="
- },
- "node_modules/walker": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
- "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
- "dependencies": {
- "makeerror": "1.0.12"
- }
- },
- "node_modules/wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
- "dependencies": {
- "defaults": "^1.0.3"
- }
- },
- "node_modules/web-streams-polyfill": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
- "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
- },
- "node_modules/whatwg-fetch": {
- "version": "3.6.20",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
- "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/whatwg-url-without-unicode": {
- "version": "8.0.0-3",
- "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz",
- "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==",
- "dependencies": {
- "buffer": "^5.4.3",
- "punycode": "^2.1.1",
- "webidl-conversions": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wonka": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.5.tgz",
- "integrity": "sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw=="
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/wrap-ansi/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
- },
- "node_modules/write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "node_modules/write-file-atomic/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
- },
- "node_modules/ws": {
- "version": "8.18.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz",
- "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xcode": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz",
- "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==",
- "dependencies": {
- "simple-plist": "^1.1.0",
- "uuid": "^7.0.3"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/xcode/node_modules/uuid": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/xml2js": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz",
- "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==",
- "dependencies": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/xml2js/node_modules/xmlbuilder": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/xmlbuilder": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz",
- "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==",
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/examples/bot-ready-signalling/client/react-native/package.json b/examples/bot-ready-signalling/client/react-native/package.json
deleted file mode 100644
index 065245399..000000000
--- a/examples/bot-ready-signalling/client/react-native/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "bot-ready-rn",
- "version": "1.0.0",
- "scripts": {
- "start": "expo start --dev-client",
- "android": "expo run:android --device",
- "ios": "expo run:ios --device",
- "web": "expo start --web"
- },
- "dependencies": {
- "@config-plugins/react-native-webrtc": "^10.0.0",
- "@daily-co/config-plugin-rn-daily-js": "0.0.7",
- "@daily-co/react-native-daily-js": "^0.70.0",
- "@daily-co/react-native-webrtc": "^118.0.3-daily.2",
- "@react-native-async-storage/async-storage": "1.23.1",
- "expo": "^52.0.0",
- "expo-build-properties": "~0.13.1",
- "expo-dev-client": "~5.0.5",
- "expo-splash-screen": "~0.29.16",
- "expo-status-bar": "~2.0.0",
- "react": "18.3.1",
- "react-native": "0.76.3",
- "react-native-background-timer": "^2.4.1",
- "react-native-dotenv": "^3.4.11",
- "react-native-get-random-values": "^1.11.0"
- },
- "devDependencies": {
- "@babel/core": "^7.12.9"
- },
- "private": true
-}
diff --git a/examples/bot-ready-signalling/client/react-native/src/App.js b/examples/bot-ready-signalling/client/react-native/src/App.js
deleted file mode 100644
index 46b4c1e91..000000000
--- a/examples/bot-ready-signalling/client/react-native/src/App.js
+++ /dev/null
@@ -1,121 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import {SafeAreaView, View, Text, Button, StyleSheet, ScrollView} from 'react-native';
-import Daily from "@daily-co/react-native-daily-js";
-import { API_BASE_URL } from "@env";
-
-const CallScreen = () => {
- const [connectionStatus, setConnectionStatus] = useState('Disconnected');
- const [isConnected, setIsConnected] = useState(false);
- const [callObject, setCallObject] = useState(null);
- const [logs, setLogs] = useState([]);
-
- useEffect(() => {
- if (callObject) {
- setupTrackListeners(callObject);
- }
- }, [callObject]);
-
- const log = (message) => {
- setLogs((prevLogs) => [...prevLogs, `${new Date().toISOString()} - ${message}`]);
- console.log(message);
- };
-
- const setupTrackListeners = (callObject) => {
- callObject.on("joined-meeting", () => {
- setConnectionStatus('Connected');
- setIsConnected(true);
- log('Client connected');
- });
- callObject.on("left-meeting", () => {
- setConnectionStatus('Disconnected');
- setIsConnected(false);
- log('Client disconnected');
- });
- callObject.on("participant-left", () => {
- // When the bot leaves, we are also disconnecting from the call
- disconnect().catch((err) => {
- log(`Failed to disconnect ${err}`);
- })
- });
- // Trigger so the bot can start sending audio
- callObject.on("track-started", (evt) => {
- if (evt.track.kind === "audio" && evt.participant.local === false) {
- handleEventToConsole(evt)
- log("Sending the message that will trigger the bot to play the audio.")
- callObject.sendAppMessage("playable")
- }
- });
- callObject.on("error", (evt) => log(`Error: ${evt.error}`));
- // Other events just for awareness
- callObject.on("track-stopped", handleEventToConsole);
- callObject.on("participant-joined", handleEventToConsole);
- callObject.on("participant-updated", handleEventToConsole);
- };
-
- const handleEventToConsole = (evt) => {
- log(`Received event: ${evt.action}`);
- };
-
- const connect = async () => {
- try {
- const callObject = Daily.createCallObject({ subscribeToTracksAutomatically: true });
- setCallObject(callObject);
- const connectionUrl = `${API_BASE_URL}/connect`
- const res = await fetch(connectionUrl, { method: "POST", headers: { "Content-Type": "application/json" } });
- const roomInfo = await res.json();
- await callObject.join({ url: roomInfo.room_url });
- } catch (error) {
- log(`Error connecting: ${error.message}`);
- }
- };
-
- const disconnect = async () => {
- if (callObject) {
- try {
- await callObject.leave();
- await callObject.destroy();
- setCallObject(null);
- } catch (error) {
- log(`Error disconnecting: ${error.message}`);
- }
- }
- };
-
- return (
-
-
-
- Status: {connectionStatus}
-
-
-
-
-
-
- Debug Info
-
- {logs.map((logEntry, index) => (
- {logEntry}
- ))}
-
-
-
-
- );
-};
-
-const styles = StyleSheet.create({
- safeArea: { flex: 1, backgroundColor: '#f0f0f0', padding: 20 },
- container: { flex: 1, margin: 20 },
- statusBar: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', padding: 10, backgroundColor: '#fff', borderRadius: 8, marginBottom: 20 },
- status: { fontWeight: 'bold' },
- controls: { flexDirection: 'row', gap: 10 },
- debugPanel: { height: '80%', backgroundColor: '#fff', borderRadius: 8, padding: 20},
- debugTitle: { fontSize: 16, fontWeight: 'bold' },
- debugLog: { height: '100%', overflow: 'scroll', backgroundColor: '#f8f8f8', padding: 10, borderRadius: 4, fontFamily: 'monospace', fontSize: 12, lineHeight: 1.4 },
-});
-
-export default CallScreen;
diff --git a/examples/bot-ready-signalling/server/README.md b/examples/bot-ready-signalling/server/README.md
deleted file mode 100644
index 4c72adb44..000000000
--- a/examples/bot-ready-signalling/server/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Bot ready signaling Server
-
-A FastAPI server that manages bot instances and provide endpoint for Pipecat client connections.
-
-## Endpoints
-
-- `POST /connect` - Pipecat client connection endpoint
-
-## Environment Variables
-
-Copy `env.example` to `.env` and configure:
-
-```ini
-# Required API Keys
-DAILY_API_KEY= # Your Daily API key
-CARTESIA_API_KEY= # Your Cartesia API key
-
-# Optional Configuration
-DAILY_API_URL= # Optional: Daily API URL (defaults to https://api.daily.co/v1)
-DAILY_SAMPLE_ROOM_URL= # Optional: Fixed room URL for development
-HOST= # Optional: Host address (defaults to 0.0.0.0)
-FAST_API_PORT= # Optional: Port number (defaults to 7860)
-```
-
-## Running the Server
-
-Set up and activate your virtual environment:
-
-```bash
-python3 -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-```
-
-Install dependencies:
-
-```bash
-pip install -r requirements.txt
-```
-
-If you want to use the local version of `pipecat` in this repo rather than the last published version, also run:
-
-```bash
-pip install --editable "../../../[daily,cartesia,openai]"
-```
-
-Run the server:
-
-```bash
-python server.py
-```
diff --git a/examples/bot-ready-signalling/server/env.example b/examples/bot-ready-signalling/server/env.example
deleted file mode 100644
index 43f083495..000000000
--- a/examples/bot-ready-signalling/server/env.example
+++ /dev/null
@@ -1,3 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
-DAILY_API_KEY=
-CARTESIA_API_KEY=
\ No newline at end of file
diff --git a/examples/bot-ready-signalling/server/requirements.txt b/examples/bot-ready-signalling/server/requirements.txt
deleted file mode 100644
index 7b7cb164b..000000000
--- a/examples/bot-ready-signalling/server/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[daily,cartesia,openai]
diff --git a/examples/bot-ready-signalling/server/runner.py b/examples/bot-ready-signalling/server/runner.py
deleted file mode 100644
index 04157d549..000000000
--- a/examples/bot-ready-signalling/server/runner.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-from typing import Optional
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- (url, token, _) = await configure_with_args(aiohttp_session)
- return (url, token)
-
-
-async def configure_with_args(
- aiohttp_session: aiohttp.ClientSession, parser: Optional[argparse.ArgumentParser] = None
-):
- if not parser:
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token, args)
diff --git a/examples/bot-ready-signalling/server/server.py b/examples/bot-ready-signalling/server/server.py
deleted file mode 100644
index ca42aa0fc..000000000
--- a/examples/bot-ready-signalling/server/server.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-from typing import Any, Dict
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-# Load environment variables from .env file
-load_dotenv(override=True)
-
-# Dictionary to track bot processes: {pid: (process, room_url)}
-bot_procs = {}
-
-# Store Daily API helpers
-daily_helpers = {}
-
-
-def cleanup():
- """Cleanup function to terminate all bot processes.
-
- Called during server shutdown.
- """
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """FastAPI lifespan manager that handles startup and shutdown tasks.
-
- - Creates aiohttp session
- - Initializes Daily API helper
- - Cleans up resources on shutdown
- """
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-# Initialize FastAPI app with lifespan manager
-app = FastAPI(lifespan=lifespan)
-
-# Configure CORS to allow requests from any origin
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-async def create_room_and_token() -> tuple[str, str]:
- """Helper function to create a Daily room and generate an access token.
-
- Returns:
- tuple[str, str]: A tuple containing (room_url, token)
-
- Raises:
- HTTPException: If room creation or token generation fails
- """
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- if not room.url:
- raise HTTPException(status_code=500, detail="Failed to create room")
-
- token = await daily_helpers["rest"].get_token(room.url)
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- return room.url, token
-
-
-@app.post("/connect")
-async def bot_connect(request: Request) -> Dict[Any, Any]:
- """Connect endpoint that creates a room and returns connection credentials.
-
- This endpoint is called by client to establish a connection.
-
- Returns:
- Dict[Any, Any]: Authentication bundle containing room_url and token
-
- Raises:
- HTTPException: If room creation, token generation, or bot startup fails
- """
- print("Creating room for RTVI connection")
- room_url, token = await create_room_and_token()
- print(f"Room URL: {room_url}")
-
- # Start the bot process
- try:
- bot_file = "signalling_bot"
- proc = subprocess.Popen(
- [f"python3 -m {bot_file} -u {room_url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room_url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- # Return the authentication bundle in format expected by DailyTransport
- return {"room_url": room_url, "token": token}
-
-
-if __name__ == "__main__":
- import uvicorn
-
- # Parse command line arguments for server configuration
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Travel Companion FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- # Start the FastAPI server
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/bot-ready-signalling/server/signalling_bot.py b/examples/bot-ready-signalling/server/signalling_bot.py
deleted file mode 100644
index e86c60e7b..000000000
--- a/examples/bot-ready-signalling/server/signalling_bot.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-from dataclasses import dataclass
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from runner import configure
-
-from pipecat.frames.frames import AudioRawFrame, EndFrame, OutputAudioRawFrame, TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineTask
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-@dataclass
-class SilenceFrame(OutputAudioRawFrame):
- def __init__(
- self,
- *,
- sample_rate: int,
- duration: float,
- ):
- # Initialize the parent class with the silent frame's data
- super().__init__(
- audio=self.create_silent_audio_frame(sample_rate, 1, duration).audio,
- sample_rate=sample_rate,
- num_channels=1,
- )
-
- @staticmethod
- def create_silent_audio_frame(
- sample_rate: int, num_channels: int, duration: float
- ) -> AudioRawFrame:
- """Create an AudioRawFrame containing silence."""
- frame_size = num_channels * 2 # 2 bytes per sample for 16-bit audio
- total_frames = int(sample_rate * duration)
- total_bytes = total_frames * frame_size
- silent_audio = bytes(total_bytes) # Create a byte array filled with zeros
- return AudioRawFrame(audio=silent_audio, sample_rate=sample_rate, num_channels=num_channels)
-
-
-async def main():
- async with aiohttp.ClientSession() as session:
- (room_url, _) = await configure(session)
-
- transport = DailyTransport(
- room_url, None, "Say One Thing", DailyParams(audio_out_enabled=True)
- )
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- runner = PipelineRunner()
-
- task = PipelineTask(Pipeline([tts, transport.output()]))
-
- # Register an event handler so we can play the audio when we receive a specific message
- @transport.event_handler("on_app_message")
- async def on_app_message(transport, message, sender):
- logger.debug(f"Received app message: {message} - {sender}")
- if "playable" not in message:
- return
- await task.queue_frames(
- [
- SilenceFrame(
- sample_rate=task.params.audio_out_sample_rate,
- duration=0.5,
- ),
- TTSSpeakFrame(f"Hello there, how are you doing today ?"),
- EndFrame(),
- ]
- )
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/chatbot-audio-recording/.gitignore b/examples/chatbot-audio-recording/.gitignore
deleted file mode 100644
index 2bc1403d1..000000000
--- a/examples/chatbot-audio-recording/.gitignore
+++ /dev/null
@@ -1,161 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-runpod.toml
diff --git a/examples/chatbot-audio-recording/Dockerfile b/examples/chatbot-audio-recording/Dockerfile
deleted file mode 100644
index 419adca34..000000000
--- a/examples/chatbot-audio-recording/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM python:3.10-bullseye
-
-RUN mkdir /app
-RUN mkdir /app/assets
-RUN mkdir /app/utils
-COPY *.py /app/
-COPY requirements.txt /app/
-
-
-WORKDIR /app
-RUN pip3 install -r requirements.txt
-
-EXPOSE 7860
-
-CMD ["python3", "server.py"]
diff --git a/examples/chatbot-audio-recording/README.md b/examples/chatbot-audio-recording/README.md
deleted file mode 100644
index 23730e977..000000000
--- a/examples/chatbot-audio-recording/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Simple Chatbot
-
-
-
-This app connects you to a chatbot powered by GPT-4, complete with animations generated by Stable Video Diffusion.
-
-See a video of it in action: https://x.com/kwindla/status/1778628911817183509
-
-And a quick video walkthrough of the code: https://www.loom.com/share/13df1967161f4d24ade054e7f8753416
-
-โน๏ธ The first time, things might take extra time to get started since VAD (Voice Activity Detection) model needs to be downloaded.
-
-## Get started
-
-```python
-python3 -m venv venv
-source venv/bin/activate
-pip install -r requirements.txt
-
-cp env.example .env # and add your credentials
-
-```
-
-## Run the server
-
-```bash
-python server.py
-```
-
-Then, visit `http://localhost:7860/` in your browser to start a chatbot session.
-
-## Build and test the Docker image
-
-```
-docker build -t chatbot .
-docker run --env-file .env -p 7860:7860 chatbot
-```
diff --git a/examples/chatbot-audio-recording/bot.py b/examples/chatbot-audio-recording/bot.py
deleted file mode 100644
index a6c61cba8..000000000
--- a/examples/chatbot-audio-recording/bot.py
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import datetime
-import io
-import os
-import sys
-import wave
-
-import aiofiles
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from runner import configure
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.audio.audio_buffer_processor import AudioBufferProcessor
-from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-# Create the recordings directory if it doesn't exist
-os.makedirs("recordings", exist_ok=True)
-
-
-async def save_audio(audio: bytes, sample_rate: int, num_channels: int, name: str):
- if len(audio) > 0:
- filename = os.path.join(
- "recordings",
- f"{name}_conversation_recording{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.wav",
- )
- with io.BytesIO() as buffer:
- with wave.open(buffer, "wb") as wf:
- wf.setsampwidth(2)
- wf.setnchannels(num_channels)
- wf.setframerate(sample_rate)
- wf.writeframes(audio)
- async with aiofiles.open(filename, "wb") as file:
- await file.write(buffer.getvalue())
- print(f"Merged audio saved to {filename}")
- else:
- print("No audio data to save")
-
-
-async def main():
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_out_enabled=True,
- audio_in_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- #
- # Spanish
- #
- # transcription_settings=DailyTranscriptionSettings(
- # language="es",
- # tier="nova",
- # model="2-general"
- # )
- ),
- )
-
- tts = ElevenLabsTTSService(
- api_key=os.getenv("ELEVENLABS_API_KEY"),
- #
- # English
- #
- voice_id="cgSgspJ2msm6clMCkdW9",
- #
- # Spanish
- #
- # model="eleven_multilingual_v2",
- # voice_id="gD1IexrzCvsXPHUuT0s3",
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- messages = [
- {
- "role": "system",
- #
- # English
- #
- "content": "You are Chatbot, a friendly, helpful robot. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way, but keep your responses brief. Start by introducing yourself. Keep all your response to 12 words or fewer.",
- #
- # Spanish
- #
- # "content": "Eres Chatbot, un amigable y รบtil robot. Tu objetivo es demostrar tus capacidades de una manera breve. Tus respuestas se convertiran a audio asรญ que nunca no debes incluir caracteres especiales. Contesta a lo que el usuario pregunte de una manera creativa, รบtil y breve. Empieza por presentarte a ti mismo.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- # NOTE: Watch out! This will save all the conversation in memory. You
- # can pass `buffer_size` to get periodic callbacks.
- audiobuffer = AudioBufferProcessor(enable_turn_audio=True)
-
- pipeline = Pipeline(
- [
- transport.input(), # microphone
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- audiobuffer, # used to buffer the audio in the pipeline
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_in_sample_rate=16000,
- audio_out_sample_rate=16000,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @audiobuffer.event_handler("on_audio_data")
- async def on_audio_data(buffer, audio, sample_rate, num_channels):
- await save_audio(audio, sample_rate, num_channels, "full")
-
- @audiobuffer.event_handler("on_user_turn_audio_data")
- async def on_user_turn_audio_data(buffer, audio, sample_rate, num_channels):
- await save_audio(audio, sample_rate, num_channels, "user")
-
- @audiobuffer.event_handler("on_bot_turn_audio_data")
- async def on_bot_turn_audio_data(buffer, audio, sample_rate, num_channels):
- await save_audio(audio, sample_rate, num_channels, "bot")
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await audiobuffer.start_recording()
- await transport.capture_participant_transcription(participant["id"])
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- print(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/chatbot-audio-recording/env.example b/examples/chatbot-audio-recording/env.example
deleted file mode 100644
index d368ae510..000000000
--- a/examples/chatbot-audio-recording/env.example
+++ /dev/null
@@ -1,4 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
-DAILY_API_KEY=7df...
-OPENAI_API_KEY=sk-PL...
-ELEVENLABS_API_KEY=aeb...
\ No newline at end of file
diff --git a/examples/chatbot-audio-recording/requirements.txt b/examples/chatbot-audio-recording/requirements.txt
deleted file mode 100644
index 4cafe3680..000000000
--- a/examples/chatbot-audio-recording/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-aiofiles
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[daily,openai,silero,elevenlabs]
diff --git a/examples/chatbot-audio-recording/runner.py b/examples/chatbot-audio-recording/runner.py
deleted file mode 100644
index ad39a3ac4..000000000
--- a/examples/chatbot-audio-recording/runner.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/chatbot-audio-recording/server.py b/examples/chatbot-audio-recording/server.py
deleted file mode 100644
index a0f38854c..000000000
--- a/examples/chatbot-audio-recording/server.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-MAX_BOTS_PER_ROOM = 1
-
-# Bot sub-process dict for status reporting and concurrency control
-bot_procs = {}
-
-daily_helpers = {}
-
-load_dotenv(override=True)
-
-
-def cleanup():
- # Clean up function, just to be extra safe
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-app = FastAPI(lifespan=lifespan)
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.get("/")
-async def start_agent(request: Request):
- print(f"!!! Creating room")
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- print(f"!!! Room URL: {room.url}")
- # Ensure the room property is present
- if not room.url:
- raise HTTPException(
- status_code=500,
- detail="Missing 'room' property in request data. Cannot start agent without a target room!",
- )
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room.url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limited reach for room: {room.url}")
-
- # Get the token for the room
- token = await daily_helpers["rest"].get_token(room.url)
-
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- # Spawn a new agent, and join the user session
- # Note: this is mostly for demonstration purposes (refer to 'deployment' in README)
- try:
- proc = subprocess.Popen(
- [f"python3 -m bot -u {room.url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room.url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room.url)
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- if proc[0].poll() is None:
- status = "running"
- else:
- status = "finished"
-
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Storyteller FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/daily-custom-tracks/README.md b/examples/daily-custom-tracks/README.md
deleted file mode 100644
index dfd870373..000000000
--- a/examples/daily-custom-tracks/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Daily Custom Tracks
-
-This example shows how to send and receive Daily custom tracks. We will run a simple `daily-python` application to send an audio file with a custom track (named "pipecat") to a room. Then, the Pipecat bot will mirror that custom track into another custom track (named "pipecat-mirror") in the same room.
-
-## Get started
-
-```python
-python3 -m venv venv
-source venv/bin/activate
-pip install -r requirements.txt
-```
-
-## Run the bot
-
-Start the bot by giving it a Daily room URL.
-
-```bash
-python bot.py -u ROOM_URL
-```
-
-The bot will wait for the first participant to join. Then, it will mirror a custom track named "pipecat" into a new custom track named "pipecat-mirror".
-
-## Run the sender
-
-Now, run the custom track sender. This is a simple `daily-python` application that opens and audio file and sends it as a custom track to the same Daily room.
-
-```bash
-python custom_track_sender.py -u ROOM_URL -i office-ambience-mono-16000.mp3
-```
-
-## Open client
-
-Finally, open the client so you can hear both custom tracks.
-
-```bash
-open index.html
-```
-
-Once the client is opened, copy the URL of the Daily room and join it. You should be able to select which custom track you want to hear.
diff --git a/examples/daily-custom-tracks/bot.py b/examples/daily-custom-tracks/bot.py
deleted file mode 100644
index 1b0b3b64d..000000000
--- a/examples/daily-custom-tracks/bot.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import sys
-
-import aiohttp
-from loguru import logger
-from runner import configure
-
-from pipecat.frames.frames import Frame, InputAudioRawFrame, OutputAudioRawFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-class CustomTrackMirrorProcessor(FrameProcessor):
- def __init__(self, transport_destination: str, **kwargs):
- super().__init__(**kwargs)
- self._transport_destination = transport_destination
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, InputAudioRawFrame) and frame.transport_source:
- output_frame = OutputAudioRawFrame(
- audio=frame.audio,
- sample_rate=frame.sample_rate,
- num_channels=frame.num_channels,
- )
- output_frame.transport_destination = self._transport_destination
- await self.push_frame(output_frame)
- else:
- await self.push_frame(frame, direction)
-
-
-async def main():
- async with aiohttp.ClientSession() as session:
- (room_url, _) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- None,
- "Custom tracks mirror",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- microphone_out_enabled=False, # Disable since we just use custom tracks
- audio_out_destinations=["pipecat-mirror"],
- ),
- )
-
- pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- CustomTrackMirrorProcessor("pipecat-mirror"),
- transport.output(), # Transport bot output
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_in_sample_rate=16000,
- audio_out_sample_rate=16000,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_audio(participant["id"], audio_source="pipecat")
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/daily-custom-tracks/custom_track_sender.py b/examples/daily-custom-tracks/custom_track_sender.py
deleted file mode 100644
index 80c3cfbe6..000000000
--- a/examples/daily-custom-tracks/custom_track_sender.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import time
-
-from daily import CallClient, CustomAudioSource, Daily
-from pydub import AudioSegment
-
-parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
-parser.add_argument("-u", "--url", type=str, required=True, help="URL of the Daily room to join")
-parser.add_argument(
- "-i", "--input", type=str, required=True, help="Input audio file (needs 16000 sample rate)"
-)
-
-args, _ = parser.parse_known_args()
-
-audio = AudioSegment.from_mp3(args.input)
-
-raw_bytes = audio.raw_data
-sample_rate = audio.frame_rate
-channels = audio.channels
-
-print(f"Length: {len(raw_bytes)} bytes")
-print(f"Sample rate: {sample_rate}, Channels: {channels}")
-
-# Initialize the Daily context & create call client
-Daily.init()
-
-client = CallClient()
-
-# Join the room and indicate we have a custom track named "pipecat".
-client.join(
- args.url,
- client_settings={
- "publishing": {
- "camera": False,
- "microphone": False,
- "customAudio": {"pipecat": True},
- },
- },
-)
-
-# Just sleep for a couple of seconds. To do this well we should really use
-# completions.
-time.sleep(2)
-
-# Create the custom audio source. This is where we will write our audio.
-audio_source = CustomAudioSource(sample_rate, channels)
-
-# Create an audio track and assign it our audio source.
-client.add_custom_audio_track("pipecat", audio_source)
-
-# Just sleep for a second. To do this well we should really use completions.
-time.sleep(1)
-
-try:
- # Just write one second of audio until we have read all the file.
- chunk_size = sample_rate * channels * 2
- while len(raw_bytes) > 0:
- chunk = raw_bytes[:chunk_size]
- raw_bytes = raw_bytes[chunk_size:]
- audio_source.write_frames(chunk)
-
-except KeyboardInterrupt:
- client.leave()
-
-# Just sleep for a second. To do this well we should really use completions.
-time.sleep(1)
-
-client.release()
diff --git a/examples/daily-custom-tracks/index.html b/examples/daily-custom-tracks/index.html
deleted file mode 100644
index 4b3f693f6..000000000
--- a/examples/daily-custom-tracks/index.html
+++ /dev/null
@@ -1,173 +0,0 @@
-
-
- daily custom tracks
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/daily-custom-tracks/office-ambience-mono-16000.mp3 b/examples/daily-custom-tracks/office-ambience-mono-16000.mp3
deleted file mode 100644
index ea98082c7..000000000
Binary files a/examples/daily-custom-tracks/office-ambience-mono-16000.mp3 and /dev/null differ
diff --git a/examples/daily-custom-tracks/requirements.txt b/examples/daily-custom-tracks/requirements.txt
deleted file mode 100644
index b3d2deec3..000000000
--- a/examples/daily-custom-tracks/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-pydub
-pipecat-ai[daily]
diff --git a/examples/daily-custom-tracks/runner.py b/examples/daily-custom-tracks/runner.py
deleted file mode 100644
index ad39a3ac4..000000000
--- a/examples/daily-custom-tracks/runner.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/daily-multi-translation/Dockerfile b/examples/daily-multi-translation/Dockerfile
deleted file mode 100644
index 419adca34..000000000
--- a/examples/daily-multi-translation/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM python:3.10-bullseye
-
-RUN mkdir /app
-RUN mkdir /app/assets
-RUN mkdir /app/utils
-COPY *.py /app/
-COPY requirements.txt /app/
-
-
-WORKDIR /app
-RUN pip3 install -r requirements.txt
-
-EXPOSE 7860
-
-CMD ["python3", "server.py"]
diff --git a/examples/daily-multi-translation/README.md b/examples/daily-multi-translation/README.md
deleted file mode 100644
index 7e27cb217..000000000
--- a/examples/daily-multi-translation/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Daily Multi Translation
-
-This example shows how to use Daily to stream multiple simultaneous translations using a single transport. Daily provides custom tracks and in this example we will simultaneously translate incoming audio in English to Spanish, French and German, each of them being sent to a custom track.
-
-## Get started
-
-```python
-python3 -m venv venv
-source venv/bin/activate
-pip install -r requirements.txt
-
-cp env.example .env # and add your credentials
-
-```
-
-## Run the server
-
-```bash
-python server.py
-```
-
-Then, visit `http://localhost:7860/` in your browser. This will open a Daily Prebuilt room where you will speak in English (make sure you are not muted).
-
-## Open client
-
-Next, you need to open the client that will listen to the translations.
-
-```bash
-open index.html
-```
-
-Once the client is opened, copy the URL of the Daily room created above and join it. You should be able to select which translation you want to hear.
-
-## Build and test the Docker image
-
-```
-docker build -t daily-multi-translation .
-docker run --env-file .env -p 7860:7860 daily-multi-translation
-```
diff --git a/examples/daily-multi-translation/bot.py b/examples/daily-multi-translation/bot.py
deleted file mode 100644
index 67a11863a..000000000
--- a/examples/daily-multi-translation/bot.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from runner import configure
-
-from pipecat.audio.mixers.soundfile_mixer import SoundfileMixer
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.observers.loggers.transcription_log_observer import TranscriptionLogObserver
-from pipecat.pipeline.parallel_pipeline import ParallelPipeline
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-BACKGROUND_SOUND_FILE = "office-ambience-mono-16000.mp3"
-
-
-async def main():
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- token,
- "Multi translation bot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- audio_out_mixer={
- "spanish": SoundfileMixer(
- sound_files={"office": BACKGROUND_SOUND_FILE}, default_sound="office"
- ),
- "french": SoundfileMixer(
- sound_files={"office": BACKGROUND_SOUND_FILE}, default_sound="office"
- ),
- "german": SoundfileMixer(
- sound_files={"office": BACKGROUND_SOUND_FILE}, default_sound="office"
- ),
- },
- audio_out_destinations=["spanish", "french", "german"],
- microphone_out_enabled=False, # Disable since we just use custom tracks
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts_spanish = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="cefcb124-080b-4655-b31f-932f3ee743de",
- transport_destination="spanish",
- )
- tts_french = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="8832a0b5-47b2-4751-bb22-6a8e2149303d",
- transport_destination="french",
- )
- tts_german = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="38aabb6a-f52b-4fb0-a3d1-988518f4dc06",
- transport_destination="german",
- )
-
- messages_spanish = [
- {
- "role": "system",
- "content": "You will be provided with a sentence in English, and your task is to only translate it into Spanish.",
- },
- ]
- messages_french = [
- {
- "role": "system",
- "content": "You will be provided with a sentence in English, and your task is to only translate it into French.",
- },
- ]
- messages_german = [
- {
- "role": "system",
- "content": "You will be provided with a sentence in English, and your task is to only translate it into German.",
- },
- ]
-
- llm_spanish = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
- llm_french = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
- llm_german = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- context_spanish = OpenAILLMContext(messages_spanish)
- context_aggregator_spanish = llm_spanish.create_context_aggregator(context_spanish)
-
- context_french = OpenAILLMContext(messages_french)
- context_aggregator_french = llm_french.create_context_aggregator(context_french)
-
- context_german = OpenAILLMContext(messages_german)
- context_aggregator_german = llm_german.create_context_aggregator(context_german)
-
- pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- stt,
- ParallelPipeline(
- # Spanish pipeline.
- [
- context_aggregator_spanish.user(),
- llm_spanish,
- tts_spanish,
- context_aggregator_spanish.assistant(),
- ],
- # French pipeline.
- [
- context_aggregator_french.user(),
- llm_french,
- tts_french,
- context_aggregator_french.assistant(),
- ],
- # German pipeline.
- [
- context_aggregator_german.user(),
- llm_german,
- tts_german,
- context_aggregator_german.assistant(),
- ],
- ),
- transport.output(), # Transport bot output
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_in_sample_rate=16000,
- audio_out_sample_rate=16000,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[TranscriptionLogObserver()],
- )
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/daily-multi-translation/env.example b/examples/daily-multi-translation/env.example
deleted file mode 100644
index a780ec7d8..000000000
--- a/examples/daily-multi-translation/env.example
+++ /dev/null
@@ -1,5 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
-DAILY_API_KEY=7df...
-OPENAI_API_KEY=sk-PL...
-DEEPGRAM_API_KEY=efb...
-CARTESIA_API_KEY=aeb...
diff --git a/examples/daily-multi-translation/index.html b/examples/daily-multi-translation/index.html
deleted file mode 100644
index c8ca0832d..000000000
--- a/examples/daily-multi-translation/index.html
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
- daily multi translation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/daily-multi-translation/office-ambience-mono-16000.mp3 b/examples/daily-multi-translation/office-ambience-mono-16000.mp3
deleted file mode 100644
index ea98082c7..000000000
Binary files a/examples/daily-multi-translation/office-ambience-mono-16000.mp3 and /dev/null differ
diff --git a/examples/daily-multi-translation/requirements.txt b/examples/daily-multi-translation/requirements.txt
deleted file mode 100644
index f75f059d7..000000000
--- a/examples/daily-multi-translation/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-aiofiles
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[daily,deepgram,openai,silero,cartesia,soundfile]
diff --git a/examples/daily-multi-translation/runner.py b/examples/daily-multi-translation/runner.py
deleted file mode 100644
index ad39a3ac4..000000000
--- a/examples/daily-multi-translation/runner.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/daily-multi-translation/server.py b/examples/daily-multi-translation/server.py
deleted file mode 100644
index a0f38854c..000000000
--- a/examples/daily-multi-translation/server.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-MAX_BOTS_PER_ROOM = 1
-
-# Bot sub-process dict for status reporting and concurrency control
-bot_procs = {}
-
-daily_helpers = {}
-
-load_dotenv(override=True)
-
-
-def cleanup():
- # Clean up function, just to be extra safe
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-app = FastAPI(lifespan=lifespan)
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.get("/")
-async def start_agent(request: Request):
- print(f"!!! Creating room")
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- print(f"!!! Room URL: {room.url}")
- # Ensure the room property is present
- if not room.url:
- raise HTTPException(
- status_code=500,
- detail="Missing 'room' property in request data. Cannot start agent without a target room!",
- )
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room.url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limited reach for room: {room.url}")
-
- # Get the token for the room
- token = await daily_helpers["rest"].get_token(room.url)
-
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- # Spawn a new agent, and join the user session
- # Note: this is mostly for demonstration purposes (refer to 'deployment' in README)
- try:
- proc = subprocess.Popen(
- [f"python3 -m bot -u {room.url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room.url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room.url)
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- if proc[0].poll() is None:
- status = "running"
- else:
- status = "finished"
-
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Storyteller FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/deployment/flyio-example/Dockerfile b/examples/deployment/flyio-example/Dockerfile
deleted file mode 100644
index b2cc45701..000000000
--- a/examples/deployment/flyio-example/Dockerfile
+++ /dev/null
@@ -1,13 +0,0 @@
-FROM python:3.11-bullseye
-
-# Open port 7860 for http service
-ENV FAST_API_PORT=7860
-EXPOSE 7860
-
-# Install Python dependencies
-COPY *.py .
-COPY ./requirements.txt requirements.txt
-RUN pip3 install --no-cache-dir --upgrade -r requirements.txt
-
-# Start the FastAPI server
-CMD python3 bot_runner.py --port ${FAST_API_PORT}
\ No newline at end of file
diff --git a/examples/deployment/flyio-example/README.md b/examples/deployment/flyio-example/README.md
deleted file mode 100644
index 379e75b47..000000000
--- a/examples/deployment/flyio-example/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Fly.io deployment example
-
-This project modifies the `bot_runner.py` server to launch a new machine for each user session. This is a recommended approach for production vs. running shell processess as your deployment will quickly run out of system resources under load.
-
-For this example, we are using Daily as a WebRTC transport and provisioning a new room and token for each session. You can use another transport, such as WebSockets, by modifying the `bot.py` and `bot_runner.py` files accordingly.
-
-## Setting up your fly.io deployment
-
-### Create your fly.toml file
-
-You can copy the `example-fly.toml` as a reference. Be sure to change the app name to something unique.
-
-### Create your .env file
-
-Copy the base `env.example` to `.env` and enter the necessary API keys.
-
-`FLY_APP_NAME` should match that in the `fly.toml` file.
-
-### Launch a new fly.io project
-
-`fly launch` or `fly launch --org your-org-name`
-
-### Set the necessary app secrets from your .env
-
-Note: you can do this manually via the fly.io dashboard under the "secrets" sub-section of your deployment (e.g. "https://fly.io/apps/fly-app-name/secrets") or run the following terminal command:
-
-`cat .env | tr '\n' ' ' | xargs flyctl secrets set`
-
-### Deploy your machine
-
-`fly deploy`
-
-## Connecting to your bot
-
-Send a post request to your running fly.io instance:
-
-`curl --location --request POST 'https://YOUR_FLY_APP_NAME/'`
-
-This request will wait until the machine enters into a `starting` state, before returning the a room URL and token to join.
diff --git a/examples/deployment/flyio-example/__init__.py b/examples/deployment/flyio-example/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/examples/deployment/flyio-example/bot.py b/examples/deployment/flyio-example/bot.py
deleted file mode 100644
index 25b30f1b3..000000000
--- a/examples/deployment/flyio-example/bot.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import EndFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-daily_api_key = os.getenv("DAILY_API_KEY", "")
-daily_api_url = os.getenv("DAILY_API_URL", "https://api.daily.co/v1")
-
-
-async def main(room_url: str, token: str):
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- api_url=daily_api_url,
- api_key=daily_api_key,
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- ),
- )
-
- tts = ElevenLabsTTSService(
- api_key=os.getenv("ELEVENLABS_API_KEY", ""),
- voice_id=os.getenv("ELEVENLABS_VOICE_ID", ""),
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- messages = [
- {
- "role": "system",
- "content": "You are Chatbot, a friendly, helpful robot. Your output will be converted to audio so don't include special characters other than '!' or '?' in your answers. Respond to what the user said in a creative and helpful way, but keep your responses brief. Start by saying hello.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(),
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- await task.cancel()
-
- @transport.event_handler("on_call_state_updated")
- async def on_call_state_updated(transport, state):
- if state == "left":
- # Here we don't want to cancel, we just want to finish sending
- # whatever is queued, so we use an EndFrame().
- await task.queue_frame(EndFrame())
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="Pipecat Bot")
- parser.add_argument("-u", type=str, help="Room URL")
- parser.add_argument("-t", type=str, help="Token")
- config = parser.parse_args()
-
- asyncio.run(main(config.u, config.t))
diff --git a/examples/deployment/flyio-example/bot_runner.py b/examples/deployment/flyio-example/bot_runner.py
deleted file mode 100644
index 7763b31e0..000000000
--- a/examples/deployment/flyio-example/bot_runner.py
+++ /dev/null
@@ -1,209 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomObject,
- DailyRoomParams,
- DailyRoomProperties,
-)
-
-load_dotenv(override=True)
-
-
-# ------------ Configuration ------------ #
-
-MAX_SESSION_TIME = 5 * 60 # 5 minutes
-REQUIRED_ENV_VARS = [
- "DAILY_API_KEY",
- "OPENAI_API_KEY",
- "ELEVENLABS_API_KEY",
- "ELEVENLABS_VOICE_ID",
- "FLY_API_KEY",
- "FLY_APP_NAME",
-]
-
-FLY_API_HOST = os.getenv("FLY_API_HOST", "https://api.machines.dev/v1")
-FLY_APP_NAME = os.getenv("FLY_APP_NAME", "pipecat-fly-example")
-FLY_API_KEY = os.getenv("FLY_API_KEY", "")
-FLY_HEADERS = {"Authorization": f"Bearer {FLY_API_KEY}", "Content-Type": "application/json"}
-
-daily_helpers = {}
-
-
-# ----------------- API ----------------- #
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-# ----------------- Main ----------------- #
-
-
-async def spawn_fly_machine(room_url: str, token: str):
- async with aiohttp.ClientSession() as session:
- # Use the same image as the bot runner
- async with session.get(
- f"{FLY_API_HOST}/apps/{FLY_APP_NAME}/machines", headers=FLY_HEADERS
- ) as r:
- if r.status != 200:
- text = await r.text()
- raise Exception(f"Unable to get machine info from Fly: {text}")
-
- data = await r.json()
- image = data[0]["config"]["image"]
-
- # Machine configuration
- cmd = f"python3 bot.py -u {room_url} -t {token}"
- cmd = cmd.split()
- worker_props = {
- "config": {
- "image": image,
- "auto_destroy": True,
- "init": {"cmd": cmd},
- "restart": {"policy": "no"},
- "guest": {"cpu_kind": "shared", "cpus": 1, "memory_mb": 1024},
- },
- }
-
- # Spawn a new machine instance
- async with session.post(
- f"{FLY_API_HOST}/apps/{FLY_APP_NAME}/machines", headers=FLY_HEADERS, json=worker_props
- ) as r:
- if r.status != 200:
- text = await r.text()
- raise Exception(f"Problem starting a bot worker: {text}")
-
- data = await r.json()
- # Wait for the machine to enter the started state
- vm_id = data["id"]
-
- async with session.get(
- f"{FLY_API_HOST}/apps/{FLY_APP_NAME}/machines/{vm_id}/wait?state=started",
- headers=FLY_HEADERS,
- ) as r:
- if r.status != 200:
- text = await r.text()
- raise Exception(f"Bot was unable to enter started state: {text}")
-
- print(f"Machine joined room: {room_url}")
-
-
-@app.post("/")
-async def start_bot(request: Request) -> JSONResponse:
- try:
- data = await request.json()
- # Is this a webhook creation request?
- if "test" in data:
- return JSONResponse({"test": True})
- except Exception as e:
- pass
-
- # Use specified room URL, or create a new one if not specified
- room_url = os.getenv("DAILY_SAMPLE_ROOM_URL", "")
-
- if not room_url:
- params = DailyRoomParams(properties=DailyRoomProperties())
- try:
- room: DailyRoomObject = await daily_helpers["rest"].create_room(params=params)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Unable to provision room {e}")
- else:
- # Check passed room URL exists, we should assume that it already has a sip set up
- try:
- room: DailyRoomObject = await daily_helpers["rest"].get_room_from_url(room_url)
- except Exception:
- raise HTTPException(status_code=500, detail=f"Room not found: {room_url}")
-
- # Give the agent a token to join the session
- token = await daily_helpers["rest"].get_token(room.url, MAX_SESSION_TIME)
-
- if not room or not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room_url}")
-
- # Launch a new fly.io machine, or run as a shell process (not recommended)
- run_as_process = os.getenv("RUN_AS_PROCESS", False)
-
- if run_as_process:
- try:
- subprocess.Popen(
- [f"python3 -m bot -u {room.url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
- else:
- try:
- await spawn_fly_machine(room.url, token)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to spawn VM: {e}")
-
- # Grab a token for the user to join with
- user_token = await daily_helpers["rest"].get_token(room.url, MAX_SESSION_TIME)
-
- return JSONResponse(
- {
- "room_url": room.url,
- "token": user_token,
- }
- )
-
-
-if __name__ == "__main__":
- # Check environment variables
- for env_var in REQUIRED_ENV_VARS:
- if env_var not in os.environ:
- raise Exception(f"Missing environment variable: {env_var}.")
-
- parser = argparse.ArgumentParser(description="Pipecat Bot Runner")
- parser.add_argument(
- "--host", type=str, default=os.getenv("HOST", "0.0.0.0"), help="Host address"
- )
- parser.add_argument("--port", type=int, default=os.getenv("PORT", 7860), help="Port number")
- parser.add_argument(
- "--reload", action="store_true", default=False, help="Reload code on change"
- )
-
- config = parser.parse_args()
-
- try:
- import uvicorn
-
- uvicorn.run("bot_runner:app", host=config.host, port=config.port, reload=config.reload)
- except KeyboardInterrupt:
- print("Pipecat runner shutting down...")
diff --git a/examples/deployment/flyio-example/env.example b/examples/deployment/flyio-example/env.example
deleted file mode 100644
index b26b3811a..000000000
--- a/examples/deployment/flyio-example/env.example
+++ /dev/null
@@ -1,8 +0,0 @@
-DAILY_API_KEY=
-DAILY_SAMPLE_ROOM_URL= # Enter a Daily room URL to use a set room URL each time (useful for local testing)
-OPENAI_API_KEY=
-ELEVENLABS_API_KEY=
-ELEVENLABS_VOICE_ID=
-FLY_API_KEY=
-FLY_APP_NAME=
-RUN_AS_PROCESS= # Spawn fly.io machine for each session or run as local process
\ No newline at end of file
diff --git a/examples/deployment/flyio-example/example-fly.toml b/examples/deployment/flyio-example/example-fly.toml
deleted file mode 100644
index aee3a3083..000000000
--- a/examples/deployment/flyio-example/example-fly.toml
+++ /dev/null
@@ -1,25 +0,0 @@
-# fly.toml app configuration file generated for pipecat-fly-example on 2024-07-01T15:04:53+01:00
-#
-# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
-#
-
-app = 'pipecat-fly-example'
-primary_region = 'sjc'
-
-[build]
-
-[env]
- FLY_APP_NAME = 'pipecat-fly-example'
-
-[http_service]
- internal_port = 7860
- force_https = true
- auto_stop_machines = true
- auto_start_machines = true
- min_machines_running = 0
- processes = ['app']
-
-[[vm]]
- memory = 512
- cpu_kind = 'shared'
- cpus = 1
diff --git a/examples/deployment/flyio-example/requirements.txt b/examples/deployment/flyio-example/requirements.txt
deleted file mode 100644
index 78a1398f3..000000000
--- a/examples/deployment/flyio-example/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-pipecat-ai[daily,openai,silero]
-fastapi
-uvicorn
-python-dotenv
-loguru
diff --git a/examples/deployment/modal-example/.gitignore b/examples/deployment/modal-example/.gitignore
deleted file mode 100644
index b74c7cace..000000000
--- a/examples/deployment/modal-example/.gitignore
+++ /dev/null
@@ -1,94 +0,0 @@
-# Modal clone
-modal-examples
-
-# Python
-__pycache__/
-*.py[cod]
-*$py.class
-*.so
-.Python
-build/
-dist/
-*.egg-info/
-*.egg
-.installed.cfg
-.eggs/
-downloads/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-MANIFEST
-
-# Virtual Environments
-venv/
-env/
-.env
-.venv/
-ENV/
-env.bak/
-venv.bak/
-
-# IDE
-.idea/
-.vscode/
-.spyderproject
-.spyproject
-.ropeproject
-
-# Testing and Coverage
-.coverage
-.coverage.*
-htmlcov/
-.pytest_cache/
-.tox/
-.nox/
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-.hypothesis/
-cover/
-
-# Logs and Databases
-*.log
-*.db
-db.sqlite3
-db.sqlite3-journal
-pip-log.txt
-
-# System Files
-.DS_Store
-Thumbs.db
-desktop.ini
-*.swp
-*.swo
-*.bak
-*.tmp
-*~
-
-# Build and Documentation
-docs/_build/
-.pybuilder/
-target/
-instance/
-.webassets-cache
-.pdm.toml
-.pdm-python
-.pdm-build/
-__pypackages__/
-
-# Other
-*.mo
-*.pot
-*.sage.py
-.mypy_cache/
-.dmypy.json
-dmypy.json
-.pyre/
-.pytype/
-cython_debug/
-.ipynb_checkpoints
\ No newline at end of file
diff --git a/examples/deployment/modal-example/README.md b/examples/deployment/modal-example/README.md
deleted file mode 100644
index cd23935c2..000000000
--- a/examples/deployment/modal-example/README.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Deploying Pipecat to Modal.com
-
-Deployment example for [modal.com](https://www.modal.com). This example demonstrates how to deploy a FastAPI webapp to Modal with an RTVI compatible `/connect` endpoint that launches a Pipecat pipeline in a separate Modal container and returns a room/token for the client to join. This example also supports providing a parameter to the `/connect` endpoint for specifying which Pipecat pipeline to launch; openai, gemini, or vllm. The vllm pipeline points to a self-hosted OpenAI compatible LLM, using a llama model (neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w4a16), deployed to Modal.
-
-
-
-# Running this Example
-
-## Install the Modal CLI
-
-Setup a Modal account and install it on your machine if you have not already, following their easy 3 steps in their [Getting Started Guide](https://modal.com/docs/guide#getting-started)
-
-## Deploy a self-serve LLM
-
-1. Deploy Modal's OpenAI-compatible LLM service:
-
- ```bash
- git clone https://github.com/modal-labs/modal-examples
- cd modal-examples
- modal deploy 06_gpu_and_ml/llm-serving/vllm_inference.py
- ```
-
- Refer to Modal's guide and example for [Deploying an OpenAI-compatible LLM service with vLLM](https://modal.com/docs/examples/vllm_inference) for more details.
-
-2. Take note of the endpoint URL from the previous step, which will look like:
- ```
- https://{your-workspace}--example-vllm-openai-compatible-serve.modal.run
- ```
- You'll need this for the `bot_vllm.py` file in the next section.
-
- **Note:** The default Modal LLM example uses Llama-3.1 and will shut down after 15 minutes of inactivity. Cold starts take 5-10 minutes. To prepare the service, we recommend visiting the `/docs` endpoint (`https://--example-vllm-openai-compatible-serve.modal.run/docs`) for your deployed LLM and wait for it to fully load before connecting your client.
-
-## Deploy FastAPI App and Pipecat pipeline to Modal
-
-1. Setup environment variables
-
- ```bash
- cd server
- cp env.example .env
- # Modify .env to provide your service API Keys
- ```
-
- Alternatively, you can configure your Modal app to use [secrets](https://modal.com/docs/guide/secrets)
-
-2. Update the `modal_url` in `server/src/bot_vllm.py` to point to the url produced from the self-serve llm deploy, mentioned above.
-
-3. From within the `server` directory, test the app locally:
-
- ```bash
- modal serve app.py
- ```
-
-4. Deploy to production
-
- ```bash
- modal deploy app.py
- ```
-
-5. Note the endpoint URL produced from this deployment. It will look like:
-
- ```bash
- https://{your-workspace}--pipecat-modal-fastapi-app.modal.run
- ```
-
- You'll need this URL for the client's `app.js` configuration mentioned in its README.
-
-## Launch your bots on Modal
-
-### Option 1: Direct Link
-
-Simply click on the url displayed after running the server or deploy step to launch an agent and be redirected to a Daily room to talk with the launched bot. This will use the OpenAI pipeline.
-
-### Option 2: Connect via an RTVI Client
-
-Follow the instructions provided in the [client folder's README](client/javascript/README.md) for building and running a custom client that connects to your Modal endpoint. The provided client provides a dropdown for choosing which bot pipeline to run.
-
-# Navigating your llm, server, and Pipecat logs
-
-In your [Modal dashboard](https://modal.com/apps), you should have two Apps listed under Live Apps:
-
-1. `example-vllm-openai-compatible`: This App contains the containers and logs used to run your self-hosted LLM. There will be just one App Function listed: `serve`. Click on this function to view logs for your LLM.
-2. `pipecat-modal`: This App contains the containers and logs used to run your `connect` endpoints and Pipecat pipelines. It will list two App Functions:
- 1. `fastapi_app`: This function is running the endpoints that your client will interact with and initiate starting a new pipeline (`/`, `/connect`, `/status`). Click on this function to see logs for each endpoint hit.
- 2. `bot_runner`: This function handles launching and running a bot pipeline. Click on this function to get a list of all pipeline runs and access each run's logs.
-
-# Modal + Pipecat Tips
-
-- In most other Pipecat examples, we use `Popen` to launch the pipeline process from the `/connect` endpoint. In this example, we use a Modal function instead. This allows us to run the pipelines using a separately defined Modal image as well as run each pipeline in an isolated container.
-- For the FastAPI and most common Pipecat Pipeline containers, a default `debian_slim` CPU-only should be all that's required to run. GPU containers are needed for self-hosted services.
-- To minimize cold starts of the pipeline and reduce latency for users, set `min_containers=1` on the Modal Function that launches the pipeline to ensure at least one warm instance of your function is always available.
-- For next steps on running a self-hosted llm and reducing latency, check out all of [Modal's LLM examples](https://modal.com/docs/examples/vllm_inference).
diff --git a/examples/deployment/modal-example/client/javascript/.gitignore b/examples/deployment/modal-example/client/javascript/.gitignore
deleted file mode 100644
index b512c09d4..000000000
--- a/examples/deployment/modal-example/client/javascript/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
\ No newline at end of file
diff --git a/examples/deployment/modal-example/client/javascript/README.md b/examples/deployment/modal-example/client/javascript/README.md
deleted file mode 100644
index f1cf6a678..000000000
--- a/examples/deployment/modal-example/client/javascript/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# JavaScript Implementation
-
-Basic implementation using the [Pipecat JavaScript SDK](https://docs.pipecat.ai/client/js/introduction).
-
-## Setup
-
-1. Deploy the Modal server. See the main [README](../../README).
-
-2. Navigate to the `client/javascript` directory:
-
-```bash
-cd client/javascript
-```
-
-3. Modify the baseUrl in src/app.js to point to your deployed Modal endpoint
-
-4. Install dependencies:
-
-```bash
-npm install
-```
-
-5. Run the client app:
-
-```
-npm run dev
-```
-
-6. Visit http://localhost:5173 in your browser.
diff --git a/examples/deployment/modal-example/client/javascript/index.html b/examples/deployment/modal-example/client/javascript/index.html
deleted file mode 100644
index eb9c96dc1..000000000
--- a/examples/deployment/modal-example/client/javascript/index.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
- AI Chatbot
-
-
-
-
-
-
- Status: Disconnected
-
-
-
- OpenAI
- Gemini
- Llama
-
- Connect
- Disconnect
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/deployment/modal-example/client/javascript/package-lock.json b/examples/deployment/modal-example/client/javascript/package-lock.json
deleted file mode 100644
index 335851006..000000000
--- a/examples/deployment/modal-example/client/javascript/package-lock.json
+++ /dev/null
@@ -1,1282 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0"
- },
- "devDependencies": {
- "vite": "^6.3.5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.77.0.tgz",
- "integrity": "sha512-icNXKieKAkRR/C5dcPjrCkL1jQGFp5C5WtLHy5uHAdTztm+mo9wlPJuehbWaGOM3TV24mgWHZ/+8jOys1G0I4w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
- "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
- "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
- "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
- "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
- "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
- "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
- "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
- "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
- "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
- "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
- "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
- "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
- "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
- "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
- "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
- "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
- "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
- "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
- "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
- "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
- "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
- "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
- "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
- "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/daily-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/daily-transport/-/daily-transport-1.0.0.tgz",
- "integrity": "sha512-iXmv9Et/TGPvJoeOY+ZBPv+a3pbqT502jco2MBHl8l2VrtztkidjDwiOkPfPdD191CCwaSbV5laSYALsD0AyxA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.77.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz",
- "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz",
- "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz",
- "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz",
- "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz",
- "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz",
- "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz",
- "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz",
- "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz",
- "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz",
- "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz",
- "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz",
- "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz",
- "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz",
- "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz",
- "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
- "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz",
- "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz",
- "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz",
- "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz",
- "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
- "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.6",
- "@esbuild/android-arm": "0.25.6",
- "@esbuild/android-arm64": "0.25.6",
- "@esbuild/android-x64": "0.25.6",
- "@esbuild/darwin-arm64": "0.25.6",
- "@esbuild/darwin-x64": "0.25.6",
- "@esbuild/freebsd-arm64": "0.25.6",
- "@esbuild/freebsd-x64": "0.25.6",
- "@esbuild/linux-arm": "0.25.6",
- "@esbuild/linux-arm64": "0.25.6",
- "@esbuild/linux-ia32": "0.25.6",
- "@esbuild/linux-loong64": "0.25.6",
- "@esbuild/linux-mips64el": "0.25.6",
- "@esbuild/linux-ppc64": "0.25.6",
- "@esbuild/linux-riscv64": "0.25.6",
- "@esbuild/linux-s390x": "0.25.6",
- "@esbuild/linux-x64": "0.25.6",
- "@esbuild/netbsd-arm64": "0.25.6",
- "@esbuild/netbsd-x64": "0.25.6",
- "@esbuild/openbsd-arm64": "0.25.6",
- "@esbuild/openbsd-x64": "0.25.6",
- "@esbuild/openharmony-arm64": "0.25.6",
- "@esbuild/sunos-x64": "0.25.6",
- "@esbuild/win32-arm64": "0.25.6",
- "@esbuild/win32-ia32": "0.25.6",
- "@esbuild/win32-x64": "0.25.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/rollup": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz",
- "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.44.2",
- "@rollup/rollup-android-arm64": "4.44.2",
- "@rollup/rollup-darwin-arm64": "4.44.2",
- "@rollup/rollup-darwin-x64": "4.44.2",
- "@rollup/rollup-freebsd-arm64": "4.44.2",
- "@rollup/rollup-freebsd-x64": "4.44.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.44.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.44.2",
- "@rollup/rollup-linux-arm64-gnu": "4.44.2",
- "@rollup/rollup-linux-arm64-musl": "4.44.2",
- "@rollup/rollup-linux-loongarch64-gnu": "4.44.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-musl": "4.44.2",
- "@rollup/rollup-linux-s390x-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-musl": "4.44.2",
- "@rollup/rollup-win32-arm64-msvc": "4.44.2",
- "@rollup/rollup-win32-ia32-msvc": "4.44.2",
- "@rollup/rollup-win32-x64-msvc": "4.44.2",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/examples/deployment/modal-example/client/javascript/package.json b/examples/deployment/modal-example/client/javascript/package.json
deleted file mode 100644
index e3050697a..000000000
--- a/examples/deployment/modal-example/client/javascript/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "vite": "^6.3.5"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0"
- }
-}
diff --git a/examples/deployment/modal-example/client/javascript/src/app.js b/examples/deployment/modal-example/client/javascript/src/app.js
deleted file mode 100644
index 40289dcad..000000000
--- a/examples/deployment/modal-example/client/javascript/src/app.js
+++ /dev/null
@@ -1,376 +0,0 @@
-/**
- * Copyright (c) 2024โ2025, Daily
- *
- * SPDX-License-Identifier: BSD 2-Clause License
- */
-
-/**
- * Pipecat Client Implementation
- *
- * This client connects to an RTVI-compatible bot server using WebRTC (via Daily).
- * It handles audio/video streaming and manages the connection lifecycle.
- *
- * Requirements:
- * - A running RTVI bot server (defaults to http://localhost:7860)
- * - The server must implement the /connect endpoint that returns Daily.co room credentials
- * - Browser with WebRTC support
- */
-
-import { PipecatClient, RTVIEvent } from '@pipecat-ai/client-js';
-import { DailyTransport } from '@pipecat-ai/daily-transport';
-
-/**
- * ChatbotClient handles the connection and media management for a real-time
- * voice and video interaction with an AI bot.
- */
-class ChatbotClient {
- constructor() {
- // Initialize client state
- this.pcClient = null;
- this.setupDOMElements();
- this.initializeClientAndTransport();
- this.setupEventListeners();
- }
-
- /**
- * Set up references to DOM elements and create necessary media elements
- */
- setupDOMElements() {
- // Get references to UI control elements
- this.connectBtn = document.getElementById('connect-btn');
- this.disconnectBtn = document.getElementById('disconnect-btn');
- this.statusSpan = document.getElementById('connection-status');
- this.debugLog = document.getElementById('debug-log');
- this.botVideoContainer = document.getElementById('bot-video-container');
- this.deviceSelector = document.getElementById('device-selector');
-
- // Create an audio element for bot's voice output
- this.botAudio = document.createElement('audio');
- this.botAudio.autoplay = true;
- this.botAudio.playsInline = true;
- document.body.appendChild(this.botAudio);
- }
-
- /**
- * Set up event listeners for connect/disconnect buttons
- */
- setupEventListeners() {
- this.connectBtn.addEventListener('click', () => this.connect());
- this.disconnectBtn.addEventListener('click', () => this.disconnect());
-
- // Populate device selector
- this.pcClient.getAllMics().then((mics) => {
- console.log('Available mics:', mics);
- mics.forEach((device) => {
- const option = document.createElement('option');
- option.value = device.deviceId;
- option.textContent = device.label || `Microphone ${device.deviceId}`;
- this.deviceSelector.appendChild(option);
- });
- });
- this.deviceSelector.addEventListener('change', (event) => {
- const selectedDeviceId = event.target.value;
- console.log('Selected device ID:', selectedDeviceId);
- this.pcClient.updateMic(selectedDeviceId);
- });
-
- // Handle mic mute/unmute toggle
- const micToggleBtn = document.getElementById('mic-toggle-btn');
-
- micToggleBtn.addEventListener('click', () => {
- let micEnabled = this.pcClient.isMicEnabled;
- micToggleBtn.textContent = micEnabled ? 'Unmute Mic' : 'Mute Mic';
- this.pcClient.enableMic(!micEnabled);
- // Add logic to mute/unmute the mic
- if (micEnabled) {
- console.log('Mic muted');
- // Add code to mute the mic
- } else {
- console.log('Mic unmuted');
- // Add code to unmute the mic
- }
- });
- }
-
- /**
- * Set up the Pipecat client and Daily transport
- */
- async initializeClientAndTransport() {
- // Initialize the Pipecat client with a DailyTransport and our configuration
- this.pcClient = new PipecatClient({
- transport: new DailyTransport(),
- enableMic: true, // Enable microphone for user input
- enableCam: false,
- callbacks: {
- // Handle connection state changes
- onConnected: () => {
- this.updateStatus('Connected');
- this.connectBtn.disabled = true;
- this.disconnectBtn.disabled = false;
- this.log('Client connected');
- },
- onDisconnected: () => {
- this.updateStatus('Disconnected');
- this.connectBtn.disabled = false;
- this.disconnectBtn.disabled = true;
- this.log('Client disconnected');
- },
- // Handle transport state changes
- onTransportStateChanged: (state) => {
- this.updateStatus(`Transport: ${state}`);
- this.log(`Transport state changed: ${state}`);
- if (state === 'connecting') {
- window.startTime = Date.now();
- }
- if (state === 'ready') {
- this.setupMediaTracks();
- console.warn('TIME TO BOT READY:', Date.now() - window.startTime);
- }
- },
- // Handle bot connection events
- onBotConnected: (participant) => {
- this.log(`Bot connected: ${JSON.stringify(participant)}`);
- },
- onBotDisconnected: (participant) => {
- this.log(`Bot disconnected: ${JSON.stringify(participant)}`);
- },
- onBotReady: (data) => {
- this.log(`Bot ready: ${JSON.stringify(data)}`);
- this.setupMediaTracks();
- },
- // Transcript events
- onUserTranscript: (data) => {
- // Only log final transcripts
- if (data.final) {
- this.log(`User: ${data.text}`);
- }
- },
- onBotTranscript: (data) => {
- this.log(`Bot: ${data.text}`);
- },
- // Error handling
- onMessageError: (error) => {
- console.log('Message error:', error);
- },
- onMicUpdated: (data) => {
- console.log('Mic updated:', data);
- this.deviceSelector.value = data.deviceId;
- },
- onError: (error) => {
- console.log('Error:', JSON.stringify(error));
- },
- },
- });
-
- // Set up listeners for media track events
- this.setupTrackListeners();
-
- await this.pcClient.initDevices();
- window.client = this.pcClient;
- }
-
- /**
- * Add a timestamped message to the debug log
- */
- log(message) {
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
-
- // Add styling based on message type
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3'; // blue for user
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50'; // green for bot
- }
-
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- console.log(message);
- }
-
- /**
- * Update the connection status display
- */
- updateStatus(status) {
- this.statusSpan.textContent = status;
- this.log(`Status: ${status}`);
- }
-
- /**
- * Check for available media tracks and set them up if present
- * This is called when the bot is ready or when the transport state changes to ready
- */
- setupMediaTracks() {
- if (!this.pcClient) return;
-
- // Get current tracks from the client
- const tracks = this.pcClient.tracks();
-
- // Set up any available bot tracks
- if (tracks.bot?.audio) {
- this.setupAudioTrack(tracks.bot.audio);
- }
- if (tracks.bot?.video) {
- this.setupVideoTrack(tracks.bot.video);
- }
- }
-
- /**
- * Set up listeners for track events (start/stop)
- * This handles new tracks being added during the session
- */
- setupTrackListeners() {
- if (!this.pcClient) return;
-
- // Listen for new tracks starting
- this.pcClient.on(RTVIEvent.TrackStarted, (track, participant) => {
- // Only handle non-local (bot) tracks
- if (!participant?.local) {
- if (track.kind === 'audio') {
- this.setupAudioTrack(track);
- } else if (track.kind === 'video') {
- this.setupVideoTrack(track);
- }
- this.log(
- `Track started event: ${track.kind} from ${
- participant?.name || 'unknown'
- }`
- );
- } else {
- this.log('Local mic unmuted');
- }
- });
-
- // Listen for tracks stopping
- this.pcClient.on(RTVIEvent.TrackStopped, (track, participant) => {
- if (participant.local) {
- this.log('Local mic muted');
- return;
- }
- this.log(
- `Track stopped event: ${track.kind} from ${
- participant?.name || 'unknown'
- }`
- );
- });
- }
-
- /**
- * Set up an audio track for playback
- * Handles both initial setup and track updates
- */
- setupAudioTrack(track) {
- this.log('Setting up audio track');
- // Check if we're already playing this track
- if (this.botAudio.srcObject) {
- const oldTrack = this.botAudio.srcObject.getAudioTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
- // Create a new MediaStream with the track and set it as the audio source
- this.botAudio.srcObject = new MediaStream([track]);
- }
-
- /**
- * Set up a video track for display
- * Handles both initial setup and track updates
- */
- setupVideoTrack(track) {
- this.log('Setting up video track');
- const videoEl = document.createElement('video');
- videoEl.autoplay = true;
- videoEl.playsInline = true;
- videoEl.muted = true;
- videoEl.style.width = '100%';
- videoEl.style.height = '100%';
- videoEl.style.objectFit = 'cover';
-
- // Check if we're already displaying this track
- if (this.botVideoContainer.querySelector('video')?.srcObject) {
- const oldTrack = this.botVideoContainer
- .querySelector('video')
- .srcObject.getVideoTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
-
- // Create a new MediaStream with the track and set it as the video source
- videoEl.srcObject = new MediaStream([track]);
- this.botVideoContainer.innerHTML = '';
- this.botVideoContainer.appendChild(videoEl);
- }
-
- /**
- * Initialize and connect to the bot
- * This sets up the Pipecat client, initializes devices, and establishes the connection
- */
- async connect() {
- try {
- const botSelector = document.getElementById('bot-selector');
- const selectedBot = botSelector.value;
-
- // Initialize audio/video devices
- this.log('Initializing devices...');
- await this.pcClient.initDevices();
-
- // Connect to the bot
- this.log(`Connecting to bot: ${selectedBot}`);
- await this.pcClient.connect({
- // REPLACE WITH YOUR MODAL URL ENDPOINT
- endpoint:
- 'https://--pipecat-modal-fastapi-app.modal.run/connect',
- requestData: {
- bot_name: selectedBot,
- },
- });
-
- this.log('Connection complete');
- } catch (error) {
- // Handle any errors during connection
- console.error('Connection error:', error);
- this.log(`Error connecting: ${JSON.stringify(error.message)}`);
- this.log(`Error stack: ${error.stack}`);
- this.updateStatus('Error');
-
- // Clean up if there's an error
- if (this.pcClient) {
- try {
- await this.pcClient.disconnect();
- } catch (disconnectError) {
- this.log(`Error during disconnect: ${disconnectError.message}`);
- }
- }
- }
- }
-
- /**
- * Disconnect from the bot and clean up media resources
- */
- async disconnect() {
- if (this.pcClient) {
- try {
- // Disconnect the Pipecat client
- await this.pcClient.disconnect();
-
- // Clean up audio
- if (this.botAudio.srcObject) {
- this.botAudio.srcObject.getTracks().forEach((track) => track.stop());
- this.botAudio.srcObject = null;
- }
-
- // Clean up video
- if (this.botVideoContainer.querySelector('video')?.srcObject) {
- const video = this.botVideoContainer.querySelector('video');
- video.srcObject.getTracks().forEach((track) => track.stop());
- video.srcObject = null;
- }
- this.botVideoContainer.innerHTML = '';
- } catch (error) {
- this.log(`Error disconnecting: ${error.message}`);
- }
- }
- }
-}
-
-// Initialize the client when the page loads
-window.addEventListener('DOMContentLoaded', () => {
- new ChatbotClient();
-});
diff --git a/examples/deployment/modal-example/client/javascript/src/style.css b/examples/deployment/modal-example/client/javascript/src/style.css
deleted file mode 100644
index 359dfa1a9..000000000
--- a/examples/deployment/modal-example/client/javascript/src/style.css
+++ /dev/null
@@ -1,135 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar,
-.device-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls,
-.device-controls {
- display: flex;
- align-items: center;
- gap: 10px; /* Adds spacing between elements */
-}
-
-.device-controls {
- margin-left: auto;
-}
-
-.controls button,
-.device-controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#bot-selector,
-#device-selector {
- padding: 8px 16px;
- padding-right: 40px;
- border: none;
- border-radius: 4px;
- background-color: #6c757d; /* Gray background */
- color: white; /* White text */
- cursor: pointer;
- appearance: none; /* Removes default browser styling for dropdowns */
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E"); /* Custom arrow */
- background-repeat: no-repeat;
- background-position: right 8px center; /* Position the arrow */
-}
-
-#bot-selector:focus,
-#device-selector:focus {
- outline: none;
- box-shadow: 0 0 4px rgba(0, 0, 0, 0.3); /* Add a subtle focus effect */
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-#mic-toggle-btn {
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#bot-video-container {
- width: 640px;
- height: 360px;
- background-color: #e0e0e0;
- border-radius: 8px;
- margin: 20px auto;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-#bot-video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 200px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/deployment/modal-example/diagram.jpg b/examples/deployment/modal-example/diagram.jpg
deleted file mode 100644
index d65a4e994..000000000
Binary files a/examples/deployment/modal-example/diagram.jpg and /dev/null differ
diff --git a/examples/deployment/modal-example/server/__init__.py b/examples/deployment/modal-example/server/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/examples/deployment/modal-example/server/app.py b/examples/deployment/modal-example/server/app.py
deleted file mode 100644
index 99f2ec44f..000000000
--- a/examples/deployment/modal-example/server/app.py
+++ /dev/null
@@ -1,307 +0,0 @@
-"""modal_example.
-
-This module shows a simple example of how to deploy a bot using Modal and FastAPI.
-
-It includes:
-- FastAPI endpoints for starting agents and checking bot statuses.
-- Dynamic loading of bot implementations.
-- Use of a Daily transport for bot communication.
-"""
-
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import importlib
-import os
-from contextlib import asynccontextmanager
-from typing import Any, Dict, Literal
-
-import aiohttp
-import modal
-from fastapi import APIRouter, FastAPI, HTTPException
-from fastapi.responses import JSONResponse, RedirectResponse
-from pydantic import BaseModel
-
-# container specifications for the FastAPI web server
-web_image = (
- modal.Image.debian_slim(python_version="3.13")
- .pip_install_from_requirements("requirements.txt")
- .pip_install("pipecat-ai[daily]")
- .add_local_dir("src", remote_path="/root/src")
-)
-
-# container specifications for the Pipecat pipeline
-bot_image = (
- modal.Image.debian_slim(python_version="3.13")
- .apt_install("ffmpeg")
- .pip_install_from_requirements("requirements.txt")
- .pip_install("pipecat-ai[daily,elevenlabs,openai,silero,google]")
- .add_local_dir("src", remote_path="/root/src")
-)
-
-app = modal.App("pipecat-modal", secrets=[modal.Secret.from_dotenv()])
-
-router = APIRouter()
-
-bot_jobs = {}
-daily_helpers = {}
-
-# Names of all supported bot implementations
-# These correspond to the bot files in the src directory
-BotName = Literal["openai", "gemini", "vllm"]
-
-
-def cleanup():
- """Cleanup function to terminate all bot processes.
-
- Called during server shutdown.
- """
- for entry in bot_jobs.values():
- func = modal.FunctionCall.from_id(entry[0])
- if func:
- func.cancel()
-
-
-def get_bot_file(bot_name: BotName) -> str:
- """Retrieve the bot file name corresponding to the provided bot_name.
-
- Args:
- bot_name (BotName): The name of the bot (e.g., 'openai', 'gemini', 'vllm').
-
- Returns:
- str: The file name corresponding to the bot implementation.
-
- Raises:
- ValueError: If the bot name is invalid or not supported.
- """
- # bot_implementation = os.getenv("BOT_IMPLEMENTATION", "openai").lower().strip()
- bot_implementation = bot_name.lower().strip()
- if not bot_implementation:
- bot_implementation = "openai"
- if bot_implementation not in ["openai", "gemini", "vllm"]:
- raise ValueError(
- f"Invalid BOT_IMPLEMENTATION: {bot_implementation}. Must be 'openai' or 'gemini' or 'vllm'"
- )
-
- return f"bot_{bot_implementation}"
-
-
-def get_runner(path: str, bot_file: str) -> callable:
- """Dynamically import the run_bot function based on the bot name.
-
- Args:
- path (str): The path to the bot files (e.g., 'src').
- bot_file (str): The file name of the bot implementation (e.g., 'openai', 'gemini', 'vllm').
-
- Returns:
- function: The run_bot function from the specified bot module.
-
- Raises:
- ImportError: If the specified bot module or run_bot function is not found.
- """
- try:
- # Dynamically construct the module name
- module_name = f"{path}.{bot_file}"
- # Import the module
- module = importlib.import_module(module_name)
- # Get the run_bot function from the module
- return getattr(module, "run_bot")
- except (ImportError, AttributeError) as e:
- raise ImportError(f"Failed to import run_bot from {module_name}: {e}")
-
-
-async def create_room_and_token() -> tuple[str, str]:
- """Create a Daily room and generate an authentication token.
-
- This function checks for existing room URL and token in the environment variables.
- If not found, it creates a new room using the Daily API and generates a token for it.
-
- Returns:
- tuple[str, str]: A tuple containing the room URL and the authentication token.
-
- Raises:
- HTTPException: If room creation or token generation fails.
- """
- from pipecat.transports.services.helpers.daily_rest import DailyRoomParams
-
- room_url = os.getenv("DAILY_SAMPLE_ROOM_URL", None)
- token = os.getenv("DAILY_SAMPLE_ROOM_TOKEN", None)
- if not room_url:
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- if not room.url:
- raise HTTPException(status_code=500, detail="Failed to create room")
- room_url = room.url
-
- token = await daily_helpers["rest"].get_token(room_url)
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room_url}")
-
- return room_url, token
-
-
-@app.function(image=bot_image, min_containers=1)
-async def bot_runner(room_url, token, bot_name: BotName = "openai"):
- """Launch the provided bot process, providing the given room URL and token for the bot to join.
-
- Args:
- room_url (str): The URL of the Daily room where the bot and client will communicate.
- token (str): The authentication token for the room.
- bot_name (BotName): The name of the bot implementation to use. Defaults to "openai".
-
- Raises:
- HTTPException: If the bot pipeline fails to start.
- """
- try:
- path = "src"
- bot_file = get_bot_file(bot_name)
- run_bot = get_runner(path, bot_file)
-
- print(f"Starting bot process: {bot_file} -u {room_url} -t {token}")
- await run_bot(room_url, token)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start bot pipeline: {e}")
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """FastAPI lifespan manager that handles startup and shutdown tasks.
-
- - Creates aiohttp session
- - Initializes Daily API helper
- - Cleans up resources on shutdown
- """
- from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-class ConnectData(BaseModel):
- """Data provided by client to specify the bot pipeline.
-
- Attributes:
- bot_name (BotName): The name of the bot to connect to. Defaults to "openai".
- """
-
- bot_name: BotName = "openai"
-
-
-async def start(data: ConnectData):
- """Internal method to start a bot agent and return the room URL and token.
-
- Args:
- data (ConnectData): The data containing the bot name to use.
-
- Returns:
- tuple[str, str]: A tuple containing the room URL and token.
- """
- room_url, token = await create_room_and_token()
- launch_bot_func = modal.Function.from_name("pipecat-modal", "bot_runner")
- function_id = launch_bot_func.spawn(room_url, token, data.bot_name)
- bot_jobs[function_id] = (function_id, room_url)
-
- return room_url, token
-
-
-@router.get("/")
-async def start_agent():
- """A user endpoint for launching a bot agent and redirecting to the created room URL.
-
- This function retrieves the bot implementation from the environment,
- starts the bot agent, and redirects the user to the room URL to
- interact with the bot through a Daily Prebuilt Interface.
-
- Returns:
- RedirectResponse: A response that redirects to the room URL.
- """
- bot_name = os.getenv("BOT_IMPLEMENTATION", "openai").lower().strip()
- print(f"Starting bot: {bot_name}")
- room_url, token = await start(ConnectData(bot_name=bot_name))
-
- return RedirectResponse(room_url)
-
-
-@router.post("/connect")
-async def rtvi_connect(data: ConnectData) -> Dict[Any, Any]:
- """A user endpoint for launching a bot agent and retrieving the room/token credentials.
-
- This function retrieves the bot implementation from the request, if provided,
- starts the bot agent, and returns the room URL and token for the bot. This allows the
- client to then connect to the bot using their own RTVI interface.
-
- Args:
- data (ConnectData): Optional. The data containing the bot name to use.
-
- Returns:
- Dict[Any, Any]: A dictionary containing the room URL and token.
- """
- print(f"Starting bot: {data.bot_name}")
- if data is None or not data.bot_name:
- data.bot_name = os.getenv("BOT_IMPLEMENTATION", "openai").lower().strip()
- room_url, token = await start(data)
-
- return {"room_url": room_url, "token": token}
-
-
-@router.get("/status/{fid}")
-def get_status(fid: str):
- """Retrieve the status of a bot process by its function ID.
-
- Args:
- fid (str): The function ID of the bot process.
-
- Returns:
- JSONResponse: A JSON response containing the bot's status and result code.
-
- Raises:
- HTTPException: If the bot process with the given ID is not found.
- """
- func = modal.FunctionCall.from_id(fid)
- if not func:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {fid} not found")
-
- try:
- result = func.get(timeout=0)
- return JSONResponse({"bot_id": fid, "status": "finished", "code": result})
- except modal.exception.OutputExpiredError:
- return JSONResponse({"bot_id": fid, "status": "finished", "code": 404})
- except TimeoutError:
- return JSONResponse({"bot_id": fid, "status": "running", "code": 202})
-
-
-@app.function(image=web_image, min_containers=1)
-@modal.concurrent(max_inputs=1)
-@modal.asgi_app()
-def fastapi_app():
- """Create and configure the FastAPI application.
-
- This function initializes the FastAPI app with middleware, routes, and lifespan management.
- It is decorated to be used as a Modal ASGI app.
- """
- from fastapi.middleware.cors import CORSMiddleware
-
- # Initialize FastAPI app
- web_app = FastAPI(lifespan=lifespan)
-
- web_app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
- )
-
- # Include the endpoints from this file
- web_app.include_router(router)
-
- return web_app
diff --git a/examples/deployment/modal-example/server/env.example b/examples/deployment/modal-example/server/env.example
deleted file mode 100644
index 90ca6de39..000000000
--- a/examples/deployment/modal-example/server/env.example
+++ /dev/null
@@ -1,14 +0,0 @@
-DAILY_API_KEY=
-
-# determines which bot file to default to: 'openai', 'gemini', or 'vllm'
-BOT_IMPLEMENTATION=openai
-
-# needed for the openai bot pipeline
-OPENAI_API_KEY=
-ELEVENLABS_API_KEY=
-
-# needed for the gemini live bot pipeline
-GOOGLE_API_KEY=
-
-# needed if you modified the API Key for your self-hosted LLM
-VLLM_API_KEY=
\ No newline at end of file
diff --git a/examples/deployment/modal-example/server/requirements.txt b/examples/deployment/modal-example/server/requirements.txt
deleted file mode 100644
index c2cfa7086..000000000
--- a/examples/deployment/modal-example/server/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-python-dotenv==1.0.1
-modal==1.0.5
-fastapi[all]
diff --git a/examples/deployment/modal-example/server/src/__init__.py b/examples/deployment/modal-example/server/src/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/examples/deployment/modal-example/server/src/assets/robot01.png b/examples/deployment/modal-example/server/src/assets/robot01.png
deleted file mode 100644
index 3864411dc..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot01.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot010.png b/examples/deployment/modal-example/server/src/assets/robot010.png
deleted file mode 100644
index e389e0933..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot010.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot011.png b/examples/deployment/modal-example/server/src/assets/robot011.png
deleted file mode 100644
index c0f0633f3..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot011.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot012.png b/examples/deployment/modal-example/server/src/assets/robot012.png
deleted file mode 100644
index e5fb2a7d1..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot012.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot013.png b/examples/deployment/modal-example/server/src/assets/robot013.png
deleted file mode 100644
index cd62a2005..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot013.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot014.png b/examples/deployment/modal-example/server/src/assets/robot014.png
deleted file mode 100644
index 516ca4e8b..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot014.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot015.png b/examples/deployment/modal-example/server/src/assets/robot015.png
deleted file mode 100644
index 9b9242691..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot015.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot016.png b/examples/deployment/modal-example/server/src/assets/robot016.png
deleted file mode 100644
index cbd2d9d6f..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot016.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot017.png b/examples/deployment/modal-example/server/src/assets/robot017.png
deleted file mode 100644
index 5780fa27a..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot017.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot018.png b/examples/deployment/modal-example/server/src/assets/robot018.png
deleted file mode 100644
index 5c983704d..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot018.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot019.png b/examples/deployment/modal-example/server/src/assets/robot019.png
deleted file mode 100644
index c0f9bef58..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot019.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot02.png b/examples/deployment/modal-example/server/src/assets/robot02.png
deleted file mode 100644
index 267969849..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot02.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot020.png b/examples/deployment/modal-example/server/src/assets/robot020.png
deleted file mode 100644
index 88bcfa04a..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot020.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot021.png b/examples/deployment/modal-example/server/src/assets/robot021.png
deleted file mode 100644
index 5d30e6029..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot021.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot022.png b/examples/deployment/modal-example/server/src/assets/robot022.png
deleted file mode 100644
index 0e2d412ed..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot022.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot023.png b/examples/deployment/modal-example/server/src/assets/robot023.png
deleted file mode 100644
index d4bc03938..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot023.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot024.png b/examples/deployment/modal-example/server/src/assets/robot024.png
deleted file mode 100644
index 62f60c815..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot024.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot025.png b/examples/deployment/modal-example/server/src/assets/robot025.png
deleted file mode 100644
index c2ac6639e..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot025.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot03.png b/examples/deployment/modal-example/server/src/assets/robot03.png
deleted file mode 100644
index 1cb8c76d5..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot03.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot04.png b/examples/deployment/modal-example/server/src/assets/robot04.png
deleted file mode 100644
index 155d19f47..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot04.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot05.png b/examples/deployment/modal-example/server/src/assets/robot05.png
deleted file mode 100644
index b5a5c4b79..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot05.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot06.png b/examples/deployment/modal-example/server/src/assets/robot06.png
deleted file mode 100644
index b5733db5f..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot06.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot07.png b/examples/deployment/modal-example/server/src/assets/robot07.png
deleted file mode 100644
index 8b5d57655..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot07.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot08.png b/examples/deployment/modal-example/server/src/assets/robot08.png
deleted file mode 100644
index f7600a559..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot08.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/assets/robot09.png b/examples/deployment/modal-example/server/src/assets/robot09.png
deleted file mode 100644
index 16c1a98ba..000000000
Binary files a/examples/deployment/modal-example/server/src/assets/robot09.png and /dev/null differ
diff --git a/examples/deployment/modal-example/server/src/bot_gemini.py b/examples/deployment/modal-example/server/src/bot_gemini.py
deleted file mode 100644
index 39e4d0958..000000000
--- a/examples/deployment/modal-example/server/src/bot_gemini.py
+++ /dev/null
@@ -1,197 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""Gemini Bot Implementation.
-
-This module implements a chatbot using Google's Gemini Multimodal Live model.
-It includes:
-- Real-time audio/video interaction through Daily
-- Animated robot avatar
-- Speech-to-speech model
-
-The bot runs as part of a pipeline that processes audio/video frames and manages
-the conversation flow using Gemini's streaming capabilities.
-"""
-
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-from PIL import Image
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.audio.vad.vad_analyzer import VADParams
-from pipecat.frames.frames import (
- BotStartedSpeakingFrame,
- BotStoppedSpeakingFrame,
- Frame,
- OutputImageRawFrame,
- SpriteFrame,
-)
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.services.gemini_multimodal_live.gemini import GeminiMultimodalLiveLLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-try:
- logger.remove(0)
- logger.add(sys.stderr, level="DEBUG")
-except ValueError:
- # Handle the case where logger is already initialized
- pass
-
-sprites = []
-script_dir = os.path.dirname(__file__)
-
-for i in range(1, 26):
- # Build the full path to the image file
- full_path = os.path.join(script_dir, f"assets/robot0{i}.png")
- # Get the filename without the extension to use as the dictionary key
- # Open the image and convert it to bytes
- with Image.open(full_path) as img:
- sprites.append(OutputImageRawFrame(image=img.tobytes(), size=img.size, format=img.format))
-
-# Create a smooth animation by adding reversed frames
-flipped = sprites[::-1]
-sprites.extend(flipped)
-
-# Define static and animated states
-quiet_frame = sprites[0] # Static frame for when bot is listening
-talking_frame = SpriteFrame(images=sprites) # Animation sequence for when bot is talking
-
-
-class TalkingAnimation(FrameProcessor):
- """Manages the bot's visual animation states.
-
- Switches between static (listening) and animated (talking) states based on
- the bot's current speaking status.
- """
-
- def __init__(self):
- super().__init__()
- self._is_talking = False
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- """Process incoming frames and update animation state.
-
- Args:
- frame: The incoming frame to process
- direction: The direction of frame flow in the pipeline
- """
- await super().process_frame(frame, direction)
-
- # Switch to talking animation when bot starts speaking
- if isinstance(frame, BotStartedSpeakingFrame):
- if not self._is_talking:
- await self.push_frame(talking_frame)
- self._is_talking = True
- # Return to static frame when bot stops speaking
- elif isinstance(frame, BotStoppedSpeakingFrame):
- await self.push_frame(quiet_frame)
- self._is_talking = False
-
- await self.push_frame(frame, direction)
-
-
-async def run_bot(room_url: str, token: str):
- """Main bot execution function.
-
- Sets up and runs the bot pipeline including:
- - Daily video transport with specific audio parameters
- - Gemini Live multimodal model integration
- - Voice activity detection
- - Animation processing
- - RTVI event handling
- """
- # Set up Daily transport with specific audio/video parameters for Gemini
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_out_enabled=True,
- camera_out_enabled=True,
- camera_out_width=1024,
- camera_out_height=576,
- vad_enabled=True,
- vad_audio_passthrough=True,
- vad_analyzer=SileroVADAnalyzer(params=VADParams(stop_secs=0.5)),
- ),
- )
-
- # Initialize the Gemini Multimodal Live model
- llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- voice_id="Puck", # Aoede, Charon, Fenrir, Kore, Puck
- transcribe_user_audio=True,
- )
-
- messages = [
- {
- "role": "user",
- "content": "You are Chatbot, a friendly, helpful robot. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way, but keep your responses brief. Start by introducing yourself.",
- },
- ]
-
- # Set up conversation context and management
- # The context_aggregator will automatically collect conversation context
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- ta = TalkingAnimation()
-
- #
- # RTVI events for Pipecat client UI
- #
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- transport.input(),
- rtvi,
- context_aggregator.user(),
- llm,
- ta,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
- await task.queue_frame(quiet_frame)
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- print(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
diff --git a/examples/deployment/modal-example/server/src/bot_openai.py b/examples/deployment/modal-example/server/src/bot_openai.py
deleted file mode 100644
index 5d920bbba..000000000
--- a/examples/deployment/modal-example/server/src/bot_openai.py
+++ /dev/null
@@ -1,225 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""OpenAI Bot Implementation.
-
-This module implements a chatbot using OpenAI's GPT-4 model for natural language
-processing. It includes:
-- Real-time audio/video interaction through Daily
-- Animated robot avatar
-- Text-to-speech using ElevenLabs
-- Support for both English and Spanish
-
-The bot runs as part of a pipeline that processes audio/video frames and manages
-the conversation flow.
-"""
-
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-from PIL import Image
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- BotStartedSpeakingFrame,
- BotStoppedSpeakingFrame,
- Frame,
- OutputImageRawFrame,
- SpriteFrame,
-)
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-try:
- logger.remove(0)
- logger.add(sys.stderr, level="DEBUG")
-except ValueError:
- # Handle the case where logger is already initialized
- pass
-
-sprites = []
-script_dir = os.path.dirname(__file__)
-
-# Load sequential animation frames
-for i in range(1, 26):
- # Build the full path to the image file
- full_path = os.path.join(script_dir, f"assets/robot0{i}.png")
- # Get the filename without the extension to use as the dictionary key
- # Open the image and convert it to bytes
- with Image.open(full_path) as img:
- sprites.append(OutputImageRawFrame(image=img.tobytes(), size=img.size, format=img.format))
-
-# Create a smooth animation by adding reversed frames
-flipped = sprites[::-1]
-sprites.extend(flipped)
-
-# Define static and animated states
-quiet_frame = sprites[0] # Static frame for when bot is listening
-talking_frame = SpriteFrame(images=sprites) # Animation sequence for when bot is talking
-
-
-class TalkingAnimation(FrameProcessor):
- """Manages the bot's visual animation states.
-
- Switches between static (listening) and animated (talking) states based on
- the bot's current speaking status.
- """
-
- def __init__(self):
- super().__init__()
- self._is_talking = False
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- """Process incoming frames and update animation state.
-
- Args:
- frame: The incoming frame to process
- direction: The direction of frame flow in the pipeline
- """
- await super().process_frame(frame, direction)
-
- # Switch to talking animation when bot starts speaking
- if isinstance(frame, BotStartedSpeakingFrame):
- if not self._is_talking:
- await self.push_frame(talking_frame)
- self._is_talking = True
- # Return to static frame when bot stops speaking
- elif isinstance(frame, BotStoppedSpeakingFrame):
- await self.push_frame(quiet_frame)
- self._is_talking = False
-
- await self.push_frame(frame, direction)
-
-
-async def run_bot(room_url: str, token: str):
- """Main bot execution function.
-
- Sets up and runs the bot pipeline including:
- - Daily video transport
- - Speech-to-text and text-to-speech services
- - Language model integration
- - Animation processing
- - RTVI event handling
- """
- # Set up Daily transport with video/audio parameters
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_out_enabled=True,
- camera_out_enabled=True,
- camera_out_width=1024,
- camera_out_height=576,
- vad_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- #
- # Spanish
- #
- # transcription_settings=DailyTranscriptionSettings(
- # language="es",
- # tier="nova",
- # model="2-general"
- # )
- ),
- )
-
- # Initialize text-to-speech service
- tts = ElevenLabsTTSService(
- api_key=os.getenv("ELEVENLABS_API_KEY"),
- #
- # English
- #
- voice_id="SAz9YHcvj6GT2YYXdXww",
- #
- # Spanish
- #
- # model="eleven_multilingual_v2",
- # voice_id="gD1IexrzCvsXPHUuT0s3",
- )
-
- # Initialize LLM service
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- messages = [
- {
- "role": "system",
- #
- # English
- #
- "content": "You are an incessant one-upper. Start by asking the user how their day is going.",
- #
- # Spanish
- #
- # "content": "Eres Chatbot, un amigable y รบtil robot. Tu objetivo es demostrar tus capacidades de una manera breve. Tus respuestas se convertiran a audio asรญ que nunca no debes incluir caracteres especiales. Contesta a lo que el usuario pregunte de una manera creativa, รบtil y breve. Empieza por presentarte a ti mismo.",
- },
- ]
-
- # Set up conversation context and management
- # The context_aggregator will automatically collect conversation context
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- ta = TalkingAnimation()
-
- #
- # RTVI events for Pipecat client UI
- #
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- transport.input(),
- rtvi,
- context_aggregator.user(),
- llm,
- tts,
- ta,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
- await task.queue_frame(quiet_frame)
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- print(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
diff --git a/examples/deployment/modal-example/server/src/bot_vllm.py b/examples/deployment/modal-example/server/src/bot_vllm.py
deleted file mode 100644
index af6e4c0a7..000000000
--- a/examples/deployment/modal-example/server/src/bot_vllm.py
+++ /dev/null
@@ -1,238 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""OpenAI Bot Implementation.
-
-This module implements a chatbot using OpenAI's GPT-4 model for natural language
-processing. It includes:
-- Real-time audio/video interaction through Daily
-- Animated robot avatar
-- Text-to-speech using ElevenLabs
-- Support for both English and Spanish
-
-The bot runs as part of a pipeline that processes audio/video frames and manages
-the conversation flow.
-"""
-
-import os
-import sys
-from typing import List
-
-from dotenv import load_dotenv
-from loguru import logger
-from openai.types.chat import ChatCompletionMessageParam
-from PIL import Image
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- BotStartedSpeakingFrame,
- BotStoppedSpeakingFrame,
- Frame,
- OutputImageRawFrame,
- SpriteFrame,
-)
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-try:
- logger.remove(0)
- logger.add(sys.stderr, level="DEBUG")
-except ValueError:
- # Handle the case where logger is already initialized
- pass
-
-# REPLACE WITH YOUR MODAL URL ENDPOINT
-modal_url = "https://--example-vllm-openai-compatible-serve.modal.run"
-api_key = os.getenv("VLLM_API_KEY", "super-secret-key")
-
-
-sprites = []
-script_dir = os.path.dirname(__file__)
-
-# Load sequential animation frames
-for i in range(1, 26):
- # Build the full path to the image file
- full_path = os.path.join(script_dir, f"assets/robot0{i}.png")
- # Get the filename without the extension to use as the dictionary key
- # Open the image and convert it to bytes
- with Image.open(full_path) as img:
- sprites.append(OutputImageRawFrame(image=img.tobytes(), size=img.size, format=img.format))
-
-# Create a smooth animation by adding reversed frames
-flipped = sprites[::-1]
-sprites.extend(flipped)
-
-# Define static and animated states
-quiet_frame = sprites[0] # Static frame for when bot is listening
-talking_frame = SpriteFrame(images=sprites) # Animation sequence for when bot is talking
-
-
-class TalkingAnimation(FrameProcessor):
- """Manages the bot's visual animation states.
-
- Switches between static (listening) and animated (talking) states based on
- the bot's current speaking status.
- """
-
- def __init__(self):
- super().__init__()
- self._is_talking = False
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- """Process incoming frames and update animation state.
-
- Args:
- frame: The incoming frame to process
- direction: The direction of frame flow in the pipeline
- """
- await super().process_frame(frame, direction)
-
- # Switch to talking animation when bot starts speaking
- if isinstance(frame, BotStartedSpeakingFrame):
- if not self._is_talking:
- await self.push_frame(talking_frame)
- self._is_talking = True
- # Return to static frame when bot stops speaking
- elif isinstance(frame, BotStoppedSpeakingFrame):
- await self.push_frame(quiet_frame)
- self._is_talking = False
-
- await self.push_frame(frame, direction)
-
-
-async def run_bot(room_url: str, token: str):
- """Main bot execution function.
-
- Sets up and runs the bot pipeline including:
- - Daily video transport
- - Speech-to-text and text-to-speech services
- - Language model integration
- - Animation processing
- - RTVI event handling
- """
- # Set up Daily transport with video/audio parameters
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_out_enabled=True,
- camera_out_enabled=True,
- camera_out_width=1024,
- camera_out_height=576,
- vad_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- #
- # Spanish
- #
- # transcription_settings=DailyTranscriptionSettings(
- # language="es",
- # tier="nova",
- # model="2-general"
- # )
- ),
- )
-
- # Initialize text-to-speech service
- tts = ElevenLabsTTSService(
- api_key=os.getenv("ELEVENLABS_API_KEY"),
- #
- # English
- #
- voice_id="D38z5RcWu1voky8WS1ja",
- #
- # Spanish
- #
- # model="eleven_multilingual_v2",
- # voice_id="gD1IexrzCvsXPHUuT0s3",
- )
-
- # Initialize LLM service
- llm = OpenAILLMService(
- # To use OpenAI
- api_key=api_key,
- # Or, to use a local vLLM (or similar) api server
- model="neuralmagic/Meta-Llama-3.1-8B-Instruct-quantized.w4a16",
- base_url=f"{modal_url}/v1",
- )
-
- messages = [
- {
- "role": "system",
- #
- # English
- #
- "content": "You are a salesman for Modal, the cloud-native serverless Python computing platform.",
- #
- # Spanish
- #
- # "content": "Eres Chatbot, un amigable y รบtil robot. Tu objetivo es demostrar tus capacidades de una manera breve. Tus respuestas se convertiran a audio asรญ que nunca no debes incluir caracteres especiales. Contesta a lo que el usuario pregunte de una manera creativa, รบtil y breve. Empieza por presentarte a ti mismo.",
- },
- ]
-
- # Set up conversation context and management
- # The context_aggregator will automatically collect conversation context
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- ta = TalkingAnimation()
-
- #
- # RTVI events for Pipecat client UI
- #
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- transport.input(),
- rtvi,
- context_aggregator.user(),
- llm,
- tts,
- ta,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
- await task.queue_frame(quiet_frame)
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- print(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
diff --git a/examples/deployment/modal-example/server/src/runner.py b/examples/deployment/modal-example/server/src/runner.py
deleted file mode 100644
index ff7e17f0a..000000000
--- a/examples/deployment/modal-example/server/src/runner.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import importlib
-import os
-
-
-def get_bot_file(arg_bot: str | None) -> str:
- bot_implementation = arg_bot or os.getenv("BOT_IMPLEMENTATION", "openai").lower().strip()
- if not bot_implementation:
- bot_implementation = "openai"
- if bot_implementation not in ["openai", "gemini", "vllm"]:
- raise ValueError(
- f"Invalid BOT_IMPLEMENTATION: {bot_implementation}. Must be 'openai' or 'gemini'"
- )
- return f"bot_{bot_implementation}"
-
-
-def get_runner(bot_file: str):
- """Dynamically import the run_bot function based on the bot name.
-
- Args:
- bot_name (str): The name of the bot implementation (e.g., 'openai', 'gemini').
-
- Returns:
- function: The run_bot function from the specified bot module.
-
- Raises:
- ImportError: If the specified bot module or run_bot function is not found.
- """
- try:
- # Dynamically construct the module name
- module_name = f"{bot_file}"
- # Import the module
- module = importlib.import_module(module_name)
- # Get the run_bot function from the module
- return getattr(module, "run_bot")
- except (ImportError, AttributeError) as e:
- raise ImportError(f"Failed to import run_bot from {module_name}: {e}")
-
-
-def main():
- """Parse the args to launch the appropriate bot using the given room/token."""
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-t",
- "--token",
- type=str,
- required=False,
- help="Daily room token",
- )
- parser.add_argument(
- "-b",
- "--bot",
- type=str,
- required=False,
- help="Bot runner to use (e.g., openai, gemini)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- token = args.token or os.getenv("DAILY_SAMPLE_ROOM_TOKEN")
- bot_file = get_bot_file(args.bot)
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- run_bot = get_runner(bot_file)
- asyncio.run(run_bot(url, token))
-
-
-if __name__ == "__main__":
- main()
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/README.md b/examples/deployment/pipecat-cloud-daily-pstn-server/README.md
deleted file mode 100644
index 3a09a8f08..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/README.md
+++ /dev/null
@@ -1,200 +0,0 @@
-# Handling PSTN/SIP Dial-in on Pipecat Cloud
-
-This repository contains two server implementations for handling
-the pinless dial-in workflow in Pipecat Cloud. This is the companion to the
-Pipecat Cloud [pstn_sip starter image](https://github.com/daily-co/pipecat-cloud-images/tree/main/pipecat-starters/pstn_sip).
-In addition you can use `/api/dial` to trigger dial-out, and
-eventually, call-transfers.
-
-1. [FastAPI Server](fastapi-webhook-server/README.md) -
- A FastAPI implementation that handles PSTN (Public Switched Telephone
- Network) and SIP (Session Initiation Protocol) calls using the Daily API.
-
-2. [Next.js Serverless](nextjs-webhook-server/README.md) -
- A Next.js API implementation designed for deployment on Vercel's
- serverless platform.
-
-Both implementations provide:
-
-- HMAC signature validation for pinless webhook
-- Structured logging
-- Support for dial-in and dial-out settings
-- Voicemail detection and call transfer functionality (coming soon)
-- Test request handling
-
-## Choosing an Implementation
-
-- Use the **FastAPI Server** if you:
-
- - Need a standalone server
- - Prefer Python and FastAPI
- - Want to deploy to traditional hosting platforms
-
-- Use the **Next.js Serverless** implementation if you:
- - Want serverless deployment
- - Prefer JavaScript/TypeScript
- - Already use Next.js and Vercel for other projects
- - Need quick scaling and zero maintenance
-
-## Prerequisites
-
-### Environment Variables
-
-Both implementations require similar environment variables:
-
-- `PIPECAT_CLOUD_API_KEY`: Pipecat Cloud API Key, begins with pk\_\*
-- `AGENT_NAME`: Your Daily agent name
-- `PINLESS_HMAC_SECRET`: Your HMAC secret for request verification
-- `LOG_LEVEL`: (Optional) Logging level (defaults to 'info')
-
-See the individual README files in each implementation directory for
-specific setup instructions.
-
-### Phone number setup
-
-You can buy a phone number through the Pipecat Cloud Dashboard:
-
-1. Go to `Settings` > `Telephony`
-2. Follow the UI to purchase a phone number
-3. Configure the webhook URL to receive incoming calls (e.g. `https://my-webhook-url.com/api/dial`)
-
-Or purchase the number using Daily's
-[PhoneNumbers API](https://docs.daily.co/reference/rest-api/phone-numbers).
-
-```bash
-curl --request POST \
---url https://api.daily.co/v1/domain-dialin-config \
---header 'Authorization: Bearer $TOKEN' \
---header 'Content-Type: application/json' \
---data-raw '{
- "type": "pinless_dialin",
- "name_prefix": "Customer1",
- "phone_number": "+1PURCHASED_NUM",
- "room_creation_api": "https://example.com/api/dial",
- "hold_music_url": "https://example.com/static/ringtone.mp3",
- "timeout_config": {
- "message": "No agent is available right now"
- }
-}'
-```
-
-The API will return a static SIP URI (`sip_uri`) that can be called
-from other SIP services.
-
-### `room_creation_api`
-
-To make and receive calls currently you have to host a server that
-handles incoming calls. In the coming weeks, incoming calls will be
-directly handled within Daily and we will expose an endpoint similar
-to `{service}/start` that will manage this for you.
-
-In the meantime, the server described below serves as the webhook
-handler for the `room_creation_api`. Configure your pinless phone
-number or SIP interconnect to the `ngrok` tunnel or
-the actual server URL, append `/api/dial` to the webhook URL.
-
-## Example curl commands
-
-Note: Replace `http://localhost:3000` with your actual server URL and
-phone numbers with valid values for your use case.
-
-### Dialin Request
-
-The server will receive a request when a call is received from Daily.
-The payload that the webhook received is as follows:
-```json
-{
- // for dial-in from webhook
- "To": "+14152251493",
- "From": "+14158483432",
- "callId": "string-contains-uuid",
- "callDomain": "string-contains-uuid",
- "sipHeaders": {
- "X-My-Custom-Header": "value",
- "x-caller": "+1234567890",
- "x-called": "+1987654321",
- },
-}
-```
-The `To`, `From`, `callId`, `callDomain` fields are converted to
-`snake_case` and mapped to `dialin_settings`. In addition, `sipHeader`
-contains any custom SIP headers received by Daily on the SIP
-interconnect address (`sip_uri`). These are headers sent from
-Twilio or other external SIP platforms, for example, to send the
-caller's phone number.
-
-### Dialout Request
-
-Dial a number, will use any purchased number
-
-```bash
-curl -X POST http://localhost:3000/api/dial \
- -H "Content-Type: application/json" \
- -d '{
- "dialout_settings": [
- {
- "phoneNumber": "+1234567890",
- }
- ]
- }'
-```
-
-Dial a number with callerId, which is the UUID of a purchased number.
-
-```bash
-curl -X POST http://localhost:3000/api/dial \
- -H "Content-Type: application/json" \
- -d '{
- "dialout_settings": [
- {
- "phoneNumber": "+1234567890",
- "callerId": "purchased_phone_uuid"
- }
- ]
- }'
-```
-
-Dial a number
-
-```bash
-curl -X POST http://localhost:3000/api/dial \
- -H "Content-Type: application/json" \
- -d '{
- "dialout_settings": [
- {
- "phoneNumber": "+1234567890",
- "callerId": "purchased_phone_uuid"
- }
- ]
- }'
-```
-
-### Advanced Request with Voicemail Detection
-
-```bash
-curl -X POST http://localhost:3000/api/dial \
- -H "Content-Type: application/json" \
- -d '{
- "To": "+1234567890",
- "From": "+1987654321",
- "callId": "call-uuid-123",
- "callDomain": "domain-uuid-456",
- "sipHeader": {},
- "dialout_settings": [
- {
- "phoneNumber": "+1234567890",
- "callerId": "purchased_phone_uuid"
- }
- ],
- "voicemail_detection": {
- "testInPrebuilt": true
- },
- "call_transfer": {
- "mode": "dialout",
- "speakSummary": true,
- "storeSummary": true,
- "operatorNumber": "+1234567890",
- "testInPrebuilt": true
- }
- }'
-```
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/README.md b/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/README.md
deleted file mode 100644
index 77ee54232..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/README.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# FastAPI server for handling Daily PSTN/SIP Webhook
-
-A FastAPI server that handles PSTN (Public Switched Telephone Network) and SIP (Session Initiation Protocol) calls using the Daily API.
-
-## Setup
-
-1. Clone the repository
-
-2. Navigate to the `fastapi-webhook-server` directory:
-
- ```bash
- cd fastapi-webhook-server
- ```
-
-3. Install dependencies:
-
- ```bash
- pip install -r requirements.txt
- ```
-
-4. Copy `env.example` to `.env`:
-
- ```bash
- cp env.example .env
- ```
-
-5. Update `.env` with your credentials:
-
- - `AGENT_NAME`: Your Daily agent name
- - `PIPECAT_CLOUD_API_KEY`: Your Daily API key
- - `PINLESS_HMAC_SECRET`: Your HMAC secret for request verification
-
-## Running the Server
-
-Start the server:
-
-```bash
-python server.py
-```
-
-The server will run on `http://localhost:7860` and you can expose it via ngrok for testing:
-
-```bash
-`ngrok http 7860`
-```
-
-> Tip: Use a subdomain for a consistent URL (e.g. `ngrok http -subdomain=mydomain http://localhost:7860`)
-
-## API Endpoints
-
-### GET /
-
-Health check endpoint that returns a "Hello, World!" message.
-
-### POST /api/dial
-
-Initiates a PSTN/SIP call with the following request body format:
-
-```json
-{
- "To": "+14152251493",
- "From": "+14158483432",
- "callId": "string-contains-uuid",
- "callDomain": "string-contains-uuid",
- "dialout_settings": [
- {
- "phoneNumber": "+14158483432",
- "callerId": "+14152251493"
- }
- ],
- "voicemail_detection": {
- "testInPrebuilt": true
- },
- "call_transfer": {
- "mode": "dialout",
- "speakSummary": true,
- "storeSummary": true,
- "operatorNumber": "+14152250006",
- "testInPrebuilt": true
- }
-}
-```
-
-#### Response
-
-Returns a JSON object containing:
-
-- `status`: Success/failure status
-- `data`: Response from Daily API
-- `room_properties`: Properties of the created Daily room
-
-## Error Handling
-
-- 401: Invalid signature
-- 400: Invalid authorization header (e.g. missing Daily API key in bot.py)
-- 405: Method not allowed (e.g. incorrect route on the webhook URL)
-- 500: Server errors (missing API key, network issues)
-- Other status codes are passed through from the Daily API
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/env.example b/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/env.example
deleted file mode 100644
index 295042651..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/env.example
+++ /dev/null
@@ -1,3 +0,0 @@
-AGENT_NAME="your-agent-name"
-PIPECAT_CLOUD_API_KEY="your-daily-api-key"
-PINLESS_HMAC_SECRET="hmac-secret-pinless-dialin"
\ No newline at end of file
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/requirements.txt b/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/requirements.txt
deleted file mode 100644
index fcce91a24..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-fastapi
-uvicorn
-python-dotenv
-requests
-pydantic
-loguru
\ No newline at end of file
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/server.py b/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/server.py
deleted file mode 100644
index bf4e22cd1..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/fastapi-webhook-server/server.py
+++ /dev/null
@@ -1,216 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-# server.py
-
-
-import base64 # for calculating hmac signature
-import hmac
-import os # for accessing environment variables
-import time # for setting expiration time
-from typing import Any, Dict, List, Optional
-
-import requests
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from loguru import logger
-from pydantic import BaseModel, Field
-
-load_dotenv(override=True)
-
-app = FastAPI()
-
-
-class RoomRequest(BaseModel):
- test: Optional[str] = Field(None, alias="Test", description="Test field")
- To: Optional[str] = Field(None, alias="to", description="Destination phone number")
- From: Optional[str] = Field(None, alias="from", description="Source phone number")
- callId: Optional[str] = Field(None, alias="call_id", description="Unique call identifier")
- callDomain: Optional[str] = Field(
- None, alias="call_domain", description="Call domain identifier"
- )
- dialout_settings: Optional[List[Dict[str, Any]]] = Field(
- None, description="An array of phone numbers or SIP URIs to dialout to"
- )
- voicemail_detection: Optional[Dict[str, Any]] = Field(
- None, description="A flag to perform voicemail or answeing-machine detection"
- )
- call_transfer: Optional[Dict[str, Any]] = Field(None, description="to initiate a call transfer")
- sipHeaders: Optional[Dict[str, Any]] = Field(
- None,
- alias="sip_headers",
- description="Custom SIP headers received from the external SIP provider",
- )
-
- class Config:
- populate_by_name = True
- alias_generator = None
-
-
-"""
- body can contain any fields, but for handling PSTN/SIP,
- we recommend sending the following custom values:
- dialin, dialout, voicemail detection, and call transfer
-
-
- "To": "+14152251493",
- "From": "+14158483432",
- "callId": "string-contains-uuid",
- "callDomain": "string-contains-uuid"
- These need to be remapped to dialin_settings
-
- In addition, we may receive in the body that can be
- sent to the bot as a custom field, sip_headers
- "sipHeaders": {
- "X-My-Custom-Header": "value",
- "x-caller": "+14158483432",
- "x-called": "+14152251493",
- },
-
- "dialout_settings": [
- {"phoneNumber": "+14158483432", "callerId": "+14152251493"},
- {"sipUri": "sip:username@sip.hostname"}
- ],
- },
-
- voicemail_detection:{
- testInPrebuilt: true
- },
-
- "call_transfer": {
- "mode": "dialout",
- "speakSummary": true,
- "storeSummary": true,
- "operatorNumber": "+14152250006",
- "testInPrebuilt": true
- }
-"""
-
-
-@app.get("/")
-async def read_root():
- return {"message": "Hello, World!"}
-
-
-@app.post("/api/dial")
-async def dial(request: RoomRequest, raw_request: Request):
- logger.info("Incoming request to /dial:")
- logger.info(f"Headers: {dict(raw_request.headers)}")
- raw_body = await raw_request.body()
- raw_body_str = raw_body.decode()
- logger.info(f"Raw body: {raw_body_str}")
- logger.info(f"Parsed body: {request.dict()}")
-
- # calculate signature and compare/verify
- hmac_secret = os.getenv("PINLESS_HMAC_SECRET")
- timestamp = raw_request.headers.get("x-pinless-timestamp")
- signature = raw_request.headers.get("x-pinless-signature")
-
- if not hmac_secret:
- logger.debug("Skipping HMAC validation - PINLESS_HMAC_SECRET not set")
- elif timestamp and signature:
- message = timestamp + "." + raw_body_str
-
- base64_decoded_secret = base64.b64decode(hmac_secret)
- computed_signature = base64.b64encode(
- hmac.new(base64_decoded_secret, message.encode(), "sha256").digest()
- ).decode()
-
- if computed_signature != signature:
- logger.error(f"Invalid signature. Expected {signature}, got {computed_signature}")
- raise HTTPException(status_code=401, detail="Invalid signature")
- else:
- logger.debug("Skipping HMAC validation - no signature headers present")
-
- if request.test == "test":
- logger.debug("Test request received")
- return {"status": "success", "message": "Test request received"}
-
- dialin_settings = None
- # these fields are camelCase in the request
- required_fields = ["To", "From", "callId", "callDomain"]
- if all(
- field in request.dict() and request.dict()[field] is not None for field in required_fields
- ):
- # transform from camelCase to snake_case because daily-python expects snake_case
- dialin_settings = {
- "From": request.From,
- "To": request.To,
- "call_id": request.callId,
- "call_domain": request.callDomain,
- # transform from camelCase to snake_case
- }
- logger.debug(f"Populated dialin_settings from request: {dialin_settings}")
-
- daily_room_properties = {
- "enable_dialout": request.dialout_settings is not None,
- }
-
- if dialin_settings is not None:
- sip_config = {
- "display_name": request.From,
- "sip_mode": "dial-in",
- "num_endpoints": 2 if request.call_transfer is not None else 1,
- "codecs": {"audio": ["OPUS"]},
- }
- daily_room_properties["sip"] = sip_config
-
- # Setting default expiry to 5 minutes from now
- daily_room_properties["exp"] = int(time.time()) + (5 * 60)
-
- logger.debug(f"Daily room properties: {daily_room_properties}")
- payload = {
- "createDailyRoom": True,
- "dailyRoomProperties": daily_room_properties,
- "body": {
- "dialin_settings": dialin_settings,
- "dialout_settings": request.dialout_settings,
- "voicemail_detection": request.voicemail_detection,
- "call_transfer": request.call_transfer,
- "sip_headers": request.sipHeaders, # passing the SIP headers to the bot
- },
- }
-
- pcc_api_key = os.getenv("PIPECAT_CLOUD_API_KEY")
- agent_name = os.getenv("AGENT_NAME", "my-first-agent")
-
- if not pcc_api_key:
- raise HTTPException(status_code=500, detail="DAILY_API_KEY environment variable is not set")
-
- headers = {"Authorization": f"Bearer {pcc_api_key}", "Content-Type": "application/json"}
-
- url = f"https://api.pipecat.daily.co/v1/public/{agent_name}/start"
-
- logger.debug(f"Making API call to Daily: {url} {headers} {payload}")
-
- try:
- response = requests.post(url, json=payload, headers=headers)
- response.raise_for_status()
- response_data = response.json()
- logger.debug(f"Response: {response_data}")
- return {
- "status": "success",
- "data": response_data,
- "room_properties": daily_room_properties,
- }
- except requests.exceptions.HTTPError as e:
- # Pass through the status code and error details from the Daily API
- status_code = e.response.status_code
- error_detail = e.response.json() if e.response.content else str(e)
- logger.error(f"HTTP error: {error_detail}")
- raise HTTPException(status_code=status_code, detail=error_detail)
- except requests.exceptions.RequestException as e:
- logger.error(f"Request error: {str(e)}")
- raise HTTPException(status_code=500, detail=str(e))
-
-
-if __name__ == "__main__":
- try:
- import uvicorn
-
- uvicorn.run(app, host="0.0.0.0", port=7860)
- except KeyboardInterrupt:
- logger.info("Server stopped manually")
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/.gitignore b/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/.gitignore
deleted file mode 100644
index 400a7e48d..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/.gitignore
+++ /dev/null
@@ -1,53 +0,0 @@
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-.pnpm-debug.log*
-
-# local env files
-.env*.local
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
-
-# IDE specific files
-.idea/
-.vscode/
-*.swp
-*.swo
-
-# Logs
-logs
-*.log
-
-# OS generated files
-.DS_Store
-.DS_Store?
-._*
-.Spotlight-V100
-.Trashes
-ehthumbs.db
-Thumbs.db
\ No newline at end of file
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/README.md b/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/README.md
deleted file mode 100644
index c56e4f7dd..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/README.md
+++ /dev/null
@@ -1,115 +0,0 @@
-# Next.js server for handling Daily PSTN/SIP Webhook
-
-Next.js API routes for handling Daily PSTN/SIP Pipecat requests.
-
-## Features
-
-- API endpoint for handling Daily PSTN/SIP Pipecat requests
-- HMAC signature validation
-- Structured logging with Pino
-- Support for dial-in and dial-out settings
-- Voicemail detection and call transfer functionality
-- Test request handling
-
-## Setup
-
-1. Clone the repository
-
-2. Navigate to the `nextjs-webhook-server` directory:
-
- ```bash
- cd nextjs-webhook-server
- ```
-
-3. Install dependencies:
-
- ```bash
- npm install
- ```
-
-4. Create `.env.local` file with your credentials:
-
- ```bash
- cp env.local.example .env.local
- ```
-
-5. Update your `.env` with your secrets:
-
- ```bash
- PIPECAT_CLOUD_API_KEY=pk_*
- AGENT_NAME=my-first-agent
- PINLESS_HMAC_SECRET=your_hmac_secret
- LOG_LEVEL=info
- ```
-
-### Running the server
-
-Run the development server:
-
-```bash
-npm run dev
-```
-
-The server will run on `http://localhost:7860` and you can expose it via ngrok for testing:
-
-```bash
-`ngrok http 7860`
-```
-
-> Tip: Use a subdomain for a consistent URL (e.g. `ngrok http -subdomain=mydomain http://localhost:7860`)
-
-## API Endpoints
-
-### GET /api
-
-Returns a simple "Hello, World!" message with a cute cat emoji to verify the server is running.
-
-### POST /api/dial
-
-Handles dial-in and dial-out requests for Pipecat Cloud.
-
-#### Test Requests
-
-The endpoint handles test requests when a webhook is configured. Send a request with `"Test": "test"` to verify your setup:
-
-```json
-{
- "Test": "test"
-}
-```
-
-#### Production Request Format
-
-```json
-{
- // for dial-in from webhook
- "To": "+14152251493",
- "From": "+14158483432",
- "callId": "string-contains-uuid",
- "callDomain": "string-contains-uuid",
- // for making a dial out to a phone or SIP
- "dialout_settings": [
- { "phoneNumber": "+14158483432", "callerId": "purchased_phone_uuid" },
- { "sipUri": "sip:username@sip.hostname.com" }
- ]
-}
-```
-
-## Deployment
-
-The application is configured for Vercel deployment:
-
-1. Push your code to a Git repository
-2. Import your project in Vercel dashboard
-3. Configure environment variables:
- - `PIPECAT_CLOUD_API_KEY`
- - `AGENT_NAME`
- - `PINLESS_HMAC_SECRET`
- - `LOG_LEVEL` (optional, defaults to 'info')
-4. Deploy!
-
-## Security
-
-- HMAC signature validation for request authentication
-- Environment variables for sensitive credentials
-- Method validation (POST only for /dial)
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/env.local.example b/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/env.local.example
deleted file mode 100644
index 916aab13a..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/env.local.example
+++ /dev/null
@@ -1,4 +0,0 @@
-AGENT_NAME=my-first-agent
-PIPECAT_CLOUD_API_KEY=your_daily_api_key
-PINLESS_HMAC_SECRET=your_hmac_secret
-LOG_LEVEL="info"
\ No newline at end of file
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/package-lock.json b/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/package-lock.json
deleted file mode 100644
index 66749200b..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/package-lock.json
+++ /dev/null
@@ -1,5434 +0,0 @@
-{
- "name": "my-daily-app",
- "version": "0.1.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "my-daily-app",
- "version": "0.1.0",
- "dependencies": {
- "axios": "^1.11.0",
- "next": "^14.0.0",
- "pino": "^8.15.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0"
- },
- "devDependencies": {
- "eslint": "^8.46.0",
- "eslint-config-next": "^14.0.0"
- }
- },
- "node_modules/@emnapi/core": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz",
- "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.0.1",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
- "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz",
- "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
- "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
- "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
- "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
- "deprecated": "Use @eslint/config-array instead",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.3",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz",
- "integrity": "sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.3.1",
- "@emnapi/runtime": "^1.3.1",
- "@tybys/wasm-util": "^0.9.0"
- }
- },
- "node_modules/@next/env": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.30.tgz",
- "integrity": "sha512-KBiBKrDY6kxTQWGzKjQB7QirL3PiiOkV7KW98leHFjtVRKtft76Ra5qSA/SL75xT44dp6hOcqiiJ6iievLOYug=="
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "14.2.25",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.25.tgz",
- "integrity": "sha512-L2jcdEEa0bTv1DhE67Cdx1kLLkL0iLL9ILdBYx0j7noi2AUJM7bwcqmcN8awGg+8uyKGAGof/OkFom50x+ZyZg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "glob": "10.3.10"
- }
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.30.tgz",
- "integrity": "sha512-EAqfOTb3bTGh9+ewpO/jC59uACadRHM6TSA9DdxJB/6gxOpyV+zrbqeXiFTDy9uV6bmipFDkfpAskeaDcO+7/g==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.30.tgz",
- "integrity": "sha512-TyO7Wz1IKE2kGv8dwQ0bmPL3s44EKVencOqwIY69myoS3rdpO1NPg5xPM5ymKu7nfX4oYJrpMxv8G9iqLsnL4A==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.30.tgz",
- "integrity": "sha512-I5lg1fgPJ7I5dk6mr3qCH1hJYKJu1FsfKSiTKoYwcuUf53HWTrEkwmMI0t5ojFKeA6Vu+SfT2zVy5NS0QLXV4Q==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.30.tgz",
- "integrity": "sha512-8GkNA+sLclQyxgzCDs2/2GSwBc92QLMrmYAmoP2xehe5MUKBLB2cgo34Yu242L1siSkwQkiV4YLdCnjwc/Micw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.30.tgz",
- "integrity": "sha512-8Ly7okjssLuBoe8qaRCcjGtcMsv79hwzn/63wNeIkzJVFVX06h5S737XNr7DZwlsbTBDOyI6qbL2BJB5n6TV/w==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.30.tgz",
- "integrity": "sha512-dBmV1lLNeX4mR7uI7KNVHsGQU+OgTG5RGFPi3tBJpsKPvOPtg9poyav/BYWrB3GPQL4dW5YGGgalwZ79WukbKQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.30.tgz",
- "integrity": "sha512-6MMHi2Qc1Gkq+4YLXAgbYslE1f9zMGBikKMdmQRHXjkGPot1JY3n5/Qrbg40Uvbi8//wYnydPnyvNhI1DMUW1g==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.30.tgz",
- "integrity": "sha512-pVZMnFok5qEX4RT59mK2hEVtJX+XFfak+/rjHpyFh7juiT52r177bfFKhnlafm0UOSldhXjj32b+LZIOdswGTg==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.30.tgz",
- "integrity": "sha512-4KCo8hMZXMjpTzs3HOqOGYYwAXymXIy7PEPAXNEcEOyKqkjiDlECumrWziy+JEF0Oi4ILHGxzgQ3YiMGG2t/Lg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nolyfill/is-core-module": {
- "version": "1.0.39",
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.4.0"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@rtsao/scc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz",
- "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "license": "Apache-2.0"
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
- "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
- "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.26.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz",
- "integrity": "sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.26.1",
- "@typescript-eslint/type-utils": "8.26.1",
- "@typescript-eslint/utils": "8.26.1",
- "@typescript-eslint/visitor-keys": "8.26.1",
- "graphemer": "^1.4.0",
- "ignore": "^5.3.1",
- "natural-compare": "^1.4.0",
- "ts-api-utils": "^2.0.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "8.26.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.1.tgz",
- "integrity": "sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/scope-manager": "8.26.1",
- "@typescript-eslint/types": "8.26.1",
- "@typescript-eslint/typescript-estree": "8.26.1",
- "@typescript-eslint/visitor-keys": "8.26.1",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "8.26.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz",
- "integrity": "sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.26.1",
- "@typescript-eslint/visitor-keys": "8.26.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "8.26.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz",
- "integrity": "sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "8.26.1",
- "@typescript-eslint/utils": "8.26.1",
- "debug": "^4.3.4",
- "ts-api-utils": "^2.0.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "8.26.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.1.tgz",
- "integrity": "sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.26.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz",
- "integrity": "sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.26.1",
- "@typescript-eslint/visitor-keys": "8.26.1",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^2.0.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "8.26.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.1.tgz",
- "integrity": "sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.26.1",
- "@typescript-eslint/types": "8.26.1",
- "@typescript-eslint/typescript-estree": "8.26.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.26.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz",
- "integrity": "sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.26.1",
- "eslint-visitor-keys": "^4.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
- "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/@unrs/rspack-resolver-binding-darwin-arm64": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.2.2.tgz",
- "integrity": "sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-darwin-x64": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.2.2.tgz",
- "integrity": "sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-freebsd-x64": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.2.2.tgz",
- "integrity": "sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-linux-arm-gnueabihf": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.2.2.tgz",
- "integrity": "sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-linux-arm64-gnu": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.2.2.tgz",
- "integrity": "sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-linux-arm64-musl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.2.2.tgz",
- "integrity": "sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-linux-x64-gnu": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.2.2.tgz",
- "integrity": "sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-linux-x64-musl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.2.2.tgz",
- "integrity": "sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-wasm32-wasi": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.2.2.tgz",
- "integrity": "sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog==",
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@napi-rs/wasm-runtime": "^0.2.7"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@unrs/rspack-resolver-binding-win32-arm64-msvc": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.2.2.tgz",
- "integrity": "sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/rspack-resolver-binding-win32-x64-msvc": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.2.2.tgz",
- "integrity": "sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "license": "MIT",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
- "node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
- "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "is-array-buffer": "^3.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
- "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "is-string": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlast": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
- "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
- "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-shim-unscopables": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
- "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
- "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
- "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
- "es-errors": "^1.3.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
- "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
- "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/async-function": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
- "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "license": "MIT"
- },
- "node_modules/atomic-sleep": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
- "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axe-core": {
- "version": "4.10.3",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
- "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
- "dev": true,
- "license": "MPL-2.0",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/axios": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
- "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
- "license": "MIT",
- "dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
- }
- },
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
- "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "dependencies": {
- "streamsearch": "^1.1.0"
- },
- "engines": {
- "node": ">=10.16.0"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001706",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
- "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
- "license": "MIT"
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
- "dev": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
- "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
- "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/inspect-js"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
- "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/es-abstract": {
- "version": "1.23.9",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
- "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.2",
- "arraybuffer.prototype.slice": "^1.0.4",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "data-view-buffer": "^1.0.2",
- "data-view-byte-length": "^1.0.2",
- "data-view-byte-offset": "^1.0.1",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-set-tostringtag": "^2.1.0",
- "es-to-primitive": "^1.3.0",
- "function.prototype.name": "^1.1.8",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.0",
- "get-symbol-description": "^1.1.0",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "internal-slot": "^1.1.0",
- "is-array-buffer": "^3.0.5",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.2",
- "is-regex": "^1.2.1",
- "is-shared-array-buffer": "^1.0.4",
- "is-string": "^1.1.1",
- "is-typed-array": "^1.1.15",
- "is-weakref": "^1.1.0",
- "math-intrinsics": "^1.1.0",
- "object-inspect": "^1.13.3",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.7",
- "own-keys": "^1.0.1",
- "regexp.prototype.flags": "^1.5.3",
- "safe-array-concat": "^1.1.3",
- "safe-push-apply": "^1.0.0",
- "safe-regex-test": "^1.1.0",
- "set-proto": "^1.0.0",
- "string.prototype.trim": "^1.2.10",
- "string.prototype.trimend": "^1.0.9",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.3",
- "typed-array-byte-length": "^1.0.3",
- "typed-array-byte-offset": "^1.0.4",
- "typed-array-length": "^1.0.7",
- "unbox-primitive": "^1.1.0",
- "which-typed-array": "^1.1.18"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-iterator-helpers": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
- "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.3",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.6",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "iterator.prototype": "^1.1.4",
- "safe-array-concat": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
- "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
- "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
- "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
- "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@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.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "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.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "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"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-next": {
- "version": "14.2.25",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.25.tgz",
- "integrity": "sha512-BwuRQJeqw4xP/fkul/WWjivwbaLs8AjvuMzQCC+nJI65ZVhnVolWs6tk5VSD92xPHu96gSTahfaSkQjIRtJ3ag==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@next/eslint-plugin-next": "14.2.25",
- "@rushstack/eslint-patch": "^1.3.3",
- "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
- "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.28.1",
- "eslint-plugin-jsx-a11y": "^6.7.1",
- "eslint-plugin-react": "^7.33.2",
- "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
- },
- "peerDependencies": {
- "eslint": "^7.23.0 || ^8.0.0",
- "typescript": ">=3.3.1"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-typescript": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.9.1.tgz",
- "integrity": "sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.4.0",
- "get-tsconfig": "^4.10.0",
- "is-bun-module": "^1.3.0",
- "rspack-resolver": "^1.1.0",
- "stable-hash": "^0.0.5",
- "tinyglobby": "^0.2.12"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
- "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.31.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
- "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.8",
- "array.prototype.findlastindex": "^1.2.5",
- "array.prototype.flat": "^1.3.2",
- "array.prototype.flatmap": "^1.3.2",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.0",
- "hasown": "^2.0.2",
- "is-core-module": "^2.15.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "object.groupby": "^1.0.3",
- "object.values": "^1.2.0",
- "semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.8",
- "tsconfig-paths": "^3.15.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
- "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-react": {
- "version": "7.37.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz",
- "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.8",
- "array.prototype.findlast": "^1.2.5",
- "array.prototype.flatmap": "^1.3.3",
- "array.prototype.tosorted": "^1.1.4",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.2.1",
- "estraverse": "^5.3.0",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.8",
- "object.fromentries": "^2.0.8",
- "object.values": "^1.2.1",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.5",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.12",
- "string.prototype.repeat": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "5.0.0-canary-7118f5dd7-20230705",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz",
- "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-redact": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
- "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/fastq": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
- "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/follow-redirects": {
- "version": "1.15.9",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
- "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/for-each": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
- "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
- "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "functions-have-names": "^1.2.3",
- "hasown": "^2.0.2",
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
- "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
- "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "license": "ISC"
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/has-bigints": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
- "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "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.",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/internal-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
- "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
- "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-async-function": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
- "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
- "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
- "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bun-module": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz",
- "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.6.3"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
- "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
- "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
- "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.0",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
- "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
- "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-regex": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
- "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
- "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
- "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
- "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
- "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-symbols": "^1.1.0",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
- "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakmap": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
- "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
- "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
- "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/iterator.prototype": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
- "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "get-proto": "^1.0.0",
- "has-symbols": "^1.1.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/next": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/next/-/next-14.2.30.tgz",
- "integrity": "sha512-+COdu6HQrHHFQ1S/8BBsCag61jZacmvbuL2avHvQFbWa2Ox7bE+d8FyNgxRLjXQ5wtPyQwEmk85js/AuaG2Sbg==",
- "dependencies": {
- "@next/env": "14.2.30",
- "@swc/helpers": "0.5.5",
- "busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001579",
- "graceful-fs": "^4.2.11",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.1"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": ">=18.17.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.30",
- "@next/swc-darwin-x64": "14.2.30",
- "@next/swc-linux-arm64-gnu": "14.2.30",
- "@next/swc-linux-arm64-musl": "14.2.30",
- "@next/swc-linux-x64-gnu": "14.2.30",
- "@next/swc-linux-x64-musl": "14.2.30",
- "@next/swc-win32-arm64-msvc": "14.2.30",
- "@next/swc-win32-ia32-msvc": "14.2.30",
- "@next/swc-win32-x64-msvc": "14.2.30"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.41.2",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
- "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0",
- "has-symbols": "^1.1.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
- "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
- "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
- "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.values": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
- "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-exit-leak-free": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
- "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/own-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
- "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.6",
- "object-keys": "^1.1.1",
- "safe-push-apply": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pino": {
- "version": "8.21.0",
- "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz",
- "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==",
- "license": "MIT",
- "dependencies": {
- "atomic-sleep": "^1.0.0",
- "fast-redact": "^3.1.1",
- "on-exit-leak-free": "^2.1.0",
- "pino-abstract-transport": "^1.2.0",
- "pino-std-serializers": "^6.0.0",
- "process-warning": "^3.0.0",
- "quick-format-unescaped": "^4.0.3",
- "real-require": "^0.2.0",
- "safe-stable-stringify": "^2.3.1",
- "sonic-boom": "^3.7.0",
- "thread-stream": "^2.6.0"
- },
- "bin": {
- "pino": "bin.js"
- }
- },
- "node_modules/pino-abstract-transport": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz",
- "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
- "license": "MIT",
- "dependencies": {
- "readable-stream": "^4.0.0",
- "split2": "^4.0.0"
- }
- },
- "node_modules/pino-std-serializers": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz",
- "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==",
- "license": "MIT"
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
- "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/process-warning": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
- "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==",
- "license": "MIT"
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "license": "MIT"
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/quick-format-unescaped": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
- "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
- "license": "MIT"
- },
- "node_modules/react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
- "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.2"
- },
- "peerDependencies": {
- "react": "^18.3.1"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/readable-stream": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
- "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
- "license": "MIT",
- "dependencies": {
- "abort-controller": "^3.0.0",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "process": "^0.11.10",
- "string_decoder": "^1.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/real-require": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
- "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
- "license": "MIT",
- "engines": {
- "node": ">= 12.13.0"
- }
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
- "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
- "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.10",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
- "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.16.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rspack-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/rspack-resolver/-/rspack-resolver-1.2.2.tgz",
- "integrity": "sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/JounQin"
- },
- "optionalDependencies": {
- "@unrs/rspack-resolver-binding-darwin-arm64": "1.2.2",
- "@unrs/rspack-resolver-binding-darwin-x64": "1.2.2",
- "@unrs/rspack-resolver-binding-freebsd-x64": "1.2.2",
- "@unrs/rspack-resolver-binding-linux-arm-gnueabihf": "1.2.2",
- "@unrs/rspack-resolver-binding-linux-arm64-gnu": "1.2.2",
- "@unrs/rspack-resolver-binding-linux-arm64-musl": "1.2.2",
- "@unrs/rspack-resolver-binding-linux-x64-gnu": "1.2.2",
- "@unrs/rspack-resolver-binding-linux-x64-musl": "1.2.2",
- "@unrs/rspack-resolver-binding-wasm32-wasi": "1.2.2",
- "@unrs/rspack-resolver-binding-win32-arm64-msvc": "1.2.2",
- "@unrs/rspack-resolver-binding-win32-x64-msvc": "1.2.2"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safe-push-apply": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
- "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-regex-test": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
- "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-regex": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-stable-stringify": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
- "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/scheduler": {
- "version": "0.23.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
- "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- },
- "node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-proto": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
- "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/sonic-boom": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz",
- "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==",
- "license": "MIT",
- "dependencies": {
- "atomic-sleep": "^1.0.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "license": "ISC",
- "engines": {
- "node": ">= 10.x"
- }
- },
- "node_modules/stable-hash": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
- "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/string-width/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/string-width/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/string.prototype.includes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
- "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/string.prototype.matchall": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
- "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "regexp.prototype.flags": "^1.5.3",
- "set-function-name": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.repeat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
- "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
- "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
- "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/styled-jsx": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
- "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
- "license": "MIT",
- "dependencies": {
- "client-only": "0.0.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/thread-stream": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz",
- "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==",
- "license": "MIT",
- "dependencies": {
- "real-require": "^0.2.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.12",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
- "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.3",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.4.3",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
- "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz",
- "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.12"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4"
- }
- },
- "node_modules/tsconfig-paths": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
- "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD"
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
- "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
- "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
- "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
- "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
- "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.1",
- "is-number-object": "^1.1.1",
- "is-string": "^1.1.1",
- "is-symbol": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-collection": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
- "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
- "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "for-each": "^0.3.5",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/package.json b/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/package.json
deleted file mode 100644
index d2964aada..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/package.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "name": "my-daily-app",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev -p 7860",
- "build": "next build",
- "start": "next start -p 7860",
- "lint": "next lint"
- },
- "dependencies": {
- "axios": "^1.11.0",
- "next": "^14.0.0",
- "pino": "^8.15.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0"
- },
- "devDependencies": {
- "eslint": "^8.46.0",
- "eslint-config-next": "^14.0.0"
- }
-}
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/pages/api/dial.js b/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/pages/api/dial.js
deleted file mode 100644
index dc7e3d1cf..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/pages/api/dial.js
+++ /dev/null
@@ -1,178 +0,0 @@
-import { logger } from '../../lib/utils';
-import axios from 'axios';
-import crypto from 'crypto';
-
-const validateSignature = (body, signature, timestamp, secret) => {
- // Skip if any required fields are missing
- if (!signature || !timestamp || !secret) {
- logger.warn('Missing required fields for HMAC validation');
- return true;
- }
-
- try {
- const decodedSecret = Buffer.from(secret, 'base64');
- const hmac = crypto.createHmac('sha256', decodedSecret);
- const signatureData = `${timestamp}.${body}`;
- const computedSignature = hmac.update(signatureData).digest('base64');
-
- logger.debug('Signature validation:', {
- timestamp,
- signatureData: signatureData.substring(0, 50) + '...',
- computedSignature,
- receivedSignature: signature
- });
-
- return computedSignature === signature;
- } catch (error) {
- logger.error('Error validating signature:', error);
- return true; // Allow request to proceed on error
- }
-};
-
-export default async function handler(req, res) {
- // Only allow POST requests
- if (req.method !== 'POST') {
- return res.status(405).json({ error: 'Method not allowed' });
- }
-
- try {
- logger.info('Incoming request to /api/dial:');
- logger.info(`Headers: ${JSON.stringify(req.headers)}`);
-
- const rawBody = JSON.stringify(req.body);
- logger.info(`Raw body: ${rawBody}`);
-
- const signature = req.headers['x-pinless-signature'];
- const timestamp = req.headers['x-pinless-timestamp'];
-
- if (signature && timestamp) {
- logger.info('Validating HMAC signature');
- if (!validateSignature(rawBody, signature, timestamp, process.env.PINLESS_HMAC_SECRET)) {
- logger.error('Invalid HMAC signature', { signature, timestamp });
- return res.status(401).json({
- error: 'Invalid signature',
- message: 'Invalid HMAC signature'
- });
- }
- } else {
- logger.info('Skipping HMAC validation - no signature headers present');
- }
-
- // Extract request data
- const {
- Test: test,
- To,
- From,
- callId,
- callDomain,
- sipHeaders,
- dialout_settings,
- voicemail_detection,
- call_transfer
- } = req.body;
-
- // Handle test requests when a webhook is configured
- if (test === 'test') {
- logger.debug('Test request received');
- return res.status(200).json({ status: 'success', message: 'Test request received' });
- }
-
- // Process dialin settings
- let dialin_settings = null;
- const requiredFields = ['To', 'From', 'callId', 'callDomain'];
-
- if (requiredFields.every(field => req.body[field] !== undefined && req.body[field] !== null)) {
- dialin_settings = {
- // snake_case because pipecat expects this format
- From,
- To,
- call_id: callId,
- call_domain: callDomain,
- };
- logger.debug(`Populated dialin_settings from request: ${JSON.stringify(dialin_settings)}`);
- }
-
- // Set up Daily room properties
- const daily_room_properties = {
- enable_dialout: dialout_settings !== undefined && dialout_settings !== null,
- exp: Math.floor(Date.now() / 1000) + (5 * 60), // 5 minutes from now
- };
-
- // Configure SIP if dialin settings are provided
- if (dialin_settings !== null) {
- const sip_config = {
- display_name: From,
- sip_mode: 'dial-in',
- num_endpoints: (call_transfer !== undefined && call_transfer !== null) ? 2 : 1,
- codecs: {"audio": ["OPUS"]},
- };
- daily_room_properties.sip = sip_config;
- }
-
- // Prepare payload for {service}/start API call
- const payload = {
- createDailyRoom: true,
- dailyRoomProperties: daily_room_properties,
- body: {
- dialin_settings,
- dialout_settings,
- voicemail_detection,
- call_transfer,
- sip_headers: sipHeaders,
- },
- };
-
- logger.debug(`Daily room properties: ${JSON.stringify(daily_room_properties)}`);
-
- // Get Daily API key and agent name from environment variables
- const pccApiKey = process.env.PIPECAT_CLOUD_API_KEY;
- const agentName = process.env.AGENT_NAME || 'my-first-agent';
-
- if (!pccApiKey) {
- throw new Error('PIPECAT_CLOUD_API_KEY environment variable is not set');
- }
-
- // Set up headers for Daily API call
- const headers = {
- 'Authorization': `Bearer ${pccApiKey}`,
- 'Content-Type': 'application/json',
- };
-
- const url = `https://api.pipecat.daily.co/v1/public/${agentName}/start`;
- logger.debug(`Making API call to Daily: ${url} ${JSON.stringify(headers)} ${JSON.stringify(payload)}`);
-
- try {
- const response = await axios.post(url, payload, { headers });
- logger.debug(`Response: ${JSON.stringify(response.data)}`);
-
- return res.status(200).json({
- status: 'success',
- data: response.data,
- room_properties: daily_room_properties,
- });
- } catch (error) {
- if (error.response) {
- // Pass through status code and error details from the Daily API
- const statusCode = error.response.status;
- const errorDetail = error.response.data || error.message;
- logger.error(`HTTP error: ${JSON.stringify(errorDetail)}`);
- return res.status(statusCode).json(errorDetail);
- } else {
- logger.error(`Request error: ${error.message}`);
- return res.status(500).json({ error: error.message });
- }
- }
- } catch (error) {
- logger.error(`Unexpected error: ${error.message}`);
- return res.status(500).json({ error: 'Internal server error', message: error.message });
- }
-}
-
-// Configure body parser to preserve raw body text
-export const config = {
- api: {
- bodyParser: {
- sizeLimit: '1mb',
- },
- },
-};
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/pages/api/index.js b/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/pages/api/index.js
deleted file mode 100644
index 3da638d25..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/pages/api/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { logger } from '../../lib/utils';
-
-export default function handler(req, res) {
- logger.info('Received request to /api');
- res.status(200).json({ message: 'Hello, World! from แแแข' });
-}
diff --git a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/vercel.js b/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/vercel.js
deleted file mode 100644
index 7966370a8..000000000
--- a/examples/deployment/pipecat-cloud-daily-pstn-server/nextjs-webhook-server/vercel.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
- version: 2,
- buildCommand: "next build",
- outputDirectory: ".next",
- cleanUrls: true
-};
\ No newline at end of file
diff --git a/examples/deployment/pipecat-cloud-example/.gitignore b/examples/deployment/pipecat-cloud-example/.gitignore
deleted file mode 100644
index 8a5b4de3d..000000000
--- a/examples/deployment/pipecat-cloud-example/.gitignore
+++ /dev/null
@@ -1,94 +0,0 @@
-# Python
-__pycache__/
-*.py[cod]
-*$py.class
-*.so
-.Python
-build/
-dist/
-*.egg-info/
-*.egg
-.installed.cfg
-.eggs/
-downloads/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-MANIFEST
-
-# Virtual Environments
-venv/
-env/
-.env
-.venv/
-ENV/
-env.bak/
-venv.bak/
-
-# IDE
-.idea/
-.vscode/
-.spyderproject
-.spyproject
-.ropeproject
-
-# Testing and Coverage
-.coverage
-.coverage.*
-htmlcov/
-.pytest_cache/
-.tox/
-.nox/
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-.hypothesis/
-cover/
-
-# Logs and Databases
-*.log
-*.db
-db.sqlite3
-db.sqlite3-journal
-pip-log.txt
-
-# System Files
-.DS_Store
-Thumbs.db
-desktop.ini
-*.swp
-*.swo
-*.bak
-*.tmp
-*~
-
-# Build and Documentation
-docs/_build/
-.pybuilder/
-target/
-instance/
-.webassets-cache
-.pdm.toml
-.pdm-python
-.pdm-build/
-__pypackages__/
-
-# Other
-*.mo
-*.pot
-*.sage.py
-.mypy_cache/
-.dmypy.json
-dmypy.json
-.pyre/
-.pytype/
-cython_debug/
-.ipynb_checkpoints
-
-# Pipecat cloud
-.pcc-deploy.toml
\ No newline at end of file
diff --git a/examples/deployment/pipecat-cloud-example/Dockerfile b/examples/deployment/pipecat-cloud-example/Dockerfile
deleted file mode 100644
index 290899e5c..000000000
--- a/examples/deployment/pipecat-cloud-example/Dockerfile
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM dailyco/pipecat-base:latest
-
-COPY ./requirements.txt requirements.txt
-
-RUN pip install --no-cache-dir --upgrade -r requirements.txt
-
-COPY ./bot.py bot.py
\ No newline at end of file
diff --git a/examples/deployment/pipecat-cloud-example/README.md b/examples/deployment/pipecat-cloud-example/README.md
deleted file mode 100644
index 7d5e4bd6f..000000000
--- a/examples/deployment/pipecat-cloud-example/README.md
+++ /dev/null
@@ -1,196 +0,0 @@
-# Pipecat Cloud Starter Project
-
-[](https://docs.pipecat.daily.co) [](https://discord.gg/dailyco)
-
-A template voice agent for [Pipecat Cloud](https://www.daily.co/products/pipecat-cloud/) that demonstrates building and deploying a conversational AI agent.
-
-> **For a detailed step-by-step guide, see our [Quickstart Documentation](https://docs.pipecat.daily.co/quickstart).**
-
-## Prerequisites
-
-- Python 3.10+
-- Linux, MacOS, or Windows Subsystem for Linux (WSL)
-- [Docker](https://www.docker.com) and a Docker repository (e.g., [Docker Hub](https://hub.docker.com))
-- A Docker Hub account (or other container registry account)
-- [Pipecat Cloud](https://pipecat.daily.co) account
-
-> **Note**: If you haven't installed Docker yet, follow the official installation guides for your platform ([Linux](https://docs.docker.com/engine/install/), [Mac](https://docs.docker.com/desktop/setup/install/mac-install/), [Windows](https://docs.docker.com/desktop/setup/install/windows-install/)). For Docker Hub, [create a free account](https://hub.docker.com/signup) and log in via terminal with `docker login`.
-
-## Get Started
-
-### 1. Get the starter project
-
-Clone the starter project from GitHub:
-
-```bash
-git clone https://github.com/daily-co/pipecat-cloud-starter
-cd pipecat-cloud-starter
-```
-
-### 2. Set up your Python environment
-
-We recommend using a virtual environment to manage your Python dependencies.
-
-```bash
-# Create a virtual environment
-python -m venv .venv
-
-# Activate it
-source .venv/bin/activate # On Windows: .venv\Scripts\activate
-
-# Install the Pipecat Cloud CLI
-pip install pipecatcloud
-```
-
-### 3. Authenticate with Pipecat Cloud
-
-```bash
-pcc auth login
-```
-
-### 4. Acquire required API keys
-
-This starter requires the following API keys:
-
-- **OpenAI API Key**: Get from [platform.openai.com/api-keys](https://platform.openai.com/api-keys)
-- **Cartesia API Key**: Get from [play.cartesia.ai/keys](https://play.cartesia.ai/keys)
-- **Daily API Key**: Automatically provided through your Pipecat Cloud account
-
-### 5. Configure to run locally (optional)
-
-You can test your agent locally before deploying to Pipecat Cloud:
-
-```bash
-# Set environment variables with your API keys
-export CARTESIA_API_KEY="your_cartesia_key"
-export DAILY_API_KEY="your_daily_key"
-export OPENAI_API_KEY="your_openai_key"
-```
-
-> Your `DAILY_API_KEY` can be found at [https://pipecat.daily.co](https://pipecat.daily.co) under the `Settings` in the `Daily (WebRTC)` tab.
-
-First install requirements:
-
-```bash
-pip install -r requirements.txt
-```
-
-Then, launch the bot.py script locally:
-
-```bash
-LOCAL_RUN=1 python bot.py
-```
-
-## Deploy & Run
-
-### 1. Build and push your Docker image
-
-```bash
-# Build the image (targeting ARM architecture for cloud deployment)
-docker build --platform=linux/arm64 -t my-first-agent:latest .
-
-# Tag with your Docker username and version
-docker tag my-first-agent:latest your-username/my-first-agent:0.1
-
-# Push to Docker Hub
-docker push your-username/my-first-agent:0.1
-```
-
-### 2. Create a secret set for your API keys
-
-The starter project requires API keys for OpenAI and Cartesia:
-
-```bash
-# Copy the example env file
-cp env.example .env
-
-# Edit .env to add your API keys:
-# CARTESIA_API_KEY=your_cartesia_key
-# OPENAI_API_KEY=your_openai_key
-
-# Create a secret set from your .env file
-pcc secrets set my-first-agent-secrets --file .env
-```
-
-Alternatively, you can create secrets directly via CLI:
-
-```bash
-pcc secrets set my-first-agent-secrets \
- CARTESIA_API_KEY=your_cartesia_key \
- OPENAI_API_KEY=your_openai_key
-```
-
-### 3. Deploy to Pipecat Cloud
-
-```bash
-pcc deploy my-first-agent your-username/my-first-agent:0.1 --secrets my-first-agent-secrets
-```
-
-> **Note (Optional)**: For a more maintainable approach, you can use the included `pcc-deploy.toml` file:
->
-> ```toml
-> agent_name = "my-first-agent"
-> image = "your-username/my-first-agent:0.1"
-> secret_set = "my-first-agent-secrets"
->
-> [scaling]
-> min_instances = 0
-> ```
->
-> Then simply run `pcc deploy` without additional arguments.
-
-> **Note**: If your repository is private, you'll need to add credentials:
->
-> ```bash
-> # Create pull secret (youโll be prompted for credentials)
-> pcc secrets image-pull-secret pull-secret https://index.docker.io/v1/
->
-> # Deploy with credentials
-> pcc deploy my-first-agent your-username/my-first-agent:0.1 --credentials pull-secret
-> ```
-
-### 4. Check deployment and scaling (optional)
-
-By default, your agent will use "scale-to-zero" configuration, which means it may have a cold start of around 10 seconds when first used. By default, idle instances are maintained for 5 minutes before being terminated when using scale-to-zero.
-
-For more responsive testing, you can scale your deployment to keep a minimum of one instance warm:
-
-```bash
-# Ensure at least one warm instance is always available
-pcc deploy my-first-agent your-username/my-first-agent:0.1 --min-instances 1
-
-# Check the status of your deployment
-pcc agent status my-first-agent
-```
-
-By default, idle instances are maintained for 5 minutes before being terminated when using scale-to-zero.
-
-### 5. Create an API key
-
-```bash
-# Create a public API key for accessing your agent
-pcc organizations keys create
-
-# Set it as the default key to use with your agent
-pcc organizations keys use
-```
-
-### 6. Start your agent
-
-```bash
-# Start a session with your agent in a Daily room
-pcc agent start my-first-agent --use-daily
-```
-
-This will return a URL, which you can use to connect to your running agent.
-
-## Documentation
-
-For more details on Pipecat Cloud and its capabilities:
-
-- [Pipecat Cloud Documentation](https://docs.pipecat.daily.co)
-- [Pipecat Project Documentation](https://docs.pipecat.ai)
-
-## Support
-
-Join our [Discord community](https://discord.gg/dailyco) for help and discussions.
diff --git a/examples/deployment/pipecat-cloud-example/bot.py b/examples/deployment/pipecat-cloud-example/bot.py
deleted file mode 100644
index 436f70a86..000000000
--- a/examples/deployment/pipecat-cloud-example/bot.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from pipecatcloud.agent import DailySessionArguments
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import LLMMessagesFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-# Load environment variables
-load_dotenv(override=True)
-
-# Check if we're in local development mode
-LOCAL_RUN = os.getenv("LOCAL_RUN")
-
-
-async def main(transport: DailyTransport):
- """Main pipeline setup and execution function.
-
- Args:
- transport: The DailyTransport object for the bot
- """
- logger.debug("Starting bot")
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"), voice_id="71a7ad14-091c-4e8e-a314-022ece01c121"
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- messages = [
- {
- "role": "system",
- "content": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(),
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.info("First participant joined: {}", participant["id"])
- await transport.capture_participant_transcription(participant["id"])
- # Kick off the conversation.
- messages.append(
- {
- "role": "system",
- "content": "Please start with 'Hello World' and introduce yourself to the user.",
- }
- )
- await task.queue_frames([LLMMessagesFrame(messages)])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.info("Participant left: {}", participant)
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False, force_gc=True)
-
- await runner.run(task)
-
-
-async def bot(args: DailySessionArguments):
- """Main bot entry point compatible with the FastAPI route handler.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: The configuration object from the request body
- session_id: The session ID for logging
- """
- from pipecat.audio.filters.krisp_filter import KrispFilter
-
- logger.info(f"Bot process initialized {args.room_url} {args.token}")
-
- transport = DailyTransport(
- args.room_url,
- args.token,
- "Pipecat Bot",
- DailyParams(
- audio_in_enabled=True,
- audio_in_filter=None if LOCAL_RUN else KrispFilter(),
- audio_out_enabled=True,
- transcription_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- try:
- await main(transport)
- logger.info("Bot process completed")
- except Exception as e:
- logger.exception(f"Error in bot process: {str(e)}")
- raise
-
-
-# Local development functions
-async def local_daily():
- """Function for local development testing."""
- from local_runner import configure
-
- try:
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
- transport = DailyTransport(
- room_url,
- token,
- "Pipecat Bot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- transcription_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- await main(transport)
-
- except Exception as e:
- logger.exception(f"Error in local development mode: {e}")
-
-
-# Local development entry point
-if LOCAL_RUN and __name__ == "__main__":
- try:
- asyncio.run(local_daily())
- except Exception as e:
- logger.exception(f"Failed to run in local mode: {e}")
diff --git a/examples/deployment/pipecat-cloud-example/env.example b/examples/deployment/pipecat-cloud-example/env.example
deleted file mode 100644
index e41234094..000000000
--- a/examples/deployment/pipecat-cloud-example/env.example
+++ /dev/null
@@ -1,4 +0,0 @@
-CARTESIA_API_KEY=
-OPENAI_API_KEY=
-# Local dev only
-DAILY_API_KEY=
\ No newline at end of file
diff --git a/examples/deployment/pipecat-cloud-example/local_runner.py b/examples/deployment/pipecat-cloud-example/local_runner.py
deleted file mode 100644
index ba25cf301..000000000
--- a/examples/deployment/pipecat-cloud-example/local_runner.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-
-import aiohttp
-from fastapi import HTTPException
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- (url, token) = await configure_with_args(aiohttp_session)
- return (url, token)
-
-
-async def configure_with_args(aiohttp_session: aiohttp.ClientSession = None):
- key = os.getenv("DAILY_API_KEY")
- if not key:
- raise Exception(
- "No Daily API key specified. set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- room = await daily_rest_helper.create_room(
- DailyRoomParams(properties={"enable_prejoin_ui": False})
- )
- if not room.url:
- raise HTTPException(status_code=500, detail="Failed to create room")
-
- url = room.url
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/deployment/pipecat-cloud-example/pcc-deploy.toml b/examples/deployment/pipecat-cloud-example/pcc-deploy.toml
deleted file mode 100644
index 42fc78789..000000000
--- a/examples/deployment/pipecat-cloud-example/pcc-deploy.toml
+++ /dev/null
@@ -1,8 +0,0 @@
-agent_name = "my-first-agent"
-image = "your-username/my-first-agent:0.1"
-image_credentials = "your-dockerhub-creds"
-secret_set = "my-first-agent-secrets"
-enable_krisp = true
-
-[scaling]
- min_instances = 0
diff --git a/examples/deployment/pipecat-cloud-example/requirements.txt b/examples/deployment/pipecat-cloud-example/requirements.txt
deleted file mode 100644
index 2e9fd4e9d..000000000
--- a/examples/deployment/pipecat-cloud-example/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-pipecatcloud
-pipecat-ai[cartesia,daily,openai,silero]>=0.0.58
-python-dotenv~=1.0.1
diff --git a/examples/fal-smart-turn/.gitignore b/examples/fal-smart-turn/.gitignore
deleted file mode 100644
index 0d298d282..000000000
--- a/examples/fal-smart-turn/.gitignore
+++ /dev/null
@@ -1,51 +0,0 @@
-# Python
-__pycache__/
-*.py[cod]
-*$py.class
-*.so
-.Python
-build/
-dist/
-*.egg-info/
-.installed.cfg
-*.egg
-.pytest_cache/
-.coverage
-.coverage.*
-.env
-.venv
-env/
-venv/
-ENV/
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# JavaScript/Node.js
-node_modules/
-dist/
-dist-ssr/
-*.local
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-# Logs
-logs/
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-# Editor/IDE
-.vscode/*
-!.vscode/extensions.json
-.idea/
-*.swp
-*.swo
-.DS_Store
-
-# Project specific
-runpod.toml
\ No newline at end of file
diff --git a/examples/fal-smart-turn/README.md b/examples/fal-smart-turn/README.md
deleted file mode 100644
index d8f77092f..000000000
--- a/examples/fal-smart-turn/README.md
+++ /dev/null
@@ -1,152 +0,0 @@
-# Smart Turn Detection Demo
-
-This demo showcases Pipecat's Smart Turn Detection feature - an advanced conversational turn detection system that uses machine learning to identify when a speaker has finished their turn in a conversation. Unlike basic Voice Activity Detection (VAD) which only detects speech vs. silence, Smart Turn detects natural conversational cues like intonation patterns, pacing, and linguistic signals.
-
-This demo uses the [pipecat-ai/smart-turn](https://huggingface.co/pipecat-ai/smart-turn) model - an open-source, community-driven conversational turn detection model designed to provide more natural turn-taking in voice interactions. The model is being hosted on Fal's infrastructure for GPU acceleration, offering inference times between 50-60ms.
-
-In the client UI, you can see the transcription messages along with the smart-turn model's prediction results in real-time.
-
-## Try the demo
-
-Try the hosted version of the demo here: https://pcc-smart-turn.vercel.app/.
-
-## Run the demo locally
-
-### Run the Server
-
-1. Set up and activate your virtual environment:
-
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
-2. Install dependencies:
-
- ```bash
- pip install -r requirements.txt
- ```
-
-3. Create your .env file and set your env vars:
-
- ```bash
- cp env.example .env
- ```
-
- Keys to provide:
-
- - GOOGLE_API_KEY
- - CARTESIA_API_KEY
- - DEEPGRAM_API_KEY
- - DAILY_API_KEY
- - FAL_SMART_TURN_API_KEY
-
-4. Run the server:
-
- ```bash
- LOCAL_RUN=1 python server.py
- ```
-
-### Run the client
-
-1. Open a new terminal and navigate to the client directory:
-
- ```bash
- cd client
- ```
-
-2. Install dependencies:
-
- ```bash
- npm install
- ```
-
-3. Create your .env.local file:
-
- ```bash
- cp env.local.example .env.local
- ```
-
- > Note: No keys need to be modified. `NEXT_PUBLIC_API_BASE_URL` is already configured for local use.
-
-4. Start the development server:
-
- ```bash
- npm run dev
- ```
-
-5. Open [http://localhost:3000](http://localhost:3000) in your browser.
-
-## Deploy the app
-
-### Deploy the server to Pipecat Cloud
-
-1. Navigate to server
-
- ```bash
- cd server
- ```
-
-2. You should already have a .env set up from running locally. If not, do that now.
-
-3. Update your build and deploy scripts.
-
- - In build.sh, set `DOCKER_USERNAME` and `AGENT_NAME`.
- - In pcc-deploy.toml, set `image`, which specifies where your Docker image is stored.
-
-4. Build your Docker image by running the build script:
-
- ```bash
- ./build.sh
- ```
-
- > Note: This builds, tags and pushes your docker image and assumes Docker Hub is the container registry.
-
-5. Make sure you have the Pipecat Cloud CLI installed:
-
- ```bash
- pip install pipecatcloud
- ```
-
-6. Login via the Pipecat Cloud CLI:
-
- ```bash
- pcc auth login
- ```
-
- > Note: If you don't have an account, sign up at https://pipecat.daily.co.
-
-7. Add a secrets set:
-
- ```bash
- pcc secrets set pcc-smart-turn-secrets --file .env
- ```
-
-8. Deploy your agent:
-
- ```bash
- pcc deploy
- ```
-
- > Note: This uses your pcc-deploy.toml settings. Modify as needed.
-
-### Deploy the client to Vercel
-
-This project uses TypeScript, React, and Next.js, making it a perfect fit for [Vercel](https://vercel.com/).
-
-- In your client directory, install Vercel's CLI tool: `npm install -g vercel`
-- Verify it's installed using `vercel --version`
-- Log in your Vercel account using `vercel login`
-- Deploy your client to Vercel using `vercel`
-
-Follow the vercel prompts to deploy your project.
-
-### Test your deployed app
-
-Now with the client and server deployed, you can join the call using your Vercel URL.
-
-See the debug information for the Smart Turn data. It prints a log line for each smart-turn inference:
-
-```
-Smart Turn: COMPLETE, Probability: 95.3%, Model inference: 65.23ms, Server processing: 82.09ms, End-to-end: 245.43ms
-```
diff --git a/examples/fal-smart-turn/client/.gitignore b/examples/fal-smart-turn/client/.gitignore
deleted file mode 100644
index 5ef6a5207..000000000
--- a/examples/fal-smart-turn/client/.gitignore
+++ /dev/null
@@ -1,41 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.*
-.yarn/*
-!.yarn/patches
-!.yarn/plugins
-!.yarn/releases
-!.yarn/versions
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-.pnpm-debug.log*
-
-# env files (can opt-in for committing if needed)
-.env*
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
diff --git a/examples/fal-smart-turn/client/env.local.example b/examples/fal-smart-turn/client/env.local.example
deleted file mode 100644
index f99567196..000000000
--- a/examples/fal-smart-turn/client/env.local.example
+++ /dev/null
@@ -1,3 +0,0 @@
-NEXT_PUBLIC_API_BASE_URL=http://localhost:7860
-PIPECAT_CLOUD_API_KEY=
-AGENT_NAME=pcc-smart-turn
\ No newline at end of file
diff --git a/examples/fal-smart-turn/client/eslint.config.mjs b/examples/fal-smart-turn/client/eslint.config.mjs
deleted file mode 100644
index c85fb67c4..000000000
--- a/examples/fal-smart-turn/client/eslint.config.mjs
+++ /dev/null
@@ -1,16 +0,0 @@
-import { dirname } from "path";
-import { fileURLToPath } from "url";
-import { FlatCompat } from "@eslint/eslintrc";
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
-
-const compat = new FlatCompat({
- baseDirectory: __dirname,
-});
-
-const eslintConfig = [
- ...compat.extends("next/core-web-vitals", "next/typescript"),
-];
-
-export default eslintConfig;
diff --git a/examples/fal-smart-turn/client/next.config.ts b/examples/fal-smart-turn/client/next.config.ts
deleted file mode 100644
index e9ffa3083..000000000
--- a/examples/fal-smart-turn/client/next.config.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import type { NextConfig } from "next";
-
-const nextConfig: NextConfig = {
- /* config options here */
-};
-
-export default nextConfig;
diff --git a/examples/fal-smart-turn/client/package-lock.json b/examples/fal-smart-turn/client/package-lock.json
deleted file mode 100644
index 2d360ea87..000000000
--- a/examples/fal-smart-turn/client/package-lock.json
+++ /dev/null
@@ -1,5687 +0,0 @@
-{
- "name": "my-nextjs-app",
- "version": "0.1.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "my-nextjs-app",
- "version": "0.1.0",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/client-react": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0",
- "next": "15.3.1",
- "react": "^19.0.0",
- "react-dom": "^19.0.0"
- },
- "devDependencies": {
- "@eslint/eslintrc": "^3",
- "@types/node": "^20",
- "@types/react": "^19",
- "@types/react-dom": "^19",
- "eslint": "^9",
- "eslint-config-next": "15.2.3",
- "typescript": "^5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.77.0.tgz",
- "integrity": "sha512-icNXKieKAkRR/C5dcPjrCkL1jQGFp5C5WtLHy5uHAdTztm+mo9wlPJuehbWaGOM3TV24mgWHZ/+8jOys1G0I4w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@emnapi/core": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz",
- "integrity": "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.0.3",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz",
- "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.3.tgz",
- "integrity": "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
- "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/config-array": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
- "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/object-schema": "^2.1.6",
- "debug": "^4.3.1",
- "minimatch": "^3.1.2"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/config-helpers": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
- "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/core": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
- "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
- "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^10.0.1",
- "globals": "^14.0.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "9.30.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz",
- "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- }
- },
- "node_modules/@eslint/object-schema": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
- "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/plugin-kit": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz",
- "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^0.15.1",
- "levn": "^0.4.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
- "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@humanfs/core": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
- "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node": {
- "version": "0.16.6",
- "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
- "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanfs/core": "^0.19.1",
- "@humanwhocodes/retry": "^0.3.0"
- },
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
- "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/retry": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
- "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@img/sharp-darwin-arm64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz",
- "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-darwin-x64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz",
- "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz",
- "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz",
- "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz",
- "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==",
- "cpu": [
- "arm"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz",
- "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz",
- "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==",
- "cpu": [
- "ppc64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz",
- "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==",
- "cpu": [
- "s390x"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz",
- "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz",
- "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz",
- "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-linux-arm": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz",
- "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.1.0"
- }
- },
- "node_modules/@img/sharp-linux-arm64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz",
- "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-linux-s390x": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz",
- "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.1.0"
- }
- },
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz",
- "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz",
- "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz",
- "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.1.0"
- }
- },
- "node_modules/@img/sharp-wasm32": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz",
- "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==",
- "cpu": [
- "wasm32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.4.3"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-arm64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz",
- "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-ia32": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz",
- "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==",
- "cpu": [
- "ia32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz",
- "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "0.2.11",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz",
- "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.4.3",
- "@emnapi/runtime": "^1.4.3",
- "@tybys/wasm-util": "^0.9.0"
- }
- },
- "node_modules/@next/env": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.1.tgz",
- "integrity": "sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==",
- "license": "MIT"
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.3.tgz",
- "integrity": "sha512-eNSOIMJtjs+dp4Ms1tB1PPPJUQHP3uZK+OQ7iFY9qXpGO6ojT6imCL+KcUOqE/GXGidWbBZJzYdgAdPHqeCEPA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-glob": "3.3.1"
- }
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.1.tgz",
- "integrity": "sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.1.tgz",
- "integrity": "sha512-q+aw+cJ2ooVYdCEqZVk+T4Ni10jF6Fo5DfpEV51OupMaV5XL6pf3GCzrk6kSSZBsMKZtVC1Zm/xaNBFpA6bJ2g==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.1.tgz",
- "integrity": "sha512-wBQ+jGUI3N0QZyWmmvRHjXjTWFy8o+zPFLSOyAyGFI94oJi+kK/LIZFJXeykvgXUk1NLDAEFDZw/NVINhdk9FQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.1.tgz",
- "integrity": "sha512-IIxXEXRti/AulO9lWRHiCpUUR8AR/ZYLPALgiIg/9ENzMzLn3l0NSxVdva7R/VDcuSEBo0eGVCe3evSIHNz0Hg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.1.tgz",
- "integrity": "sha512-bfI4AMhySJbyXQIKH5rmLJ5/BP7bPwuxauTvVEiJ/ADoddaA9fgyNNCcsbu9SlqfHDoZmfI6g2EjzLwbsVTr5A==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.1.tgz",
- "integrity": "sha512-FeAbR7FYMWR+Z+M5iSGytVryKHiAsc0x3Nc3J+FD5NVbD5Mqz7fTSy8CYliXinn7T26nDMbpExRUI/4ekTvoiA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.1.tgz",
- "integrity": "sha512-yP7FueWjphQEPpJQ2oKmshk/ppOt+0/bB8JC8svPUZNy0Pi3KbPx2Llkzv1p8CoQa+D2wknINlJpHf3vtChVBw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.1.tgz",
- "integrity": "sha512-3PMvF2zRJAifcRNni9uMk/gulWfWS+qVI/pagd+4yLF5bcXPZPPH2xlYRYOsUjmCJOXSTAC2PjRzbhsRzR2fDQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nolyfill/is-core-module": {
- "version": "1.0.39",
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.4.0"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/client-react": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-react/-/client-react-1.0.0.tgz",
- "integrity": "sha512-vhyKeFnQlN6311w4f+g+45rLQcn6Qmd5CI933T7wV8Yti8qHi2Tf54mQ9CS7X1lU0wgl7KLDMi/8p+7JaUoTfg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "jotai": "^2.9.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "*",
- "react": ">=18",
- "react-dom": ">=18"
- }
- },
- "node_modules/@pipecat-ai/daily-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/daily-transport/-/daily-transport-1.0.0.tgz",
- "integrity": "sha512-iXmv9Et/TGPvJoeOY+ZBPv+a3pbqT502jco2MBHl8l2VrtztkidjDwiOkPfPdD191CCwaSbV5laSYALsD0AyxA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.77.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@rtsao/scc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz",
- "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "license": "Apache-2.0"
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.15",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
- "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
- "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "20.19.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.4.tgz",
- "integrity": "sha512-OP+We5WV8Xnbuvw0zC2m4qfB/BJvjyCwtNjhHdJxV1639SGSKrLmJkc3fMnp2Qy8nJyHp8RO6umxELN/dS1/EA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@types/react": {
- "version": "19.1.8",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
- "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "19.1.6",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz",
- "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^19.0.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.36.0.tgz",
- "integrity": "sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/type-utils": "8.36.0",
- "@typescript-eslint/utils": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "graphemer": "^1.4.0",
- "ignore": "^7.0.0",
- "natural-compare": "^1.4.0",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^8.36.0",
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.36.0.tgz",
- "integrity": "sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/typescript-estree": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/project-service": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.36.0.tgz",
- "integrity": "sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.36.0",
- "@typescript-eslint/types": "^8.36.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.36.0.tgz",
- "integrity": "sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.36.0.tgz",
- "integrity": "sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.36.0.tgz",
- "integrity": "sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "8.36.0",
- "@typescript-eslint/utils": "8.36.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.36.0.tgz",
- "integrity": "sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.36.0.tgz",
- "integrity": "sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/project-service": "8.36.0",
- "@typescript-eslint/tsconfig-utils": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.36.0.tgz",
- "integrity": "sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/typescript-estree": "8.36.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.36.0.tgz",
- "integrity": "sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.36.0",
- "eslint-visitor-keys": "^4.2.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@unrs/resolver-binding-android-arm-eabi": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.0.tgz",
- "integrity": "sha512-LRw5BW29sYj9NsQC6QoqeLVQhEa+BwVINYyMlcve+6stwdBsSt5UB7zw4UZB4+4PNqIVilHoMaPWCb/KhABHQw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-android-arm64": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.0.tgz",
- "integrity": "sha512-zYX8D2zcWCAHqghA8tPjbp7LwjVXbIZP++mpU/Mrf5jUVlk3BWIxkeB8yYzZi5GpFSlqMcRZQxQqbMI0c2lASQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-arm64": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.0.tgz",
- "integrity": "sha512-YsYOT049hevAY/lTYD77GhRs885EXPeAfExG5KenqMJ417nYLS2N/kpRpYbABhFZBVQn+2uRPasTe4ypmYoo3w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-x64": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.0.tgz",
- "integrity": "sha512-PSjvk3OZf1aZImdGY5xj9ClFG3bC4gnSSYWrt+id0UAv+GwwVldhpMFjAga8SpMo2T1GjV9UKwM+QCsQCQmtdA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-freebsd-x64": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.0.tgz",
- "integrity": "sha512-KC/iFaEN/wsTVYnHClyHh5RSYA9PpuGfqkFua45r4sweXpC0KHZ+BYY7ikfcGPt5w1lMpR1gneFzuqWLQxsRKg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.0.tgz",
- "integrity": "sha512-CDh/0v8uot43cB4yKtDL9CVY8pbPnMV0dHyQCE4lFz6PW/+9tS0i9eqP5a91PAqEBVMqH1ycu+k8rP6wQU846w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.0.tgz",
- "integrity": "sha512-+TE7epATDSnvwr3L/hNHX3wQ8KQYB+jSDTdywycg3qDqvavRP8/HX9qdq/rMcnaRDn4EOtallb3vL/5wCWGCkw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.0.tgz",
- "integrity": "sha512-VBAYGg3VahofpQ+L4k/ZO8TSICIbUKKTaMYOWHWfuYBFqPbSkArZZLezw3xd27fQkxX4BaLGb/RKnW0dH9Y/UA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.0.tgz",
- "integrity": "sha512-9IgGFUUb02J1hqdRAHXpZHIeUHRrbnGo6vrRbz0fREH7g+rzQy53/IBSyadZ/LG5iqMxukriNPu4hEMUn+uWEg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.0.tgz",
- "integrity": "sha512-LR4iQ/LPjMfivpL2bQ9kmm3UnTas3U+umcCnq/CV7HAkukVdHxrDD1wwx74MIWbbgzQTLPYY7Ur2MnnvkYJCBQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.0.tgz",
- "integrity": "sha512-HCupFQwMrRhrOg7YHrobbB5ADg0Q8RNiuefqMHVsdhEy9lLyXm/CxsCXeLJdrg27NAPsCaMDtdlm8Z2X8x91Tg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.0.tgz",
- "integrity": "sha512-Ckxy76A5xgjWa4FNrzcKul5qFMWgP5JSQ5YKd0XakmWOddPLSkQT+uAvUpQNnFGNbgKzv90DyQlxPDYPQ4nd6A==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.0.tgz",
- "integrity": "sha512-HfO0PUCCRte2pMJmVyxPI+eqT7KuV3Fnvn2RPvMe5mOzb2BJKf4/Vth8sSt9cerQboMaTVpbxyYjjLBWIuI5BQ==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.0.tgz",
- "integrity": "sha512-9PZdjP7tLOEjpXHS6+B/RNqtfVUyDEmaViPOuSqcbomLdkJnalt5RKQ1tr2m16+qAufV0aDkfhXtoO7DQos/jg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.0.tgz",
- "integrity": "sha512-qkE99ieiSKMnFJY/EfyGKVtNra52/k+lVF/PbO4EL5nU6AdvG4XhtJ+WHojAJP7ID9BNIra/yd75EHndewNRfA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.0.tgz",
- "integrity": "sha512-MjXek8UL9tIX34gymvQLecz2hMaQzOlaqYJJBomwm1gsvK2F7hF+YqJJ2tRyBDTv9EZJGMt4KlKkSD/gZWCOiw==",
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@napi-rs/wasm-runtime": "^0.2.11"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.0.tgz",
- "integrity": "sha512-9LT6zIGO7CHybiQSh7DnQGwFMZvVr0kUjah6qQfkH2ghucxPV6e71sUXJdSM4Ba0MaGE6DC/NwWf7mJmc3DAng==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.0.tgz",
- "integrity": "sha512-HYchBYOZ7WN266VjoGm20xFv5EonG/ODURRgwl9EZT7Bq1nLEs6VKJddzfFdXEAho0wfFlt8L/xIiE29Pmy1RA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.0.tgz",
- "integrity": "sha512-+oLKLHw3I1UQo4MeHfoLYF+e6YBa8p5vYUw3Rgt7IDzCs+57vIZqQlIo62NDpYM0VG6BjWOwnzBczMvbtH8hag==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
- "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "is-array-buffer": "^3.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
- "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.24.0",
- "es-object-atoms": "^1.1.1",
- "get-intrinsic": "^1.3.0",
- "is-string": "^1.1.1",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlast": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
- "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
- "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-shim-unscopables": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
- "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
- "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
- "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
- "es-errors": "^1.3.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
- "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
- "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/async-function": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
- "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axe-core": {
- "version": "4.10.3",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
- "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
- "dev": true,
- "license": "MPL-2.0",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
- "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "dependencies": {
- "streamsearch": "^1.1.0"
- },
- "engines": {
- "node": ">=10.16.0"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001727",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz",
- "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
- "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "color-convert": "^2.0.1",
- "color-string": "^1.9.0"
- },
- "engines": {
- "node": ">=12.5.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/color-string": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
- "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
- "dev": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
- "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
- "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/inspect-js"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
- "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
- "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
- "license": "Apache-2.0",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/es-abstract": {
- "version": "1.24.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
- "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.2",
- "arraybuffer.prototype.slice": "^1.0.4",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "data-view-buffer": "^1.0.2",
- "data-view-byte-length": "^1.0.2",
- "data-view-byte-offset": "^1.0.1",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-set-tostringtag": "^2.1.0",
- "es-to-primitive": "^1.3.0",
- "function.prototype.name": "^1.1.8",
- "get-intrinsic": "^1.3.0",
- "get-proto": "^1.0.1",
- "get-symbol-description": "^1.1.0",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "internal-slot": "^1.1.0",
- "is-array-buffer": "^3.0.5",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.2",
- "is-negative-zero": "^2.0.3",
- "is-regex": "^1.2.1",
- "is-set": "^2.0.3",
- "is-shared-array-buffer": "^1.0.4",
- "is-string": "^1.1.1",
- "is-typed-array": "^1.1.15",
- "is-weakref": "^1.1.1",
- "math-intrinsics": "^1.1.0",
- "object-inspect": "^1.13.4",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.7",
- "own-keys": "^1.0.1",
- "regexp.prototype.flags": "^1.5.4",
- "safe-array-concat": "^1.1.3",
- "safe-push-apply": "^1.0.0",
- "safe-regex-test": "^1.1.0",
- "set-proto": "^1.0.0",
- "stop-iteration-iterator": "^1.1.0",
- "string.prototype.trim": "^1.2.10",
- "string.prototype.trimend": "^1.0.9",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.3",
- "typed-array-byte-length": "^1.0.3",
- "typed-array-byte-offset": "^1.0.4",
- "typed-array-length": "^1.0.7",
- "unbox-primitive": "^1.1.0",
- "which-typed-array": "^1.1.19"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-iterator-helpers": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
- "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.3",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.6",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "iterator.prototype": "^1.1.4",
- "safe-array-concat": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
- "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
- "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "9.30.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz",
- "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.0",
- "@eslint/config-helpers": "^0.3.0",
- "@eslint/core": "^0.14.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.30.1",
- "@eslint/plugin-kit": "^0.3.1",
- "@humanfs/node": "^0.16.6",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.2",
- "@types/estree": "^1.0.6",
- "@types/json-schema": "^7.0.15",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.6",
- "debug": "^4.3.2",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.4.0",
- "eslint-visitor-keys": "^4.2.1",
- "espree": "^10.4.0",
- "esquery": "^1.5.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- },
- "peerDependencies": {
- "jiti": "*"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-config-next": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.2.3.tgz",
- "integrity": "sha512-VDQwbajhNMFmrhLWVyUXCqsGPN+zz5G8Ys/QwFubfsxTIrkqdx3N3x3QPW+pERz8bzGPP0IgEm8cNbZcd8PFRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@next/eslint-plugin-next": "15.2.3",
- "@rushstack/eslint-patch": "^1.10.3",
- "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
- "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.31.0",
- "eslint-plugin-jsx-a11y": "^6.10.0",
- "eslint-plugin-react": "^7.37.0",
- "eslint-plugin-react-hooks": "^5.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
- "typescript": ">=3.3.1"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-typescript": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
- "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.4.0",
- "get-tsconfig": "^4.10.0",
- "is-bun-module": "^2.0.0",
- "stable-hash": "^0.0.5",
- "tinyglobby": "^0.2.13",
- "unrs-resolver": "^1.6.2"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-import-resolver-typescript"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
- "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.32.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
- "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.9",
- "array.prototype.findlastindex": "^1.2.6",
- "array.prototype.flat": "^1.3.3",
- "array.prototype.flatmap": "^1.3.3",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.1",
- "hasown": "^2.0.2",
- "is-core-module": "^2.16.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "object.groupby": "^1.0.3",
- "object.values": "^1.2.1",
- "semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.9",
- "tsconfig-paths": "^3.15.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
- "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-react": {
- "version": "7.37.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
- "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.8",
- "array.prototype.findlast": "^1.2.5",
- "array.prototype.flatmap": "^1.3.3",
- "array.prototype.tosorted": "^1.1.4",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.2.1",
- "estraverse": "^5.3.0",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.9",
- "object.fromentries": "^2.0.8",
- "object.values": "^1.2.1",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.5",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.12",
- "string.prototype.repeat": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
- "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-scope": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
- "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.15.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fastq": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
- "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^4.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.4"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/for-each": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
- "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
- "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "functions-have-names": "^1.2.3",
- "hasown": "^2.0.2",
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
- "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
- "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/has-bigints": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
- "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/internal-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
- "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
- "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/is-async-function": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
- "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
- "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
- "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bun-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
- "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.7.1"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
- "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
- "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
- "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.0",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
- "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
- "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
- "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-regex": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
- "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
- "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
- "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
- "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
- "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-symbols": "^1.1.0",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
- "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakmap": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
- "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
- "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
- "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/iterator.prototype": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
- "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "get-proto": "^1.0.0",
- "has-symbols": "^1.1.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/jotai": {
- "version": "2.12.5",
- "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.12.5.tgz",
- "integrity": "sha512-G8m32HW3lSmcz/4mbqx0hgJIQ0ekndKWiYP7kWVKi0p6saLXdSoye+FZiOFyonnd7Q482LCzm8sMDl7Ar1NWDw==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20.0"
- },
- "peerDependencies": {
- "@types/react": ">=17.0.0",
- "react": ">=17.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "react": {
- "optional": true
- }
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/napi-postinstall": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.0.tgz",
- "integrity": "sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "napi-postinstall": "lib/cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/napi-postinstall"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/next": {
- "version": "15.3.1",
- "resolved": "https://registry.npmjs.org/next/-/next-15.3.1.tgz",
- "integrity": "sha512-8+dDV0xNLOgHlyBxP1GwHGVaNXsmp+2NhZEYrXr24GWLHtt27YrBPbPuHvzlhi7kZNYjeJNR93IF5zfFu5UL0g==",
- "license": "MIT",
- "dependencies": {
- "@next/env": "15.3.1",
- "@swc/counter": "0.1.3",
- "@swc/helpers": "0.5.15",
- "busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001579",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.6"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "15.3.1",
- "@next/swc-darwin-x64": "15.3.1",
- "@next/swc-linux-arm64-gnu": "15.3.1",
- "@next/swc-linux-arm64-musl": "15.3.1",
- "@next/swc-linux-x64-gnu": "15.3.1",
- "@next/swc-linux-x64-musl": "15.3.1",
- "@next/swc-win32-arm64-msvc": "15.3.1",
- "@next/swc-win32-x64-msvc": "15.3.1",
- "sharp": "^0.34.1"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.41.2",
- "babel-plugin-react-compiler": "*",
- "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
- "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "babel-plugin-react-compiler": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
- "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0",
- "has-symbols": "^1.1.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
- "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
- "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
- "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.values": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
- "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/own-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
- "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.6",
- "object-keys": "^1.1.1",
- "safe-push-apply": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
- "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/react": {
- "version": "19.1.0",
- "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
- "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "19.1.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
- "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
- "license": "MIT",
- "dependencies": {
- "scheduler": "^0.26.0"
- },
- "peerDependencies": {
- "react": "^19.1.0"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
- "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
- "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.10",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
- "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.16.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-push-apply": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
- "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-regex-test": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
- "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-regex": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/scheduler": {
- "version": "0.26.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
- "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
- "license": "MIT"
- },
- "node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "devOptional": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-proto": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
- "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/sharp": {
- "version": "0.34.2",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz",
- "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "color": "^4.2.3",
- "detect-libc": "^2.0.4",
- "semver": "^7.7.2"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.34.2",
- "@img/sharp-darwin-x64": "0.34.2",
- "@img/sharp-libvips-darwin-arm64": "1.1.0",
- "@img/sharp-libvips-darwin-x64": "1.1.0",
- "@img/sharp-libvips-linux-arm": "1.1.0",
- "@img/sharp-libvips-linux-arm64": "1.1.0",
- "@img/sharp-libvips-linux-ppc64": "1.1.0",
- "@img/sharp-libvips-linux-s390x": "1.1.0",
- "@img/sharp-libvips-linux-x64": "1.1.0",
- "@img/sharp-libvips-linuxmusl-arm64": "1.1.0",
- "@img/sharp-libvips-linuxmusl-x64": "1.1.0",
- "@img/sharp-linux-arm": "0.34.2",
- "@img/sharp-linux-arm64": "0.34.2",
- "@img/sharp-linux-s390x": "0.34.2",
- "@img/sharp-linux-x64": "0.34.2",
- "@img/sharp-linuxmusl-arm64": "0.34.2",
- "@img/sharp-linuxmusl-x64": "0.34.2",
- "@img/sharp-wasm32": "0.34.2",
- "@img/sharp-win32-arm64": "0.34.2",
- "@img/sharp-win32-ia32": "0.34.2",
- "@img/sharp-win32-x64": "0.34.2"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "is-arrayish": "^0.3.1"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stable-hash": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
- "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/stop-iteration-iterator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
- "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "internal-slot": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/string.prototype.includes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
- "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/string.prototype.matchall": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
- "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "regexp.prototype.flags": "^1.5.3",
- "set-function-name": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.repeat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
- "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
- "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
- "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/styled-jsx": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
- "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
- "license": "MIT",
- "dependencies": {
- "client-only": "0.0.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
- "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.12"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4"
- }
- },
- "node_modules/tsconfig-paths": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
- "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD"
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
- "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
- "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
- "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/unrs-resolver": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.0.tgz",
- "integrity": "sha512-uw3hCGO/RdAEAb4zgJ3C/v6KIAFFOtBoxR86b2Ejc5TnH7HrhTWJR2o0A9ullC3eWMegKQCw/arQ/JivywQzkg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "napi-postinstall": "^0.3.0"
- },
- "funding": {
- "url": "https://opencollective.com/unrs-resolver"
- },
- "optionalDependencies": {
- "@unrs/resolver-binding-android-arm-eabi": "1.11.0",
- "@unrs/resolver-binding-android-arm64": "1.11.0",
- "@unrs/resolver-binding-darwin-arm64": "1.11.0",
- "@unrs/resolver-binding-darwin-x64": "1.11.0",
- "@unrs/resolver-binding-freebsd-x64": "1.11.0",
- "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.0",
- "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.0",
- "@unrs/resolver-binding-linux-arm64-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-arm64-musl": "1.11.0",
- "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-riscv64-musl": "1.11.0",
- "@unrs/resolver-binding-linux-s390x-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-x64-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-x64-musl": "1.11.0",
- "@unrs/resolver-binding-wasm32-wasi": "1.11.0",
- "@unrs/resolver-binding-win32-arm64-msvc": "1.11.0",
- "@unrs/resolver-binding-win32-ia32-msvc": "1.11.0",
- "@unrs/resolver-binding-win32-x64-msvc": "1.11.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
- "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.1",
- "is-number-object": "^1.1.1",
- "is-string": "^1.1.1",
- "is-symbol": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-collection": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
- "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
- "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "for-each": "^0.3.5",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/examples/fal-smart-turn/client/package.json b/examples/fal-smart-turn/client/package.json
deleted file mode 100644
index e63031228..000000000
--- a/examples/fal-smart-turn/client/package.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "my-nextjs-app",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "lint": "next lint"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/client-react": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0",
- "next": "15.3.1",
- "react": "^19.0.0",
- "react-dom": "^19.0.0"
- },
- "devDependencies": {
- "@eslint/eslintrc": "^3",
- "@types/node": "^20",
- "@types/react": "^19",
- "@types/react-dom": "^19",
- "eslint": "^9",
- "eslint-config-next": "15.2.3",
- "typescript": "^5"
- }
-}
diff --git a/examples/fal-smart-turn/client/public/favicon.svg b/examples/fal-smart-turn/client/public/favicon.svg
deleted file mode 100644
index a0260a809..000000000
--- a/examples/fal-smart-turn/client/public/favicon.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/examples/fal-smart-turn/client/src/app/api/connect/route.ts b/examples/fal-smart-turn/client/src/app/api/connect/route.ts
deleted file mode 100644
index 18b4f535a..000000000
--- a/examples/fal-smart-turn/client/src/app/api/connect/route.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { NextResponse, NextRequest } from 'next/server';
-
-export async function POST(request: NextRequest) {
- const { MY_CUSTOM_DATA } = await request.json();
-
- try {
- const response = await fetch(
- `https://api.pipecat.daily.co/v1/public/${process.env.AGENT_NAME}/start`,
- {
- method: 'POST',
- headers: {
- Authorization: `Bearer ${process.env.PIPECAT_CLOUD_API_KEY}`,
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- // Create Daily room
- createDailyRoom: true,
- // Optionally set Daily room properties
- dailyRoomProperties: { start_video_off: true },
- // Optionally pass custom data to the bot
- body: { MY_CUSTOM_DATA },
- }),
- }
- );
-
- if (!response.ok) {
- throw new Error(`API responded with status: ${response.status}`);
- }
-
- const data = await response.json();
-
- // Transform the response to match what RTVI client expects
- return NextResponse.json({
- room_url: data.dailyRoom,
- token: data.dailyToken,
- });
- } catch (error) {
- console.error('API error:', error);
- return NextResponse.json(
- { error: 'Failed to start agent' },
- { status: 500 }
- );
- }
-}
diff --git a/examples/fal-smart-turn/client/src/app/globals.css b/examples/fal-smart-turn/client/src/app/globals.css
deleted file mode 100644
index 568839735..000000000
--- a/examples/fal-smart-turn/client/src/app/globals.css
+++ /dev/null
@@ -1,82 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.app {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-.disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-.video-container {
- width: 640px;
- height: 360px;
- background-color: #ddd;
- margin-bottom: 20px;
- border-radius: 8px;
- overflow: hidden;
-}
-
-.video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.mic-enabled {
- background-color: #4caf50;
- color: white;
-}
-
-.mic-disabled {
- background-color: #f44336;
- color: white;
-}
diff --git a/examples/fal-smart-turn/client/src/app/layout.tsx b/examples/fal-smart-turn/client/src/app/layout.tsx
deleted file mode 100644
index 49e632f96..000000000
--- a/examples/fal-smart-turn/client/src/app/layout.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import './globals.css';
-import { PipecatProvider } from '@/providers/PipecatProvider';
-
-export const metadata = {
- title: 'Pipecat React Client',
- description: 'Pipecat RTVI Client using Next.js',
- icons: {
- icon: [{ url: '/favicon.svg', type: 'image/svg+xml' }],
- },
-};
-
-export default function RootLayout({
- children,
-}: {
- children: React.ReactNode;
-}) {
- return (
-
-
-
-
-
- {children}
-
-
- );
-}
diff --git a/examples/fal-smart-turn/client/src/app/page.tsx b/examples/fal-smart-turn/client/src/app/page.tsx
deleted file mode 100644
index cd65c32e5..000000000
--- a/examples/fal-smart-turn/client/src/app/page.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-'use client';
-
-import {
- PipecatClientAudio,
- PipecatClientVideo,
- usePipecatClientTransportState,
-} from '@pipecat-ai/client-react';
-import { ConnectButton } from '../components/ConnectButton';
-import { StatusDisplay } from '../components/StatusDisplay';
-import { DebugDisplay } from '../components/DebugDisplay';
-
-function BotVideo() {
- const transportState = usePipecatClientTransportState();
- const isConnected = transportState !== 'disconnected';
-
- return (
-
- );
-}
-
-export default function Home() {
- return (
-
- );
-}
diff --git a/examples/fal-smart-turn/client/src/components/ConnectButton.tsx b/examples/fal-smart-turn/client/src/components/ConnectButton.tsx
deleted file mode 100644
index 8c16985ab..000000000
--- a/examples/fal-smart-turn/client/src/components/ConnectButton.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import {
- usePipecatClient,
- usePipecatClientTransportState,
-} from '@pipecat-ai/client-react';
-
-// Get the API base URL from environment variables
-// Default to "/api" if not specified
-// "/api" is the default for Next.js API routes and used
-// for the Pipecat Cloud deployed agent
-const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL || '/api';
-
-export function ConnectButton() {
- const client = usePipecatClient();
- const transportState = usePipecatClientTransportState();
- const isConnected = ['connected', 'ready'].includes(transportState);
-
- const handleClick = async () => {
- if (!client) {
- console.error('RTVI client is not initialized');
- return;
- }
-
- try {
- if (isConnected) {
- await client.disconnect();
- } else {
- await client.connect({
- endpoint: `${API_BASE_URL}/connect`,
- requestData: { foo: 'bar' },
- });
- }
- } catch (error) {
- console.error('Connection error:', error);
- }
- };
-
- return (
-
-
- {isConnected ? 'Disconnect' : 'Connect'}
-
-
- );
-}
diff --git a/examples/fal-smart-turn/client/src/components/DebugDisplay.css b/examples/fal-smart-turn/client/src/components/DebugDisplay.css
deleted file mode 100644
index a9ecc66e2..000000000
--- a/examples/fal-smart-turn/client/src/components/DebugDisplay.css
+++ /dev/null
@@ -1,26 +0,0 @@
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-.debug-log {
- height: 200px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
-
-.debug-log div {
- margin-bottom: 4px;
-}
diff --git a/examples/fal-smart-turn/client/src/components/DebugDisplay.tsx b/examples/fal-smart-turn/client/src/components/DebugDisplay.tsx
deleted file mode 100644
index 6a4aba16c..000000000
--- a/examples/fal-smart-turn/client/src/components/DebugDisplay.tsx
+++ /dev/null
@@ -1,171 +0,0 @@
-import { useRef, useCallback } from 'react';
-import {
- Participant,
- RTVIEvent,
- TransportState,
- TranscriptData,
- BotLLMTextData,
-} from '@pipecat-ai/client-js';
-import { usePipecatClient, useRTVIClientEvent } from '@pipecat-ai/client-react';
-import './DebugDisplay.css';
-
-interface SmartTurnResultData {
- type: 'smart_turn_result';
- is_complete: boolean;
- probability: number;
- inference_time_ms: number; // Pure model inference time
- server_total_time_ms: number; // Server processing time
- e2e_processing_time_ms: number; // Complete end-to-end time
-}
-
-export function DebugDisplay() {
- const debugLogRef = useRef(null);
- const client = usePipecatClient();
-
- const log = useCallback((message: string) => {
- if (!debugLogRef.current) return;
-
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
-
- // Add styling based on message type
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3'; // blue for user
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50'; // green for bot
- } else if (message.includes('Smart Turn:')) {
- entry.style.color = '#9C27B0'; // purple for smart turn
- }
-
- debugLogRef.current.appendChild(entry);
- debugLogRef.current.scrollTop = debugLogRef.current.scrollHeight;
- }, []);
-
- // Log transport state changes
- useRTVIClientEvent(
- RTVIEvent.TransportStateChanged,
- useCallback(
- (state: TransportState) => {
- log(`Transport state changed: ${state}`);
- },
- [log]
- )
- );
-
- // Log bot connection events
- useRTVIClientEvent(
- RTVIEvent.BotConnected,
- useCallback(
- (participant?: Participant) => {
- log(`Bot connected: ${JSON.stringify(participant)}`);
- },
- [log]
- )
- );
-
- useRTVIClientEvent(
- RTVIEvent.BotDisconnected,
- useCallback(
- (participant?: Participant) => {
- log(`Bot disconnected: ${JSON.stringify(participant)}`);
- },
- [log]
- )
- );
-
- // Log track events
- useRTVIClientEvent(
- RTVIEvent.TrackStarted,
- useCallback(
- (track: MediaStreamTrack, participant?: Participant) => {
- log(
- `Track started: ${track.kind} from ${participant?.name || 'unknown'}`
- );
- },
- [log]
- )
- );
-
- useRTVIClientEvent(
- RTVIEvent.TrackStopped,
- useCallback(
- (track: MediaStreamTrack, participant?: Participant) => {
- log(
- `Track stopped: ${track.kind} from ${participant?.name || 'unknown'}`
- );
- },
- [log]
- )
- );
-
- // Log bot ready state and check tracks
- useRTVIClientEvent(
- RTVIEvent.BotReady,
- useCallback(() => {
- log(`Bot ready`);
-
- if (!client) return;
-
- const tracks = client.tracks();
- log(
- `Available tracks: ${JSON.stringify({
- local: {
- audio: !!tracks.local.audio,
- video: !!tracks.local.video,
- },
- bot: {
- audio: !!tracks.bot?.audio,
- video: !!tracks.bot?.video,
- },
- })}`
- );
- }, [client, log])
- );
-
- // Log transcripts
- useRTVIClientEvent(
- RTVIEvent.UserTranscript,
- useCallback(
- (data: TranscriptData) => {
- // Only log final transcripts
- if (data.final) {
- log(`User: ${data.text}`);
- }
- },
- [log]
- )
- );
-
- useRTVIClientEvent(
- RTVIEvent.BotTranscript,
- useCallback(
- (data: BotLLMTextData) => {
- log(`Bot: ${data.text}`);
- },
- [log]
- )
- );
-
- useRTVIClientEvent(
- RTVIEvent.ServerMessage,
- useCallback(
- (data: SmartTurnResultData) => {
- log(
- `Smart Turn:
- ${data.is_complete ? 'COMPLETE' : 'INCOMPLETE'},
- Probability: ${(data.probability * 100).toFixed(1)}%,
- Model inference: ${data.inference_time_ms?.toFixed(2) || 'N/A'}ms,
- Server processing: ${data.server_total_time_ms?.toFixed(2) || 'N/A'}ms,
- End-to-end: ${data.e2e_processing_time_ms?.toFixed(2) || 'N/A'}ms`
- );
- },
- [log]
- )
- );
- return (
-
- );
-}
diff --git a/examples/fal-smart-turn/client/src/components/StatusDisplay.tsx b/examples/fal-smart-turn/client/src/components/StatusDisplay.tsx
deleted file mode 100644
index f7369e8f7..000000000
--- a/examples/fal-smart-turn/client/src/components/StatusDisplay.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import { usePipecatClientTransportState } from '@pipecat-ai/client-react';
-
-export function StatusDisplay() {
- const transportState = usePipecatClientTransportState();
-
- return (
-
- Status: {transportState}
-
- );
-}
diff --git a/examples/fal-smart-turn/client/src/providers/PipecatProvider.tsx b/examples/fal-smart-turn/client/src/providers/PipecatProvider.tsx
deleted file mode 100644
index 771a78b02..000000000
--- a/examples/fal-smart-turn/client/src/providers/PipecatProvider.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-'use client';
-
-import { PipecatClient } from '@pipecat-ai/client-js';
-import { DailyTransport } from '@pipecat-ai/daily-transport';
-import { PipecatClientProvider } from '@pipecat-ai/client-react';
-import { PropsWithChildren, useEffect, useState } from 'react';
-
-export function PipecatProvider({ children }: PropsWithChildren) {
- const [client, setClient] = useState(null);
-
- useEffect(() => {
- const pcClient = new PipecatClient({
- transport: new DailyTransport(),
- enableMic: true,
- enableCam: false,
- });
-
- setClient(pcClient);
- }, []);
-
- if (!client) {
- return null;
- }
-
- return (
- {children}
- );
-}
diff --git a/examples/fal-smart-turn/client/tsconfig.json b/examples/fal-smart-turn/client/tsconfig.json
deleted file mode 100644
index 64e9ef605..000000000
--- a/examples/fal-smart-turn/client/tsconfig.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2017",
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "plugins": [
- {
- "name": "next"
- }
- ],
- "paths": {
- "@/components/*": ["./src/components/*"],
- "@/providers/*": ["./src/providers/*"]
- }
- },
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
- "exclude": ["node_modules"]
-}
diff --git a/examples/fal-smart-turn/server/Dockerfile b/examples/fal-smart-turn/server/Dockerfile
deleted file mode 100644
index 48b7ff64e..000000000
--- a/examples/fal-smart-turn/server/Dockerfile
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM dailyco/pipecat-base:latest
-
-COPY ./requirements.txt requirements.txt
-
-RUN pip install --no-cache-dir --upgrade -r requirements.txt
-
-COPY ./assets assets
-COPY ./bot.py bot.py
diff --git a/examples/fal-smart-turn/server/assets/robot01.png b/examples/fal-smart-turn/server/assets/robot01.png
deleted file mode 100644
index 3864411dc..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot01.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot010.png b/examples/fal-smart-turn/server/assets/robot010.png
deleted file mode 100644
index e389e0933..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot010.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot011.png b/examples/fal-smart-turn/server/assets/robot011.png
deleted file mode 100644
index c0f0633f3..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot011.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot012.png b/examples/fal-smart-turn/server/assets/robot012.png
deleted file mode 100644
index e5fb2a7d1..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot012.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot013.png b/examples/fal-smart-turn/server/assets/robot013.png
deleted file mode 100644
index cd62a2005..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot013.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot014.png b/examples/fal-smart-turn/server/assets/robot014.png
deleted file mode 100644
index 516ca4e8b..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot014.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot015.png b/examples/fal-smart-turn/server/assets/robot015.png
deleted file mode 100644
index 9b9242691..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot015.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot016.png b/examples/fal-smart-turn/server/assets/robot016.png
deleted file mode 100644
index cbd2d9d6f..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot016.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot017.png b/examples/fal-smart-turn/server/assets/robot017.png
deleted file mode 100644
index 5780fa27a..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot017.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot018.png b/examples/fal-smart-turn/server/assets/robot018.png
deleted file mode 100644
index 5c983704d..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot018.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot019.png b/examples/fal-smart-turn/server/assets/robot019.png
deleted file mode 100644
index c0f9bef58..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot019.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot02.png b/examples/fal-smart-turn/server/assets/robot02.png
deleted file mode 100644
index 267969849..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot02.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot020.png b/examples/fal-smart-turn/server/assets/robot020.png
deleted file mode 100644
index 88bcfa04a..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot020.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot021.png b/examples/fal-smart-turn/server/assets/robot021.png
deleted file mode 100644
index 5d30e6029..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot021.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot022.png b/examples/fal-smart-turn/server/assets/robot022.png
deleted file mode 100644
index 0e2d412ed..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot022.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot023.png b/examples/fal-smart-turn/server/assets/robot023.png
deleted file mode 100644
index d4bc03938..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot023.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot024.png b/examples/fal-smart-turn/server/assets/robot024.png
deleted file mode 100644
index 62f60c815..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot024.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot025.png b/examples/fal-smart-turn/server/assets/robot025.png
deleted file mode 100644
index c2ac6639e..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot025.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot03.png b/examples/fal-smart-turn/server/assets/robot03.png
deleted file mode 100644
index 1cb8c76d5..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot03.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot04.png b/examples/fal-smart-turn/server/assets/robot04.png
deleted file mode 100644
index 155d19f47..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot04.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot05.png b/examples/fal-smart-turn/server/assets/robot05.png
deleted file mode 100644
index b5a5c4b79..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot05.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot06.png b/examples/fal-smart-turn/server/assets/robot06.png
deleted file mode 100644
index b5733db5f..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot06.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot07.png b/examples/fal-smart-turn/server/assets/robot07.png
deleted file mode 100644
index 8b5d57655..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot07.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot08.png b/examples/fal-smart-turn/server/assets/robot08.png
deleted file mode 100644
index f7600a559..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot08.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/assets/robot09.png b/examples/fal-smart-turn/server/assets/robot09.png
deleted file mode 100644
index 16c1a98ba..000000000
Binary files a/examples/fal-smart-turn/server/assets/robot09.png and /dev/null differ
diff --git a/examples/fal-smart-turn/server/bot.py b/examples/fal-smart-turn/server/bot.py
deleted file mode 100644
index fee3c624f..000000000
--- a/examples/fal-smart-turn/server/bot.py
+++ /dev/null
@@ -1,298 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from PIL import Image
-from pipecatcloud.agent import DailySessionArguments
-
-from pipecat.audio.turn.smart_turn.fal_smart_turn import FalSmartTurnAnalyzer
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.audio.vad.vad_analyzer import VADParams
-from pipecat.frames.frames import (
- BotStartedSpeakingFrame,
- BotStoppedSpeakingFrame,
- Frame,
- MetricsFrame,
- OutputImageRawFrame,
- SpriteFrame,
-)
-from pipecat.metrics.metrics import SmartTurnMetricsData
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import (
- RTVIConfig,
- RTVIObserver,
- RTVIProcessor,
- RTVIServerMessageFrame,
-)
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.google.llm import GoogleLLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-# Check if we're in local development mode
-LOCAL = os.getenv("LOCAL_RUN")
-
-logger.remove()
-logger.add(sys.stderr, level="DEBUG")
-
-sprites = []
-script_dir = os.path.dirname(__file__)
-
-# Load sequential animation frames
-for i in range(1, 26):
- # Build the full path to the image file
- full_path = os.path.join(script_dir, f"assets/robot0{i}.png")
- # Get the filename without the extension to use as the dictionary key
- # Open the image and convert it to bytes
- with Image.open(full_path) as img:
- sprites.append(OutputImageRawFrame(image=img.tobytes(), size=img.size, format=img.format))
-
-# Create a smooth animation by adding reversed frames
-flipped = sprites[::-1]
-sprites.extend(flipped)
-
-# Define static and animated states
-quiet_frame = sprites[0] # Static frame for when bot is listening
-talking_frame = SpriteFrame(images=sprites) # Animation sequence for when bot is talking
-
-
-class TalkingAnimation(FrameProcessor):
- """Manages the bot's visual animation states.
-
- Switches between static (listening) and animated (talking) states based on
- the bot's current speaking status.
- """
-
- def __init__(self):
- super().__init__()
- self._is_talking = False
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- """Process incoming frames and update animation state.
-
- Args:
- frame: The incoming frame to process
- direction: The direction of frame flow in the pipeline
- """
- await super().process_frame(frame, direction)
-
- # Switch to talking animation when bot starts speaking
- if isinstance(frame, BotStartedSpeakingFrame):
- if not self._is_talking:
- await self.push_frame(talking_frame)
- self._is_talking = True
- # Return to static frame when bot stops speaking
- elif isinstance(frame, BotStoppedSpeakingFrame):
- await self.push_frame(quiet_frame)
- self._is_talking = False
-
- await self.push_frame(frame, direction)
-
-
-class SmartTurnMetricsProcessor(FrameProcessor):
- """Processes the metrics data from Smart Turn Analyzer.
-
- This processor is responsible for handling smart turn metrics data
- and forwarding it to the client UI via RTVI.
- """
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- """Process incoming frames and handle Smart Turn metrics.
-
- Args:
- frame: The incoming frame to process
- direction: The direction of frame flow in the pipeline
- """
- await super().process_frame(frame, direction)
-
- # Handle Smart Turn metrics
- if isinstance(frame, MetricsFrame):
- for metrics in frame.data:
- if isinstance(metrics, SmartTurnMetricsData):
- logger.info(f"Smart Turn metrics: {metrics}")
-
- # Create a payload with the smart turn prediction data
- smart_turn_data = {
- "type": "smart_turn_result",
- "is_complete": metrics.is_complete,
- "probability": metrics.probability,
- "inference_time_ms": metrics.inference_time_ms,
- "server_total_time_ms": metrics.server_total_time_ms,
- "e2e_processing_time_ms": metrics.e2e_processing_time_ms,
- }
-
- # Send the data to the client via RTVI
- rtvi_frame = RTVIServerMessageFrame(data=smart_turn_data)
- await self.push_frame(rtvi_frame)
-
- await self.push_frame(frame, direction)
-
-
-async def main(transport: DailyTransport):
- # Configure your STT, LLM, and TTS services here
- # Swap out different processors or properties to customize your bot
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
- llm = GoogleLLMService(api_key=os.getenv("GOOGLE_API_KEY"))
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- # Set up the initial context for the conversation
- # You can specified initial system and assistant messages here
- messages = [
- {
- "role": "system",
- "content": "You are Chatbot, a friendly, helpful robot. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way, but keep your responses brief. Start by introducing yourself.",
- },
- ]
-
- # This sets up the LLM context by providing messages and tools
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- ta = TalkingAnimation()
- smart_turn_metrics_processor = SmartTurnMetricsProcessor()
-
- # RTVI events for Pipecat client UI
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- # A core voice AI pipeline
- # Add additional processors to customize the bot's behavior
- pipeline = Pipeline(
- [
- transport.input(),
- rtvi,
- smart_turn_metrics_processor,
- stt,
- context_aggregator.user(),
- llm,
- tts,
- ta,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- logger.debug("Client ready event received")
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.info("First participant joined: {}", participant["id"])
- # Push a static frame to show the bot is listening
- await task.queue_frame(quiet_frame)
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.info("Participant left: {}", participant)
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False, force_gc=True)
-
- await runner.run(task)
-
-
-async def bot(args: DailySessionArguments):
- """Main bot entry point compatible with the FastAPI route handler.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: The configuration object from the request body
- session_id: The session ID for logging
- """
- from pipecat.audio.filters.krisp_filter import KrispFilter
-
- logger.info(f"Bot process initialized {args.room_url} {args.token}")
- async with aiohttp.ClientSession() as session:
- transport = DailyTransport(
- args.room_url,
- args.token,
- "Smart Turn Bot",
- params=DailyParams(
- audio_in_enabled=True,
- audio_in_filter=KrispFilter(),
- audio_out_enabled=True,
- video_out_enabled=True,
- video_out_width=1024,
- video_out_height=576,
- vad_analyzer=SileroVADAnalyzer(params=VADParams(stop_secs=0.2)),
- turn_analyzer=FalSmartTurnAnalyzer(
- api_key=os.getenv("FAL_SMART_TURN_API_KEY"), aiohttp_session=session
- ),
- ),
- )
-
- try:
- await main(transport)
- logger.info("Bot process completed")
- except Exception as e:
- logger.exception(f"Error in bot process: {str(e)}")
- raise
-
-
-# Local development
-async def local_daily():
- """Daily transport for local development."""
- from runner import configure
-
- try:
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
- transport = DailyTransport(
- room_url,
- token,
- "Smart Turn Bot",
- params=DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=True,
- video_out_width=1024,
- video_out_height=576,
- vad_analyzer=SileroVADAnalyzer(params=VADParams(stop_secs=0.2)),
- turn_analyzer=FalSmartTurnAnalyzer(
- api_key=os.getenv("FAL_SMART_TURN_API_KEY"), aiohttp_session=session
- ),
- ),
- )
-
- await main(transport)
- except Exception as e:
- logger.exception(f"Error in local development mode: {e}")
-
-
-# Local development entry point
-if LOCAL and __name__ == "__main__":
- try:
- asyncio.run(local_daily())
- except Exception as e:
- logger.exception(f"Failed to run in local mode: {e}")
diff --git a/examples/fal-smart-turn/server/build.sh b/examples/fal-smart-turn/server/build.sh
deleted file mode 100755
index 346ebc267..000000000
--- a/examples/fal-smart-turn/server/build.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-set -e
-
-VERSION="0.1"
-DOCKER_USERNAME=""
-AGENT_NAME="pcc-smart-turn"
-
-# Build the Docker image with the correct context
-echo "Building Docker image..."
-docker build --platform=linux/arm64 -t "$DOCKER_USERNAME/$AGENT_NAME:$VERSION" -t "$DOCKER_USERNAME/$AGENT_NAME:latest" .
-
-# Push the Docker images
-echo "Pushing Docker image $DOCKER_USERNAME/$AGENT_NAME:$VERSION..."
-docker push "$DOCKER_USERNAME/$AGENT_NAME:$VERSION"
-
-echo "Pushing Docker image $DOCKER_USERNAME/$AGENT_NAME:latest..."
-docker push "$DOCKER_USERNAME/$AGENT_NAME:latest"
-
-echo "Successfully built and pushed $DOCKER_USERNAME/$AGENT_NAME:$VERSION and $DOCKER_USERNAME/$AGENT_NAME:latest"
\ No newline at end of file
diff --git a/examples/fal-smart-turn/server/env.example b/examples/fal-smart-turn/server/env.example
deleted file mode 100644
index bd12600ad..000000000
--- a/examples/fal-smart-turn/server/env.example
+++ /dev/null
@@ -1,5 +0,0 @@
-GOOGLE_API_KEY=
-CARTESIA_API_KEY=
-DEEPGRAM_API_KEY=
-DAILY_API_KEY=
-FAL_SMART_TURN_API_KEY=
\ No newline at end of file
diff --git a/examples/fal-smart-turn/server/pcc-deploy.toml b/examples/fal-smart-turn/server/pcc-deploy.toml
deleted file mode 100644
index c2560f049..000000000
--- a/examples/fal-smart-turn/server/pcc-deploy.toml
+++ /dev/null
@@ -1,7 +0,0 @@
-agent_name = "pcc-smart-turn"
-image = "your-username/pcc-smart-turn:0.1"
-secret_set = "pcc-smart-turn-secrets"
-enable_krisp = true
-
-[scaling]
- min_instances = 0
diff --git a/examples/fal-smart-turn/server/requirements.txt b/examples/fal-smart-turn/server/requirements.txt
deleted file mode 100644
index d5e07f538..000000000
--- a/examples/fal-smart-turn/server/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-pipecatcloud
-pipecat-ai[google,daily,deepgram,cartesia,silero]
-python-dotenv
diff --git a/examples/fal-smart-turn/server/runner.py b/examples/fal-smart-turn/server/runner.py
deleted file mode 100644
index 9e050c997..000000000
--- a/examples/fal-smart-turn/server/runner.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- """Configure the Daily room and Daily REST helper."""
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/fal-smart-turn/server/server.py b/examples/fal-smart-turn/server/server.py
deleted file mode 100644
index 97556b61a..000000000
--- a/examples/fal-smart-turn/server/server.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""RTVI Bot Server Implementation.
-
-This FastAPI server manages RTVI bot instances and provides endpoints for both
-direct browser access and RTVI client connections. It handles:
-- Creating Daily rooms
-- Managing bot processes
-- Providing connection credentials
-- Monitoring bot status
-
-Requirements:
-- Daily API key (set in .env file)
-- Python 3.10+
-- FastAPI
-- Running bot implementation
-"""
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-from typing import Any, Dict
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-# Load environment variables from .env file
-load_dotenv(override=True)
-
-# Maximum number of bot instances allowed per room
-MAX_BOTS_PER_ROOM = 1
-
-# Dictionary to track bot processes: {pid: (process, room_url)}
-bot_procs = {}
-
-# Store Daily API helpers
-daily_helpers = {}
-
-
-def cleanup():
- """Cleanup function to terminate all bot processes.
-
- Called during server shutdown.
- """
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """FastAPI lifespan manager that handles startup and shutdown tasks.
-
- - Creates aiohttp session
- - Initializes Daily API helper
- - Cleans up resources on shutdown
- """
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-# Initialize FastAPI app with lifespan manager
-app = FastAPI(lifespan=lifespan)
-
-# Configure CORS to allow requests from any origin
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-async def create_room_and_token() -> tuple[str, str]:
- """Helper function to create a Daily room and generate an access token.
-
- Returns:
- tuple[str, str]: A tuple containing (room_url, token)
-
- Raises:
- HTTPException: If room creation or token generation fails
- """
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- if not room.url:
- raise HTTPException(status_code=500, detail="Failed to create room")
-
- token = await daily_helpers["rest"].get_token(room.url)
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- return room.url, token
-
-
-@app.get("/")
-async def start_agent(request: Request):
- """Endpoint for direct browser access to the bot.
-
- Creates a room, starts a bot instance, and redirects to the Daily room URL.
-
- Returns:
- RedirectResponse: Redirects to the Daily room URL
-
- Raises:
- HTTPException: If room creation, token generation, or bot startup fails
- """
- print("Creating room")
- room_url, token = await create_room_and_token()
- print(f"Room URL: {room_url}")
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room_url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limit reached for room: {room_url}")
-
- # Spawn a new bot process
- try:
- proc = subprocess.Popen(
- [f"python3 bot.py -u {room_url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room_url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room_url)
-
-
-@app.post("/connect")
-async def rtvi_connect(request: Request) -> Dict[Any, Any]:
- """RTVI connect endpoint that creates a room and returns connection credentials.
-
- This endpoint is called by RTVI clients to establish a connection.
-
- Returns:
- Dict[Any, Any]: Authentication bundle containing room_url and token
-
- Raises:
- HTTPException: If room creation, token generation, or bot startup fails
- """
- print("Creating room for RTVI connection")
- room_url, token = await create_room_and_token()
- print(f"Room URL: {room_url}")
-
- # Start the bot process
- try:
- proc = subprocess.Popen(
- [f"python3 -m bot -u {room_url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room_url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- # Return the authentication bundle in format expected by DailyTransport
- return {"room_url": room_url, "token": token}
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- """Get the status of a specific bot process.
-
- Args:
- pid (int): Process ID of the bot
-
- Returns:
- JSONResponse: Status information for the bot
-
- Raises:
- HTTPException: If the specified bot process is not found
- """
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- status = "running" if proc[0].poll() is None else "finished"
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- # Parse command line arguments for server configuration
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Storyteller FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- # Start the FastAPI server
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/freeze-test/README.md b/examples/freeze-test/README.md
deleted file mode 100644
index 4bbc8deae..000000000
--- a/examples/freeze-test/README.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Freeze Test Client
-
-The purpose of this example is to create an environment for testing the bot and try to create freezing conditions.
-
-### Approach 1: Server-Side Testing with `SimulateFreezeInput`
-
-- Utilize only the bot `freeze_test_bot.py` with the `SimulateFreezeInput` processor. This input continuously injects frames, simulating user speech interruptions at random intervals.
-- This approach excludes the use of input transport and speech-to-text (STT) functionalities.
-
-### Approach 2: Server-Side with TypeScript Client
-
-- Combine server-side operations with a TypeScript client.
-- The client initially records a segment of audio, e.g., 5โ10 seconds long. It can be anything.
-- After that, it replays this recorded audio to the server at random intervals, mimicking user input interruptions.
-- This helps testing interruptions in the pipeline as if real users were interacting with the bot.
-
-## Setup
-
-Follow these steps to set up and run the Freeze Test Client:
-
-1. **Run the Bot Server**
- - Set up and activate your virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
- - Install dependencies:
- ```bash
- pip install -r requirements.txt
- ```
-
- - Create your `.env` file and set your env vars:
- ```bash
- cp env.example .env
- ```
-
- - Run the server:
- ```bash
- python freeze_test_bot.py
- ```
-
-2. **Navigate to the Client Directory**
- ```bash
- cd client
- ```
-
-3. **Install Dependencies**
- ```bash
- npm install
- ```
-
-4. **Run the Client Application**
- ```bash
- npm run dev
- ```
-
-5. **Access the Client in Your Browser**
- Visit [http://localhost:5173](http://localhost:5173) to interact with the Freeze Test Client.
diff --git a/examples/freeze-test/client/index.html b/examples/freeze-test/client/index.html
deleted file mode 100644
index 843ade882..000000000
--- a/examples/freeze-test/client/index.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
- AI Chatbot
-
-
-
-
-
-
- Transport: Disconnected
-
-
- Connect
- Disconnect
-
-
-
-
- Playing audio:
-
-
- Start
- Stop
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/freeze-test/client/package-lock.json b/examples/freeze-test/client/package-lock.json
deleted file mode 100644
index f8157d4e1..000000000
--- a/examples/freeze-test/client/package-lock.json
+++ /dev/null
@@ -1,1770 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@pipecat-ai/client-js": "^0.4.0",
- "@pipecat-ai/websocket-transport": "^0.4.1",
- "protobufjs": "^7.4.0"
- },
- "devDependencies": {
- "@types/node": "^22.15.30",
- "@types/protobufjs": "^6.0.0",
- "@vitejs/plugin-react-swc": "^3.10.1",
- "typescript": "^5.8.3",
- "vite": "^6.3.5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bufbuild/protobuf": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.5.2.tgz",
- "integrity": "sha512-foZ7qr0IsUBjzWIq+SuBLfdQCpJ1j8cTuNNT4owngTHoN5KsJb8L9t65fzz7SCeSWzescoOil/0ldqiL041ABg==",
- "license": "(Apache-2.0 AND BSD-3-Clause)"
- },
- "node_modules/@bufbuild/protoplugin": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-2.5.2.tgz",
- "integrity": "sha512-7d/NUae/ugs/qgHEYOwkVWGDE3Bf/xjuGviVFs38+MLRdwiHNTiuvzPVwuIPo/1wuZCZn3Nax1cg1owLuY72xw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@bufbuild/protobuf": "2.5.2",
- "@typescript/vfs": "^1.5.2",
- "typescript": "5.4.5"
- }
- },
- "node_modules/@bufbuild/protoplugin/node_modules/typescript": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
- "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.79.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.79.0.tgz",
- "integrity": "sha512-Ii/Zi6cfTl2EZBpX8msRPNkkCHcajA+ErXpbN2Xe2KySd1Nb4IzC/QWJlSl9VA9pIlYPQicRTDoZnoym/0uEAw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
- "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
- "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
- "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
- "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
- "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
- "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
- "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
- "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
- "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
- "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
- "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
- "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
- "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
- "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
- "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
- "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
- "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
- "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
- "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
- "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
- "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
- "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
- "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
- "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
- "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-0.4.0.tgz",
- "integrity": "sha512-O2EgCqt2cAmp21Z6dXz88zgW845HcsfE//qZghaKOt0Z8xPbhidbVbuOX5iajrYgGRqlnXInYiJ9nN2zY6CUJw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/websocket-transport": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/websocket-transport/-/websocket-transport-0.4.1.tgz",
- "integrity": "sha512-/qdMz1IGV+rJ0qi4UE84XKVZu2VqyIh9J7RgNkzS8nEZiUVwaclrVMjKFgwPqwqKi3ik3h2oucPa/u+8s7Tleg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.79.0",
- "@protobuf-ts/plugin": "^2.11.0",
- "@protobuf-ts/runtime": "^2.11.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~0.4.0"
- }
- },
- "node_modules/@protobuf-ts/plugin": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin/-/plugin-2.11.0.tgz",
- "integrity": "sha512-Y+p4Axrk3thxws4BVSIO+x4CKWH2c8k3K+QPrp6Oq8agdsXPL/uwsMTIdpTdXIzTaUEZFASJL9LU56pob5GTHg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@bufbuild/protobuf": "^2.4.0",
- "@bufbuild/protoplugin": "^2.4.0",
- "@protobuf-ts/protoc": "^2.11.0",
- "@protobuf-ts/runtime": "^2.11.0",
- "@protobuf-ts/runtime-rpc": "^2.11.0",
- "typescript": "^3.9"
- },
- "bin": {
- "protoc-gen-dump": "bin/protoc-gen-dump",
- "protoc-gen-ts": "bin/protoc-gen-ts"
- }
- },
- "node_modules/@protobuf-ts/plugin/node_modules/typescript": {
- "version": "3.9.10",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
- "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/@protobuf-ts/protoc": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/protoc/-/protoc-2.11.0.tgz",
- "integrity": "sha512-GYfmv1rjZ/7MWzUqMszhdXiuoa4Js/j6zCbcxFmeThBBUhbrXdPU42vY+QVCHL9PvAMXO+wEhUfPWYdd1YgnlA==",
- "license": "Apache-2.0",
- "bin": {
- "protoc": "protoc.js"
- }
- },
- "node_modules/@protobuf-ts/runtime": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.11.0.tgz",
- "integrity": "sha512-DfpRpUiNvPC3Kj48CmlU4HaIEY1Myh++PIumMmohBAk8/k0d2CkxYxJfPyUAxfuUfl97F4AvuCu1gXmfOG7OJQ==",
- "license": "(Apache-2.0 AND BSD-3-Clause)"
- },
- "node_modules/@protobuf-ts/runtime-rpc": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.11.0.tgz",
- "integrity": "sha512-g/oMPym5LjVyCc3nlQc6cHer0R3CyleBos4p7CjRNzdKuH/FlRXzfQYo6EN5uv8vLtn7zEK9Cy4YBKvHStIaag==",
- "license": "Apache-2.0",
- "dependencies": {
- "@protobuf-ts/runtime": "^2.11.0"
- }
- },
- "node_modules/@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "node_modules/@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.9",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz",
- "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.42.0.tgz",
- "integrity": "sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.42.0.tgz",
- "integrity": "sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.42.0.tgz",
- "integrity": "sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.42.0.tgz",
- "integrity": "sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.42.0.tgz",
- "integrity": "sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.42.0.tgz",
- "integrity": "sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.42.0.tgz",
- "integrity": "sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.42.0.tgz",
- "integrity": "sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.42.0.tgz",
- "integrity": "sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.42.0.tgz",
- "integrity": "sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.42.0.tgz",
- "integrity": "sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.42.0.tgz",
- "integrity": "sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.42.0.tgz",
- "integrity": "sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.42.0.tgz",
- "integrity": "sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.42.0.tgz",
- "integrity": "sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.42.0.tgz",
- "integrity": "sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.42.0.tgz",
- "integrity": "sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.42.0.tgz",
- "integrity": "sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.42.0.tgz",
- "integrity": "sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.42.0.tgz",
- "integrity": "sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@swc/core": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.31.tgz",
- "integrity": "sha512-mAby9aUnKRjMEA7v8cVZS9Ah4duoRBnX7X6r5qrhTxErx+68MoY1TPrVwj/66/SWN3Bl+jijqAqoB8Qx0QE34A==",
- "dev": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.21"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.11.31",
- "@swc/core-darwin-x64": "1.11.31",
- "@swc/core-linux-arm-gnueabihf": "1.11.31",
- "@swc/core-linux-arm64-gnu": "1.11.31",
- "@swc/core-linux-arm64-musl": "1.11.31",
- "@swc/core-linux-x64-gnu": "1.11.31",
- "@swc/core-linux-x64-musl": "1.11.31",
- "@swc/core-win32-arm64-msvc": "1.11.31",
- "@swc/core-win32-ia32-msvc": "1.11.31",
- "@swc/core-win32-x64-msvc": "1.11.31"
- },
- "peerDependencies": {
- "@swc/helpers": ">=0.5.17"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.31.tgz",
- "integrity": "sha512-NTEaYOts0OGSbJZc0O74xsji+64JrF1stmBii6D5EevWEtrY4wlZhm8SiP/qPrOB+HqtAihxWIukWkP2aSdGSQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.31.tgz",
- "integrity": "sha512-THSGaSwT96JwXDwuXQ6yFBbn+xDMdyw7OmBpnweAWsh5DhZmQkALEm1DgdQO3+rrE99MkmzwAfclc0UmYro/OA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.31.tgz",
- "integrity": "sha512-laKtQFnW7KHgE57Hx32os2SNAogcuIDxYE+3DYIOmDMqD7/1DCfJe6Rln2N9WcOw6HuDbDpyQavIwZNfSAa8vQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.31.tgz",
- "integrity": "sha512-T+vGw9aPE1YVyRxRr1n7NAdkbgzBzrXCCJ95xAZc/0+WUwmL77Z+js0J5v1KKTRxw4FvrslNCOXzMWrSLdwPSA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.31.tgz",
- "integrity": "sha512-Mztp5NZkyd5MrOAG+kl+QSn0lL4Uawd4CK4J7wm97Hs44N9DHGIG5nOz7Qve1KZo407Y25lTxi/PqzPKHo61zQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.31.tgz",
- "integrity": "sha512-DDVE0LZcXOWwOqFU1Xi7gdtiUg3FHA0vbGb3trjWCuI1ZtDZHEQYL4M3/2FjqKZtIwASrDvO96w91okZbXhvMg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.31.tgz",
- "integrity": "sha512-mJA1MzPPRIfaBUHZi0xJQ4vwL09MNWDeFtxXb0r4Yzpf0v5Lue9ymumcBPmw/h6TKWms+Non4+TDquAsweuKSw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.31.tgz",
- "integrity": "sha512-RdtakUkNVAb/FFIMw3LnfNdlH1/ep6KgiPDRlmyUfd0WdIQ3OACmeBegEFNFTzi7gEuzy2Yxg4LWf4IUVk8/bg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.31.tgz",
- "integrity": "sha512-hErXdCGsg7swWdG1fossuL8542I59xV+all751mYlBoZ8kOghLSKObGQTkBbuNvc0sUKWfWg1X0iBuIhAYar+w==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.11.31",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.31.tgz",
- "integrity": "sha512-5t7SGjUBMMhF9b5j17ml/f/498kiBJNf4vZFNM421UGUEETdtjPN9jZIuQrowBkoFGJTCVL/ECM4YRtTH30u/A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/@swc/types": {
- "version": "0.1.22",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.22.tgz",
- "integrity": "sha512-D13mY/ZA4PPEFSy6acki9eBT/3WgjMoRqNcdpIvjaYLQ44Xk5BdaL7UkDxAh6Z9UOe7tCCp67BVmZCojYp9owg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
- "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "22.15.30",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz",
- "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==",
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@types/protobufjs": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/@types/protobufjs/-/protobufjs-6.0.0.tgz",
- "integrity": "sha512-A27RDExpAf3rdDjIrHKiJK6x8kqqJ4CmoChwtipfhVAn1p7+wviQFFP7dppn8FslSbHtQeVPvi8wNKkDjSYjHw==",
- "deprecated": "This is a stub types definition for protobufjs (https://github.com/dcodeIO/ProtoBuf.js). protobufjs provides its own type definitions, so you don't need @types/protobufjs installed!",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "protobufjs": "*"
- }
- },
- "node_modules/@typescript/vfs": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.1.tgz",
- "integrity": "sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.1.1"
- },
- "peerDependencies": {
- "typescript": "*"
- }
- },
- "node_modules/@vitejs/plugin-react-swc": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.10.1.tgz",
- "integrity": "sha512-FmQvN3yZGyD9XW6IyxE86Kaa/DnxSsrDQX1xCR1qojNpBLaUop+nLYFvhCkJsq8zOupNjCRA9jyhPGOJsSkutA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rolldown/pluginutils": "1.0.0-beta.9",
- "@swc/core": "^1.11.22"
- },
- "peerDependencies": {
- "vite": "^4 || ^5 || ^6"
- }
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
- "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.5",
- "@esbuild/android-arm": "0.25.5",
- "@esbuild/android-arm64": "0.25.5",
- "@esbuild/android-x64": "0.25.5",
- "@esbuild/darwin-arm64": "0.25.5",
- "@esbuild/darwin-x64": "0.25.5",
- "@esbuild/freebsd-arm64": "0.25.5",
- "@esbuild/freebsd-x64": "0.25.5",
- "@esbuild/linux-arm": "0.25.5",
- "@esbuild/linux-arm64": "0.25.5",
- "@esbuild/linux-ia32": "0.25.5",
- "@esbuild/linux-loong64": "0.25.5",
- "@esbuild/linux-mips64el": "0.25.5",
- "@esbuild/linux-ppc64": "0.25.5",
- "@esbuild/linux-riscv64": "0.25.5",
- "@esbuild/linux-s390x": "0.25.5",
- "@esbuild/linux-x64": "0.25.5",
- "@esbuild/netbsd-arm64": "0.25.5",
- "@esbuild/netbsd-x64": "0.25.5",
- "@esbuild/openbsd-arm64": "0.25.5",
- "@esbuild/openbsd-x64": "0.25.5",
- "@esbuild/sunos-x64": "0.25.5",
- "@esbuild/win32-arm64": "0.25.5",
- "@esbuild/win32-ia32": "0.25.5",
- "@esbuild/win32-x64": "0.25.5"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.5",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
- "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/long": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/long/-/long-5.2.4.tgz",
- "integrity": "sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==",
- "license": "Apache-2.0"
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.4",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz",
- "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/protobufjs": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz",
- "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
- "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": ">=13.7.0",
- "long": "^5.0.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/rollup": {
- "version": "4.42.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.42.0.tgz",
- "integrity": "sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.7"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.42.0",
- "@rollup/rollup-android-arm64": "4.42.0",
- "@rollup/rollup-darwin-arm64": "4.42.0",
- "@rollup/rollup-darwin-x64": "4.42.0",
- "@rollup/rollup-freebsd-arm64": "4.42.0",
- "@rollup/rollup-freebsd-x64": "4.42.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.42.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.42.0",
- "@rollup/rollup-linux-arm64-gnu": "4.42.0",
- "@rollup/rollup-linux-arm64-musl": "4.42.0",
- "@rollup/rollup-linux-loongarch64-gnu": "4.42.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.42.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.42.0",
- "@rollup/rollup-linux-riscv64-musl": "4.42.0",
- "@rollup/rollup-linux-s390x-gnu": "4.42.0",
- "@rollup/rollup-linux-x64-gnu": "4.42.0",
- "@rollup/rollup-linux-x64-musl": "4.42.0",
- "@rollup/rollup-win32-arm64-msvc": "4.42.0",
- "@rollup/rollup-win32-ia32-msvc": "4.42.0",
- "@rollup/rollup-win32-x64-msvc": "4.42.0",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "license": "MIT"
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/examples/freeze-test/client/package.json b/examples/freeze-test/client/package.json
deleted file mode 100644
index d2df048f5..000000000
--- a/examples/freeze-test/client/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "preview": "vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "@types/node": "^22.15.30",
- "@types/protobufjs": "^6.0.0",
- "@vitejs/plugin-react-swc": "^3.10.1",
- "typescript": "^5.8.3",
- "vite": "^6.3.5"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^0.4.0",
- "@pipecat-ai/websocket-transport": "^0.4.1",
- "protobufjs": "^7.4.0"
- }
-}
diff --git a/examples/freeze-test/client/src/app.ts b/examples/freeze-test/client/src/app.ts
deleted file mode 100644
index e5063cd00..000000000
--- a/examples/freeze-test/client/src/app.ts
+++ /dev/null
@@ -1,355 +0,0 @@
-/**
- * Copyright (c) 2024โ2025, Daily
- *
- * SPDX-License-Identifier: BSD 2-Clause License
- */
-
-/**
- * RTVI Client Implementation
- *
- * This client connects to an RTVI-compatible bot server using WebSocket.
- *
- * Requirements:
- * - A running RTVI bot server (defaults to http://localhost:7860)
- */
-
-import {
- RTVIClient,
- RTVIClientOptions,
- RTVIEvent,
-} from '@pipecat-ai/client-js';
-import {
- ProtobufFrameSerializer,
- WebSocketTransport,
-} from '@pipecat-ai/websocket-transport';
-
-class RecordingSerializer extends ProtobufFrameSerializer {
- private lastTimestamp: number | null = null;
- private recordingAudioToSend: boolean = false;
- private _recordedAudio: { data: ArrayBuffer; delay: number }[] = [];
-
- public startRecording() {
- this.recordingAudioToSend = true;
- this._recordedAudio = [];
- this.lastTimestamp = null;
- }
-
- public stopRecording() {
- this.recordingAudioToSend = false;
- }
-
- // @ts-ignore
- serializeAudio(
- data: ArrayBuffer,
- sampleRate: number,
- numChannels: number
- ): Uint8Array | null {
- if (this.recordingAudioToSend) {
- const now = Date.now();
- // Compute delay since last packet
- const delay = this.lastTimestamp ? now - this.lastTimestamp : 0;
- this.lastTimestamp = now;
- // Save audio chunk and delay
- this._recordedAudio.push({ data, delay });
- return null;
- } else {
- return super.serializeAudio(data, sampleRate, numChannels);
- }
- }
-
- public get recordedAudio() {
- return this._recordedAudio;
- }
-}
-
-class WebsocketClientApp {
- private ENABLE_RECORDING_MODE = false;
- private RECORDING_TIME_MS = 10000;
-
- private rtviClient: RTVIClient | null = null;
- private connectBtn: HTMLButtonElement | null = null;
- private disconnectBtn: HTMLButtonElement | null = null;
- private statusSpan: HTMLElement | null = null;
- private debugLog: HTMLElement | null = null;
- private botAudio: HTMLAudioElement;
-
- private declare websocketTransport: WebSocketTransport;
- private sendRecordedAudio: boolean = false;
- private declare recordingSerializer: RecordingSerializer;
-
- private playBtn: HTMLButtonElement | null = null;
- private stopBtn: HTMLButtonElement | null = null;
-
- constructor() {
- this.botAudio = document.createElement('audio');
- this.botAudio.autoplay = true;
- //this.botAudio.playsInline = true;
- document.body.appendChild(this.botAudio);
-
- this.setupDOMElements();
- this.setupEventListeners();
- }
-
- /**
- * Set up references to DOM elements and create necessary media elements
- */
- private setupDOMElements(): void {
- this.connectBtn = document.getElementById(
- 'connect-btn'
- ) as HTMLButtonElement;
- this.disconnectBtn = document.getElementById(
- 'disconnect-btn'
- ) as HTMLButtonElement;
- this.statusSpan = document.getElementById('connection-status');
- this.debugLog = document.getElementById('debug-log');
- this.playBtn = document.getElementById('play-btn') as HTMLButtonElement;
- this.stopBtn = document.getElementById('stop-btn') as HTMLButtonElement;
- }
-
- /**
- * Set up event listeners for connect/disconnect buttons
- */
- private setupEventListeners(): void {
- this.connectBtn?.addEventListener('click', () => this.connect());
- this.disconnectBtn?.addEventListener('click', () => this.disconnect());
- this.playBtn?.addEventListener('click', () =>
- this.startSendingRecordedAudio()
- );
- this.stopBtn?.addEventListener('click', () =>
- this.stopSendingRecordedAudio()
- );
- }
-
- /**
- * Add a timestamped message to the debug log
- */
- private log(message: string): void {
- if (!this.debugLog) return;
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3';
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50';
- }
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- console.log(message);
- }
-
- /**
- * Update the connection status display
- */
- private updateStatus(status: string): void {
- if (this.statusSpan) {
- this.statusSpan.textContent = status;
- }
- this.log(`Status: ${status}`);
- }
-
- /**
- * Check for available media tracks and set them up if present
- * This is called when the bot is ready or when the transport state changes to ready
- */
- setupMediaTracks() {
- if (!this.rtviClient) return;
- const tracks = this.rtviClient.tracks();
- if (tracks.bot?.audio) {
- this.setupAudioTrack(tracks.bot.audio);
- }
- }
-
- /**
- * Set up listeners for track events (start/stop)
- * This handles new tracks being added during the session
- */
- setupTrackListeners() {
- if (!this.rtviClient) return;
-
- // Listen for new tracks starting
- this.rtviClient.on(RTVIEvent.TrackStarted, (track, participant) => {
- // Only handle non-local (bot) tracks
- if (!participant?.local && track.kind === 'audio') {
- this.setupAudioTrack(track);
- }
- });
-
- // Listen for tracks stopping
- this.rtviClient.on(RTVIEvent.TrackStopped, (track, participant) => {
- this.log(
- `Track stopped: ${track.kind} from ${participant?.name || 'unknown'}`
- );
- });
- }
-
- /**
- * Set up an audio track for playback
- * Handles both initial setup and track updates
- */
- private setupAudioTrack(track: MediaStreamTrack): void {
- this.log('Setting up audio track');
- if (
- this.botAudio.srcObject &&
- 'getAudioTracks' in this.botAudio.srcObject
- ) {
- const oldTrack = this.botAudio.srcObject.getAudioTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
- this.botAudio.srcObject = new MediaStream([track]);
- }
-
- /**
- * Initialize and connect to the bot
- * This sets up the RTVI client, initializes devices, and establishes the connection
- */
- public async connect(): Promise {
- try {
- const startTime = Date.now();
-
- this.recordingSerializer = new RecordingSerializer();
- const ws_opts = {
- serializer: this.ENABLE_RECORDING_MODE
- ? this.recordingSerializer
- : new ProtobufFrameSerializer(),
- recorderSampleRate: 8000,
- playerSampleRate: 8000,
- };
-
- const RTVIConfig: RTVIClientOptions = {
- transport: new WebSocketTransport(ws_opts),
- enableMic: true,
- enableCam: false,
- callbacks: {
- onConnected: () => {
- this.updateStatus('Connected');
- if (this.connectBtn) this.connectBtn.disabled = true;
- if (this.disconnectBtn) this.disconnectBtn.disabled = false;
- },
- onDisconnected: () => {
- this.updateStatus('Disconnected');
- if (this.connectBtn) this.connectBtn.disabled = false;
- if (this.disconnectBtn) this.disconnectBtn.disabled = true;
- this.log('Client disconnected');
- },
- onBotReady: (data) => {
- this.log(`Bot ready: ${JSON.stringify(data)}`);
- this.setupMediaTracks();
- },
- onUserTranscript: (data) => {
- if (data.final) {
- this.log(`User: ${data.text}`);
- }
- },
- onBotTranscript: (data) => this.log(`Bot: ${data.text}`),
- onMessageError: (error) => console.error('Message error:', error),
- onError: (error) => console.error('Error:', error),
- },
- };
- this.rtviClient = new RTVIClient(RTVIConfig);
- this.websocketTransport = this.rtviClient.transport;
- this.setupTrackListeners();
-
- this.log('Initializing devices...');
- await this.rtviClient.initDevices();
-
- this.log('Connecting to bot...');
- await this.rtviClient.connect({
- endpoint: 'http://localhost:7860/connect',
- });
-
- const timeTaken = Date.now() - startTime;
- this.log(`Connection complete, timeTaken: ${timeTaken}`);
-
- if (this.ENABLE_RECORDING_MODE) {
- this.log(
- `Starting to recording the next ${
- this.RECORDING_TIME_MS / 1000
- }s of audio`
- );
- this.recordingSerializer.startRecording();
- await this.sleep(this.RECORDING_TIME_MS);
- this.recordingSerializer.stopRecording();
- this.log('Recording stopped');
- this.rtviClient.enableMic(false);
- this.startSendingRecordedAudio();
- }
- } catch (error) {
- this.log(`Error connecting: ${(error as Error).message}`);
- this.updateStatus('Error');
- // Clean up if there's an error
- if (this.rtviClient) {
- try {
- await this.rtviClient.disconnect();
- } catch (disconnectError) {
- this.log(`Error during disconnect: ${disconnectError}`);
- }
- }
- }
- }
-
- /**
- * Disconnect from the bot and clean up media resources
- */
- public async disconnect(): Promise {
- if (this.rtviClient) {
- try {
- this.stopSendingRecordedAudio();
- await this.rtviClient.disconnect();
- this.rtviClient = null;
- if (
- this.botAudio.srcObject &&
- 'getAudioTracks' in this.botAudio.srcObject
- ) {
- this.botAudio.srcObject
- .getAudioTracks()
- .forEach((track) => track.stop());
- this.botAudio.srcObject = null;
- }
- } catch (error) {
- this.log(`Error disconnecting: ${(error as Error).message}`);
- }
- }
- }
-
- private startSendingRecordedAudio() {
- this.sendRecordedAudio = true;
- if (this.playBtn) this.playBtn.disabled = true;
- if (this.stopBtn) this.stopBtn.disabled = false;
- void this.replayAudio();
- }
-
- private stopSendingRecordedAudio() {
- if (this.stopBtn) this.stopBtn.disabled = true;
- if (this.playBtn) this.playBtn.disabled = false;
- this.sendRecordedAudio = false;
- }
-
- private async replayAudio() {
- if (this.sendRecordedAudio) {
- this.log('Sending recorded audio');
- for (const chunk of this.recordingSerializer.recordedAudio) {
- await this.sleep(chunk.delay);
- this.websocketTransport.handleUserAudioStream(chunk.data);
- }
- const randomDelay = 1000 + Math.random() * (10000 - 500);
- await this.sleep(randomDelay);
-
- void this.replayAudio();
- }
- }
-
- private sleep(ms: number): Promise {
- return new Promise((resolve) => setTimeout(resolve, ms));
- }
-}
-
-declare global {
- interface Window {
- WebsocketClientApp: typeof WebsocketClientApp;
- }
-}
-
-window.addEventListener('DOMContentLoaded', () => {
- window.WebsocketClientApp = WebsocketClientApp;
- new WebsocketClientApp();
-});
diff --git a/examples/freeze-test/client/src/style.css b/examples/freeze-test/client/src/style.css
deleted file mode 100644
index 9c147266e..000000000
--- a/examples/freeze-test/client/src/style.css
+++ /dev/null
@@ -1,98 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#bot-video-container {
- width: 640px;
- height: 360px;
- background-color: #e0e0e0;
- border-radius: 8px;
- margin: 20px auto;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-#bot-video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 500px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/freeze-test/client/tsconfig.json b/examples/freeze-test/client/tsconfig.json
deleted file mode 100644
index c9c555d96..000000000
--- a/examples/freeze-test/client/tsconfig.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "commonjs", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
- // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
- // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
- // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
- // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
- // "noUncheckedSideEffectImports": true, /* Check side effect imports. */
- // "resolveJsonModule": true, /* Enable importing .json files. */
- // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- // "outDir": "./", /* Specify an output folder for all emitted files. */
- // "removeComments": true, /* Disable emitting comments. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
- // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
- }
-}
diff --git a/examples/freeze-test/client/vite.config.js b/examples/freeze-test/client/vite.config.js
deleted file mode 100644
index daf85167d..000000000
--- a/examples/freeze-test/client/vite.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { defineConfig } from 'vite';
-import react from '@vitejs/plugin-react-swc';
-
-export default defineConfig({
- plugins: [react()],
- server: {
- proxy: {
- // Proxy /api requests to the backend server
- '/connect': {
- target: 'http://0.0.0.0:7860', // Replace with your backend URL
- changeOrigin: true,
- },
- },
- },
-});
diff --git a/examples/freeze-test/env.example b/examples/freeze-test/env.example
deleted file mode 100644
index 7a94b2eee..000000000
--- a/examples/freeze-test/env.example
+++ /dev/null
@@ -1,4 +0,0 @@
-SENTRY_DSN=
-DEEPGRAM_API_KEY=
-CARTESIA_API_KEY=
-OPENAI_API_KEY=
\ No newline at end of file
diff --git a/examples/freeze-test/freeze_test_bot.py b/examples/freeze-test/freeze_test_bot.py
deleted file mode 100644
index 8ce3df17a..000000000
--- a/examples/freeze-test/freeze_test_bot.py
+++ /dev/null
@@ -1,359 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import os
-import random
-from contextlib import asynccontextmanager
-from typing import Any, Dict
-
-import sentry_sdk
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, Request, WebSocket
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import RedirectResponse
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- CancelFrame,
- EndFrame,
- Frame,
- InterimTranscriptionFrame,
- LLMFullResponseEndFrame,
- LLMMessagesFrame,
- StartFrame,
- StartInterruptionFrame,
- StopFrame,
- StopInterruptionFrame,
- TranscriptionFrame,
- TTSSpeakFrame,
- UserStartedSpeakingFrame,
- UserStoppedSpeakingFrame,
-)
-from pipecat.observers.loggers.debug_log_observer import DebugLogObserver
-from pipecat.pipeline.parallel_pipeline import ParallelPipeline
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import (
- OpenAILLMContext,
- OpenAILLMContextFrame,
-)
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIProcessor
-from pipecat.processors.metrics.sentry import SentryMetrics
-from pipecat.processors.user_idle_processor import UserIdleProcessor
-from pipecat.serializers.protobuf import ProtobufFrameSerializer
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.network.fastapi_websocket import (
- FastAPIWebsocketParams,
- FastAPIWebsocketTransport,
-)
-from pipecat.utils.time import time_now_iso8601
-
-load_dotenv(override=True)
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """Handles FastAPI startup and shutdown."""
- yield # Run app
-
-
-# Initialize FastAPI app with lifespan manager
-app = FastAPI(lifespan=lifespan)
-
-# Configure CORS to allow requests from any origin
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-class SimulateFreezeInput(FrameProcessor):
- def __init__(
- self,
- **kwargs,
- ):
- super().__init__(**kwargs)
- # Whether we have seen a StartFrame already.
- self._initialized = False
- self._send_frames_task = None
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
- if isinstance(frame, StartFrame):
- # Push StartFrame before start(), because we want StartFrame to be
- # processed by every processor before any other frame is processed.
- await self.push_frame(frame, direction)
- await self._start(frame)
- elif isinstance(frame, CancelFrame):
- logger.info("SimulateFreezeInput: Received cancel frame")
- await self._stop()
- await self.push_frame(frame, direction)
- elif isinstance(frame, EndFrame):
- logger.info("SimulateFreezeInput: Received end frame")
- await self.push_frame(frame, direction)
- await self._stop()
- elif isinstance(frame, StopFrame):
- logger.info("SimulateFreezeInput: Received stop frame")
- await self.push_frame(frame, direction)
- await self._stop()
-
- async def _start(self, frame: StartFrame):
- if self._initialized:
- return
- logger.info(f"Starting SimulateFreezeInput")
- self._initialized = True
- if not self._send_frames_task:
- self._send_frames_task = self.create_task(self._send_frames())
-
- async def _stop(self):
- logger.info(f"Stopping SimulateFreezeInput")
- self._initialized = False
- if self._send_frames_task:
- await self.cancel_task(self._send_frames_task)
- self._send_frames_task = None
-
- async def _send_user_text(self, text: str):
- self.reset_watchdog()
- # Emulation as if the user has spoken and the stt transcribed
- await self.push_frame(UserStartedSpeakingFrame())
- await self.push_frame(StartInterruptionFrame())
- await self.push_frame(
- TranscriptionFrame(
- text,
- "",
- time_now_iso8601(),
- )
- )
- # Need to wait before sending the UserStoppedSpeakingFrame,
- # otherwise TranscriptionFrame will be processed
- # later than the UserStoppedSpeakingFrame
- await asyncio.sleep(0.1)
- await self.push_frame(UserStoppedSpeakingFrame())
- await self.push_frame(StopInterruptionFrame())
-
- async def _send_frames(self):
- try:
- i = 0
- while True:
- logger.debug("SimulateFreezeInput _send_frames")
- await self._send_user_text("Tell me a brief history of Brazil!")
- await asyncio.sleep(3)
- await self._send_user_text("and who has discovered it")
- i += 1
- if i >= 20:
- break
- # sleeping 1s before interrupting
- wait_time = random.uniform(1, 10)
- await asyncio.sleep(wait_time)
- except Exception as e:
- logger.error(f"{self} exception receiving data: {e.__class__.__name__} ({e})")
-
-
-async def run_example(websocket_client):
- logger.info(f"Starting bot")
-
- # Create a transport using the WebRTC connection
- transport = FastAPIWebsocketTransport(
- websocket=websocket_client,
- params=FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- add_wav_header=False,
- vad_analyzer=SileroVADAnalyzer(),
- serializer=ProtobufFrameSerializer(),
- ),
- )
-
- sentry_sdk.init(
- dsn=os.getenv("SENTRY_DSN"),
- traces_sample_rate=1.0,
- )
-
- freeze = SimulateFreezeInput()
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- async def handle_user_idle(user_idle: UserIdleProcessor, retry_count: int) -> bool:
- if retry_count == 1:
- # First attempt: Add a gentle prompt to the conversation
- messages.append(
- {
- "role": "system",
- "content": "The user has been quiet. Politely and briefly ask if they're still there.",
- }
- )
- await user_idle.push_frame(LLMMessagesFrame(messages))
- return True
- elif retry_count == 2:
- # Second attempt: More direct prompt
- messages.append(
- {
- "role": "system",
- "content": "The user is still inactive. Ask if they'd like to continue our conversation.",
- }
- )
- await user_idle.push_frame(LLMMessagesFrame(messages))
- return True
- else:
- # Third attempt: End the conversation
- await user_idle.push_frame(
- TTSSpeakFrame("It seems like you're busy right now. Have a nice day!")
- )
- await task.queue_frame(EndFrame())
- return False
-
- user_idle = UserIdleProcessor(callback=handle_user_idle, timeout=10.0)
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- metrics=SentryMetrics(),
- )
-
- llm = OpenAILLMService(
- api_key=os.getenv("OPENAI_API_KEY"),
- metrics=SentryMetrics(),
- )
-
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- messages = [
- {
- "role": "system",
- "content": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- ParallelPipeline(
- [
- freeze,
- ],
- [
- transport.input(),
- stt,
- ],
- ),
- user_idle,
- rtvi,
- context_aggregator.user(), # User responses
- llm, # LLM
- tts, # TTS
- transport.output(), # Transport bot output
- context_aggregator.assistant(), # Assistant spoken responses
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- allow_interruptions=True,
- enable_metrics=True,
- enable_usage_metrics=True,
- report_only_initial_ttfb=True,
- audio_in_sample_rate=8000,
- audio_out_sample_rate=8000,
- ),
- idle_timeout_secs=120,
- observers=[
- DebugLogObserver(
- frame_types={
- InterimTranscriptionFrame: None,
- TranscriptionFrame: None,
- # TTSTextFrame: None,
- # LLMTextFrame: None,
- OpenAILLMContextFrame: None,
- LLMFullResponseEndFrame: None,
- UserStartedSpeakingFrame: None,
- UserStoppedSpeakingFrame: None,
- StartInterruptionFrame: None,
- StopInterruptionFrame: None,
- },
- exclude_fields={
- "result",
- "metadata",
- "audio",
- "image",
- "images",
- },
- ),
- ],
- enable_watchdog_timers=True,
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info(f"Client connected")
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- logger.info(f"Client ready")
- await rtvi.set_bot_ready()
- # Kick off the conversation.
- # messages.append({"role": "system", "content": "Please introduce yourself to the user."})
- # await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info(f"Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False)
-
- await runner.run(task)
-
-
-@app.get("/", include_in_schema=False)
-async def root_redirect():
- return RedirectResponse(url="/client/")
-
-
-@app.websocket("/ws")
-async def websocket_endpoint(websocket: WebSocket):
- await websocket.accept()
- print("WebSocket connection accepted")
- try:
- await run_example(websocket)
- except Exception as e:
- print(f"Exception in run_bot: {e}")
-
-
-@app.post("/connect")
-async def bot_connect(request: Request) -> Dict[Any, Any]:
- server_mode = os.getenv("WEBSOCKET_SERVER", "fast_api")
- if server_mode == "websocket_server":
- ws_url = "ws://localhost:8765"
- else:
- ws_url = "ws://localhost:7860/ws"
- return {"ws_url": ws_url}
-
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="Pipecat Bot Runner")
- parser.add_argument(
- "--host", default="localhost", help="Host for HTTP server (default: localhost)"
- )
- parser.add_argument(
- "--port", type=int, default=7860, help="Port for HTTP server (default: 7860)"
- )
- args = parser.parse_args()
-
- uvicorn.run(app, host=args.host, port=args.port)
diff --git a/examples/freeze-test/requirements.txt b/examples/freeze-test/requirements.txt
deleted file mode 100644
index 8e3d7f12f..000000000
--- a/examples/freeze-test/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[silero,websocket,openai, deepgram, cartesia, sentry]
diff --git a/examples/instant-voice/.gitignore b/examples/instant-voice/.gitignore
deleted file mode 100644
index 6d120408b..000000000
--- a/examples/instant-voice/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-venv
-.idea
-server/.env
-client/javascript/node_modules
-client/javascript/.vite
-bkp
-
diff --git a/examples/instant-voice/README.md b/examples/instant-voice/README.md
deleted file mode 100644
index 9dad22051..000000000
--- a/examples/instant-voice/README.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# Instant Voice
-
-This demo showcases how to enable instant voice communication as soon as a user connects.
-By leveraging optimizations on both the server and client sides, users can start speaking immediately after pressing the connect button.
-
-## How It Works
-
-### Server-Side Improvements:
-- A **pool of Daily rooms** is managed to ensure quick connections.
-- When a user connects, an existing room from the pool is assigned.
-- A new room is created asynchronously to maintain the predefined pool size.
-
-### Client-Side Improvements:
-- Using the **DailyTransport** property `bufferLocalAudioUntilBotReady` set to enabled, users can start speaking immediately
- upon receiving the `AUDIO_BUFFERING_STARTED` event (typically within ~1s).
-- This allows users to speak even before the bot is fully ready or the WebRTC connection is fully established.
-
-## Quick Start
-
-### 1. Start the Bot Server
-
-1. Navigate to the server directory:
- ```bash
- cd server
- ```
-2. Create and activate a virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-3. Install dependencies:
- ```bash
- pip install -r requirements.txt
- ```
-4. Copy the `.env.example` file to `.env` and configure it:
- - Add your API keys.
-5. Start the server:
- ```bash
- python src/server.py
- ```
-
-### 2. Connect Using the Client App
-
-For client-side setup, refer to the [JavaScript Guide](client/javascript/README.md).
-
-## Important Notes
-- The bot server **must** be running before using the client implementation.
-- Ensure your environment variables are correctly set up.
-
-## Requirements
-- **Python 3.10+**
-- **Node.js 16+** (for JavaScript/React client)
-- **Daily API key**
-- **Google API key**
-- **Modern web browser with WebRTC support**
diff --git a/examples/instant-voice/client/javascript/README.md b/examples/instant-voice/client/javascript/README.md
deleted file mode 100644
index 3b0c7f96e..000000000
--- a/examples/instant-voice/client/javascript/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# JavaScript Implementation
-
-Basic implementation using the [Pipecat JavaScript SDK](https://docs.pipecat.ai/client/js/introduction).
-
-## Setup
-
-1. Run the bot server. See the [server README](../../README).
-
-2. Navigate to the `client/javascript` directory:
-
-```bash
-cd client/javascript
-```
-
-3. Install dependencies:
-
-```bash
-npm install
-```
-
-4. Run the client app:
-
-```
-npm run dev
-```
-
-5. Visit http://localhost:5173 in your browser.
diff --git a/examples/instant-voice/client/javascript/index.html b/examples/instant-voice/client/javascript/index.html
deleted file mode 100644
index 3f6196def..000000000
--- a/examples/instant-voice/client/javascript/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
- AI Chatbot
-
-
-
-
-
-
- Buffering audio: No
-
-
- Transport: Disconnected
-
-
- Connect
- Disconnect
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/instant-voice/client/javascript/package-lock.json b/examples/instant-voice/client/javascript/package-lock.json
deleted file mode 100644
index 013bba437..000000000
--- a/examples/instant-voice/client/javascript/package-lock.json
+++ /dev/null
@@ -1,1563 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0"
- },
- "devDependencies": {
- "@types/node": "^22.13.1",
- "@vitejs/plugin-react-swc": "^3.7.2",
- "typescript": "^5.7.3",
- "vite": "^6.3.5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.77.0.tgz",
- "integrity": "sha512-icNXKieKAkRR/C5dcPjrCkL1jQGFp5C5WtLHy5uHAdTztm+mo9wlPJuehbWaGOM3TV24mgWHZ/+8jOys1G0I4w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
- "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
- "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
- "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
- "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
- "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
- "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
- "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
- "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
- "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
- "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
- "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
- "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
- "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
- "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
- "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
- "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
- "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
- "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
- "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
- "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
- "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
- "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
- "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
- "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/daily-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/daily-transport/-/daily-transport-1.0.0.tgz",
- "integrity": "sha512-iXmv9Et/TGPvJoeOY+ZBPv+a3pbqT502jco2MBHl8l2VrtztkidjDwiOkPfPdD191CCwaSbV5laSYALsD0AyxA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.77.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.11",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.11.tgz",
- "integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz",
- "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz",
- "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz",
- "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz",
- "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz",
- "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz",
- "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz",
- "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz",
- "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz",
- "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz",
- "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz",
- "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz",
- "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz",
- "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz",
- "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz",
- "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
- "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz",
- "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz",
- "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz",
- "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz",
- "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@swc/core": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.9.tgz",
- "integrity": "sha512-O+LfT2JlVMsIMWG9x+rdxg8GzpzeGtCZQfXV7cKc1PjIKUkLFf1QJ7okuseA4f/9vncu37dQ2ZcRrPKy0Ndd5g==",
- "dev": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.23"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.12.9",
- "@swc/core-darwin-x64": "1.12.9",
- "@swc/core-linux-arm-gnueabihf": "1.12.9",
- "@swc/core-linux-arm64-gnu": "1.12.9",
- "@swc/core-linux-arm64-musl": "1.12.9",
- "@swc/core-linux-x64-gnu": "1.12.9",
- "@swc/core-linux-x64-musl": "1.12.9",
- "@swc/core-win32-arm64-msvc": "1.12.9",
- "@swc/core-win32-ia32-msvc": "1.12.9",
- "@swc/core-win32-x64-msvc": "1.12.9"
- },
- "peerDependencies": {
- "@swc/helpers": ">=0.5.17"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.9.tgz",
- "integrity": "sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.9.tgz",
- "integrity": "sha512-hv2kls7Ilkm2EpeJz+I9MCil7pGS3z55ZAgZfxklEuYsxpICycxeH+RNRv4EraggN44ms+FWCjtZFu0LGg2V3g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.9.tgz",
- "integrity": "sha512-od9tDPiG+wMU9wKtd6y3nYJdNqgDOyLdgRRcrj1/hrbHoUPOM8wZQZdwQYGarw63iLXGgsw7t5HAF9Yc51ilFA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.9.tgz",
- "integrity": "sha512-6qx1ka9LHcLzxIgn2Mros+CZLkHK2TawlXzi/h7DJeNnzi8F1Hw0Yzjp8WimxNCg6s2n+o3jnmin1oXB7gg8rw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.9.tgz",
- "integrity": "sha512-yghFZWKPVVGbUdqiD7ft23G0JX6YFGDJPz9YbLLAwGuKZ9th3/jlWoQDAw1Naci31LQhVC+oIji6ozihSuwB2A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.9.tgz",
- "integrity": "sha512-SFUxyhWLZRNL8QmgGNqdi2Q43PNyFVkRZ2zIif30SOGFSxnxcf2JNeSeBgKIGVgaLSuk6xFVVCtJ3KIeaStgRg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.9.tgz",
- "integrity": "sha512-9FB0wM+6idCGTI20YsBNBg9xSWtkDBymnpaTCsZM3qDc0l4uOpJMqbfWhQvp17x7r/ulZfb2QY8RDvQmCL6AcQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.9.tgz",
- "integrity": "sha512-zHOusMVbOH9ik5RtRrMiGzLpKwxrPXgXkBm3SbUCa65HAdjV33NZ0/R9Rv1uPESALtEl2tzMYLUxYA5ECFDFhA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.9.tgz",
- "integrity": "sha512-aWZf0PqE0ot7tCuhAjRkDFf41AzzSQO0x2xRfTbnhpROp57BRJ/N5eee1VULO/UA2PIJRG7GKQky5bSGBYlFug==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.9.tgz",
- "integrity": "sha512-C25fYftXOras3P3anSUeXXIpxmEkdAcsIL9yrr0j1xepTZ/yKwpnQ6g3coj8UXdeJy4GTVlR6+Ow/QiBgZQNOg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/@swc/types": {
- "version": "0.1.23",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz",
- "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "22.16.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.0.tgz",
- "integrity": "sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@vitejs/plugin-react-swc": {
- "version": "3.10.2",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.10.2.tgz",
- "integrity": "sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rolldown/pluginutils": "1.0.0-beta.11",
- "@swc/core": "^1.11.31"
- },
- "peerDependencies": {
- "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0"
- }
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
- "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.6",
- "@esbuild/android-arm": "0.25.6",
- "@esbuild/android-arm64": "0.25.6",
- "@esbuild/android-x64": "0.25.6",
- "@esbuild/darwin-arm64": "0.25.6",
- "@esbuild/darwin-x64": "0.25.6",
- "@esbuild/freebsd-arm64": "0.25.6",
- "@esbuild/freebsd-x64": "0.25.6",
- "@esbuild/linux-arm": "0.25.6",
- "@esbuild/linux-arm64": "0.25.6",
- "@esbuild/linux-ia32": "0.25.6",
- "@esbuild/linux-loong64": "0.25.6",
- "@esbuild/linux-mips64el": "0.25.6",
- "@esbuild/linux-ppc64": "0.25.6",
- "@esbuild/linux-riscv64": "0.25.6",
- "@esbuild/linux-s390x": "0.25.6",
- "@esbuild/linux-x64": "0.25.6",
- "@esbuild/netbsd-arm64": "0.25.6",
- "@esbuild/netbsd-x64": "0.25.6",
- "@esbuild/openbsd-arm64": "0.25.6",
- "@esbuild/openbsd-x64": "0.25.6",
- "@esbuild/openharmony-arm64": "0.25.6",
- "@esbuild/sunos-x64": "0.25.6",
- "@esbuild/win32-arm64": "0.25.6",
- "@esbuild/win32-ia32": "0.25.6",
- "@esbuild/win32-x64": "0.25.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/rollup": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz",
- "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.44.2",
- "@rollup/rollup-android-arm64": "4.44.2",
- "@rollup/rollup-darwin-arm64": "4.44.2",
- "@rollup/rollup-darwin-x64": "4.44.2",
- "@rollup/rollup-freebsd-arm64": "4.44.2",
- "@rollup/rollup-freebsd-x64": "4.44.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.44.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.44.2",
- "@rollup/rollup-linux-arm64-gnu": "4.44.2",
- "@rollup/rollup-linux-arm64-musl": "4.44.2",
- "@rollup/rollup-linux-loongarch64-gnu": "4.44.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-musl": "4.44.2",
- "@rollup/rollup-linux-s390x-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-musl": "4.44.2",
- "@rollup/rollup-win32-arm64-msvc": "4.44.2",
- "@rollup/rollup-win32-ia32-msvc": "4.44.2",
- "@rollup/rollup-win32-x64-msvc": "4.44.2",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/examples/instant-voice/client/javascript/package.json b/examples/instant-voice/client/javascript/package.json
deleted file mode 100644
index 4cdb82bc9..000000000
--- a/examples/instant-voice/client/javascript/package.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "preview": "vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "@types/node": "^22.13.1",
- "@vitejs/plugin-react-swc": "^3.7.2",
- "typescript": "^5.7.3",
- "vite": "^6.3.5"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0"
- }
-}
diff --git a/examples/instant-voice/client/javascript/src/app.ts b/examples/instant-voice/client/javascript/src/app.ts
deleted file mode 100644
index 7a57f1113..000000000
--- a/examples/instant-voice/client/javascript/src/app.ts
+++ /dev/null
@@ -1,279 +0,0 @@
-/**
- * Copyright (c) 2024โ2025, Daily
- *
- * SPDX-License-Identifier: BSD 2-Clause License
- */
-
-/**
- * Pipecat Client Implementation
- *
- * This client connects to an RTVI-compatible bot server using WebRTC (via Daily).
- * It handles audio/video streaming and manages the connection lifecycle.
- *
- * Requirements:
- * - A running RTVI bot server (defaults to http://localhost:7860)
- * - The server must implement the /connect endpoint that returns Daily.co room credentials
- * - Browser with WebRTC support
- */
-
-import {
- Participant,
- PipecatClient,
- PipecatClientOptions,
- RTVIEvent,
-} from '@pipecat-ai/client-js';
-import {
- DailyEventCallbacks,
- DailyTransport,
-} from '@pipecat-ai/daily-transport';
-import SoundUtils from './util/soundUtils';
-
-/**
- * InstantVoiceClient handles the connection and media management for a real-time
- * voice and video interaction with an AI bot.
- */
-class InstantVoiceClient {
- private declare pcClient: PipecatClient;
- private connectBtn: HTMLButtonElement | null = null;
- private disconnectBtn: HTMLButtonElement | null = null;
- private statusSpan: HTMLElement | null = null;
- private bufferingAudioSpan: HTMLElement | null = null;
- private debugLog: HTMLElement | null = null;
- private botAudio: HTMLAudioElement;
- private declare startTime: number;
-
- constructor() {
- this.botAudio = document.createElement('audio');
- this.botAudio.autoplay = true;
- document.body.appendChild(this.botAudio);
- this.setupDOMElements();
- this.setupEventListeners();
- this.initializePipecatClient();
- }
-
- /**
- * Set up references to DOM elements and create necessary media elements
- */
- private setupDOMElements(): void {
- this.connectBtn = document.getElementById(
- 'connect-btn'
- ) as HTMLButtonElement;
- this.disconnectBtn = document.getElementById(
- 'disconnect-btn'
- ) as HTMLButtonElement;
- this.statusSpan = document.getElementById('connection-status');
- this.bufferingAudioSpan = document.getElementById('buffering-status');
- this.debugLog = document.getElementById('debug-log');
- }
-
- /**
- * Set up event listeners for connect/disconnect buttons
- */
- private setupEventListeners(): void {
- this.connectBtn?.addEventListener('click', () => this.connect());
- this.disconnectBtn?.addEventListener('click', () => this.disconnect());
- }
-
- private initializePipecatClient(): void {
- const PipecatConfig: PipecatClientOptions = {
- transport: new DailyTransport({
- bufferLocalAudioUntilBotReady: true,
- }),
- enableMic: true,
- enableCam: false,
- callbacks: {
- onConnected: () => {
- this.updateStatus('Connected');
- if (this.connectBtn) this.connectBtn.disabled = true;
- if (this.disconnectBtn) this.disconnectBtn.disabled = false;
- },
- onDisconnected: () => {
- this.updateStatus('Disconnected');
- this.updateBufferingStatus('No');
- if (this.connectBtn) this.connectBtn.disabled = false;
- if (this.disconnectBtn) this.disconnectBtn.disabled = true;
- this.log('Client disconnected');
- },
- onBotConnected: (participant: Participant) => {
- this.log(`onBotConnected, timeTaken: ${Date.now() - this.startTime}`);
- },
- onBotReady: (data) => {
- this.log(`onBotReady, timeTaken: ${Date.now() - this.startTime}`);
- this.log(`Bot ready: ${JSON.stringify(data)}`);
- this.setupMediaTracks();
- },
- onUserTranscript: (data) => {
- if (data.final) {
- this.log(`User: ${data.text}`);
- }
- },
- onBotTranscript: (data) => this.log(`Bot: ${data.text}`),
- onMessageError: (error) => console.error('Message error:', error),
- onError: (error) => console.error('Error:', error),
- onAudioBufferingStarted: () => {
- SoundUtils.beep();
- this.updateBufferingStatus('Yes');
- this.log(
- `onMicCaptureStarted, timeTaken: ${Date.now() - this.startTime}`
- );
- },
- onAudioBufferingStopped: () => {
- this.updateBufferingStatus('No');
- this.log(
- `onMicCaptureStopped, timeTaken: ${Date.now() - this.startTime}`
- );
- },
- } as DailyEventCallbacks,
- };
-
- this.pcClient = new PipecatClient(PipecatConfig);
- this.setupTrackListeners();
- }
-
- /**
- * Add a timestamped message to the debug log
- */
- private log(message: string): void {
- if (!this.debugLog) return;
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3';
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50';
- }
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- console.log(message);
- }
-
- /**
- * Update the connection status display
- */
- private updateStatus(status: string): void {
- if (this.statusSpan) {
- this.statusSpan.textContent = status;
- }
- this.log(`Status: ${status}`);
- }
-
- /**
- * Update the connection status display
- */
- private updateBufferingStatus(status: string): void {
- if (this.bufferingAudioSpan) {
- this.bufferingAudioSpan.textContent = status;
- }
- this.log(`BufferingStatus: ${status}`);
- }
-
- /**
- * Check for available media tracks and set them up if present
- * This is called when the bot is ready or when the transport state changes to ready
- */
- setupMediaTracks() {
- if (!this.pcClient) return;
- const tracks = this.pcClient.tracks();
- if (tracks.bot?.audio) {
- this.setupAudioTrack(tracks.bot.audio);
- }
- }
-
- /**
- * Set up listeners for track events (start/stop)
- * This handles new tracks being added during the session
- */
- setupTrackListeners() {
- if (!this.pcClient) return;
-
- // Listen for new tracks starting
- this.pcClient.on(RTVIEvent.TrackStarted, (track, participant) => {
- // Only handle non-local (bot) tracks
- if (!participant?.local && track.kind === 'audio') {
- this.setupAudioTrack(track);
- }
- });
-
- // Listen for tracks stopping
- this.pcClient.on(RTVIEvent.TrackStopped, (track, participant) => {
- this.log(
- `Track stopped: ${track.kind} from ${participant?.name || 'unknown'}`
- );
- });
- }
-
- /**
- * Set up an audio track for playback
- * Handles both initial setup and track updates
- */
- private setupAudioTrack(track: MediaStreamTrack): void {
- this.log('Setting up audio track');
- if (
- this.botAudio.srcObject &&
- 'getAudioTracks' in this.botAudio.srcObject
- ) {
- const oldTrack = this.botAudio.srcObject.getAudioTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
- this.botAudio.srcObject = new MediaStream([track]);
- }
-
- /**
- * Initialize and connect to the bot
- * This sets up the Pipecat client, initializes devices, and establishes the connection
- */
- public async connect(): Promise {
- try {
- this.startTime = Date.now();
- this.log('Connecting to bot...');
- await this.pcClient.connect({
- // The baseURL and endpoint of your bot server that the client will connect to
- endpoint: 'http://localhost:7860/connect',
- });
- } catch (error) {
- this.log(`Error connecting: ${(error as Error).message}`);
- this.updateStatus('Error');
- this.updateBufferingStatus('No');
-
- // Clean up if there's an error
- if (this.pcClient) {
- try {
- await this.pcClient.disconnect();
- } catch (disconnectError) {
- this.log(`Error during disconnect: ${disconnectError}`);
- }
- }
- }
- }
-
- /**
- * Disconnect from the bot and clean up media resources
- */
- public async disconnect(): Promise {
- try {
- await this.pcClient.disconnect();
- if (
- this.botAudio.srcObject &&
- 'getAudioTracks' in this.botAudio.srcObject
- ) {
- this.botAudio.srcObject
- .getAudioTracks()
- .forEach((track) => track.stop());
- this.botAudio.srcObject = null;
- }
- } catch (error) {
- this.log(`Error disconnecting: ${(error as Error).message}`);
- }
- }
-}
-
-declare global {
- interface Window {
- InstantVoiceClient: typeof InstantVoiceClient;
- }
-}
-
-window.addEventListener('DOMContentLoaded', () => {
- window.InstantVoiceClient = InstantVoiceClient;
- new InstantVoiceClient();
-});
diff --git a/examples/instant-voice/client/javascript/src/style.css b/examples/instant-voice/client/javascript/src/style.css
deleted file mode 100644
index 9c147266e..000000000
--- a/examples/instant-voice/client/javascript/src/style.css
+++ /dev/null
@@ -1,98 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#bot-video-container {
- width: 640px;
- height: 360px;
- background-color: #e0e0e0;
- border-radius: 8px;
- margin: 20px auto;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-#bot-video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 500px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/instant-voice/client/javascript/src/util/soundUtils.ts b/examples/instant-voice/client/javascript/src/util/soundUtils.ts
deleted file mode 100644
index 996185f40..000000000
--- a/examples/instant-voice/client/javascript/src/util/soundUtils.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-class SoundUtils {
- static beep() {
- const snd = new Audio("data:audio/wav;base64,//uQRAAAAWMSLwUIYAAsYkXgoQwAEaYLWfkWgAI0wWs/ItAAAGDgYtAgAyN+QWaAAihwMWm4G8QQRDiMcCBcH3Cc+CDv/7xA4Tvh9Rz/y8QADBwMWgQAZG/ILNAARQ4GLTcDeIIIhxGOBAuD7hOfBB3/94gcJ3w+o5/5eIAIAAAVwWgQAVQ2ORaIQwEMAJiDg95G4nQL7mQVWI6GwRcfsZAcsKkJvxgxEjzFUgfHoSQ9Qq7KNwqHwuB13MA4a1q/DmBrHgPcmjiGoh//EwC5nGPEmS4RcfkVKOhJf+WOgoxJclFz3kgn//dBA+ya1GhurNn8zb//9NNutNuhz31f////9vt///z+IdAEAAAK4LQIAKobHItEIYCGAExBwe8jcToF9zIKrEdDYIuP2MgOWFSE34wYiR5iqQPj0JIeoVdlG4VD4XA67mAcNa1fhzA1jwHuTRxDUQ//iYBczjHiTJcIuPyKlHQkv/LHQUYkuSi57yQT//uggfZNajQ3Vmz+Zt//+mm3Wm3Q576v////+32///5/EOgAAADVghQAAAAA//uQZAUAB1WI0PZugAAAAAoQwAAAEk3nRd2qAAAAACiDgAAAAAAABCqEEQRLCgwpBGMlJkIz8jKhGvj4k6jzRnqasNKIeoh5gI7BJaC1A1AoNBjJgbyApVS4IDlZgDU5WUAxEKDNmmALHzZp0Fkz1FMTmGFl1FMEyodIavcCAUHDWrKAIA4aa2oCgILEBupZgHvAhEBcZ6joQBxS76AgccrFlczBvKLC0QI2cBoCFvfTDAo7eoOQInqDPBtvrDEZBNYN5xwNwxQRfw8ZQ5wQVLvO8OYU+mHvFLlDh05Mdg7BT6YrRPpCBznMB2r//xKJjyyOh+cImr2/4doscwD6neZjuZR4AgAABYAAAABy1xcdQtxYBYYZdifkUDgzzXaXn98Z0oi9ILU5mBjFANmRwlVJ3/6jYDAmxaiDG3/6xjQQCCKkRb/6kg/wW+kSJ5//rLobkLSiKmqP/0ikJuDaSaSf/6JiLYLEYnW/+kXg1WRVJL/9EmQ1YZIsv/6Qzwy5qk7/+tEU0nkls3/zIUMPKNX/6yZLf+kFgAfgGyLFAUwY//uQZAUABcd5UiNPVXAAAApAAAAAE0VZQKw9ISAAACgAAAAAVQIygIElVrFkBS+Jhi+EAuu+lKAkYUEIsmEAEoMeDmCETMvfSHTGkF5RWH7kz/ESHWPAq/kcCRhqBtMdokPdM7vil7RG98A2sc7zO6ZvTdM7pmOUAZTnJW+NXxqmd41dqJ6mLTXxrPpnV8avaIf5SvL7pndPvPpndJR9Kuu8fePvuiuhorgWjp7Mf/PRjxcFCPDkW31srioCExivv9lcwKEaHsf/7ow2Fl1T/9RkXgEhYElAoCLFtMArxwivDJJ+bR1HTKJdlEoTELCIqgEwVGSQ+hIm0NbK8WXcTEI0UPoa2NbG4y2K00JEWbZavJXkYaqo9CRHS55FcZTjKEk3NKoCYUnSQ0rWxrZbFKbKIhOKPZe1cJKzZSaQrIyULHDZmV5K4xySsDRKWOruanGtjLJXFEmwaIbDLX0hIPBUQPVFVkQkDoUNfSoDgQGKPekoxeGzA4DUvnn4bxzcZrtJyipKfPNy5w+9lnXwgqsiyHNeSVpemw4bWb9psYeq//uQZBoABQt4yMVxYAIAAAkQoAAAHvYpL5m6AAgAACXDAAAAD59jblTirQe9upFsmZbpMudy7Lz1X1DYsxOOSWpfPqNX2WqktK0DMvuGwlbNj44TleLPQ+Gsfb+GOWOKJoIrWb3cIMeeON6lz2umTqMXV8Mj30yWPpjoSa9ujK8SyeJP5y5mOW1D6hvLepeveEAEDo0mgCRClOEgANv3B9a6fikgUSu/DmAMATrGx7nng5p5iimPNZsfQLYB2sDLIkzRKZOHGAaUyDcpFBSLG9MCQALgAIgQs2YunOszLSAyQYPVC2YdGGeHD2dTdJk1pAHGAWDjnkcLKFymS3RQZTInzySoBwMG0QueC3gMsCEYxUqlrcxK6k1LQQcsmyYeQPdC2YfuGPASCBkcVMQQqpVJshui1tkXQJQV0OXGAZMXSOEEBRirXbVRQW7ugq7IM7rPWSZyDlM3IuNEkxzCOJ0ny2ThNkyRai1b6ev//3dzNGzNb//4uAvHT5sURcZCFcuKLhOFs8mLAAEAt4UWAAIABAAAAAB4qbHo0tIjVkUU//uQZAwABfSFz3ZqQAAAAAngwAAAE1HjMp2qAAAAACZDgAAAD5UkTE1UgZEUExqYynN1qZvqIOREEFmBcJQkwdxiFtw0qEOkGYfRDifBui9MQg4QAHAqWtAWHoCxu1Yf4VfWLPIM2mHDFsbQEVGwyqQoQcwnfHeIkNt9YnkiaS1oizycqJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=");
- void snd.play();
- }
-}
-
-export default SoundUtils;
diff --git a/examples/instant-voice/client/javascript/tsconfig.json b/examples/instant-voice/client/javascript/tsconfig.json
deleted file mode 100644
index c9c555d96..000000000
--- a/examples/instant-voice/client/javascript/tsconfig.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "commonjs", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
- // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
- // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
- // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
- // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
- // "noUncheckedSideEffectImports": true, /* Check side effect imports. */
- // "resolveJsonModule": true, /* Enable importing .json files. */
- // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- // "outDir": "./", /* Specify an output folder for all emitted files. */
- // "removeComments": true, /* Disable emitting comments. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
- // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
- }
-}
diff --git a/examples/instant-voice/client/javascript/vite.config.js b/examples/instant-voice/client/javascript/vite.config.js
deleted file mode 100644
index daf85167d..000000000
--- a/examples/instant-voice/client/javascript/vite.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { defineConfig } from 'vite';
-import react from '@vitejs/plugin-react-swc';
-
-export default defineConfig({
- plugins: [react()],
- server: {
- proxy: {
- // Proxy /api requests to the backend server
- '/connect': {
- target: 'http://0.0.0.0:7860', // Replace with your backend URL
- changeOrigin: true,
- },
- },
- },
-});
diff --git a/examples/instant-voice/server/env.example b/examples/instant-voice/server/env.example
deleted file mode 100644
index 7dd76e98c..000000000
--- a/examples/instant-voice/server/env.example
+++ /dev/null
@@ -1,3 +0,0 @@
-DAILY_API_KEY=
-GOOGLE_API_KEY=
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
\ No newline at end of file
diff --git a/examples/instant-voice/server/pyproject.toml b/examples/instant-voice/server/pyproject.toml
deleted file mode 100644
index 2c2ce8e48..000000000
--- a/examples/instant-voice/server/pyproject.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-[tool.ruff]
-exclude = [".git", "*_pb2.py"]
-line-length = 100
-
-[tool.ruff.lint]
-select = [
- "I", # Import rules
-]
-
-[tool.ruff.lint.pydocstyle]
-convention = "google"
\ No newline at end of file
diff --git a/examples/instant-voice/server/requirements.txt b/examples/instant-voice/server/requirements.txt
deleted file mode 100644
index 292de88c2..000000000
--- a/examples/instant-voice/server/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[openai,silero,websocket,google,daily]
diff --git a/examples/instant-voice/server/src/server.py b/examples/instant-voice/server/src/server.py
deleted file mode 100644
index 0777a3730..000000000
--- a/examples/instant-voice/server/src/server.py
+++ /dev/null
@@ -1,200 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import asyncio
-import os
-from contextlib import asynccontextmanager
-from typing import Any, Dict, List
-
-import aiohttp
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-# Load environment variables
-load_dotenv(override=True)
-
-NUMBER_OF_ROOMS = 1
-
-
-class RoomPool:
- """Manages a pool of pre-created rooms for quick allocation."""
-
- def __init__(self, daily_rest_helper: DailyRESTHelper):
- self.daily_rest_helper = daily_rest_helper
- self.pool: List[Dict[str, str]] = []
- self.lock = asyncio.Lock()
-
- async def fill_pool(self, count: int):
- """Fills the pool with `count` new rooms."""
- for _ in range(count):
- await self.add_room()
-
- async def add_room(self):
- """Creates a new room and adds it to the pool."""
- try:
- room = await self.daily_rest_helper.create_room(DailyRoomParams())
- if not room.url:
- raise HTTPException(status_code=500, detail="Failed to create room")
-
- user_token = await self.daily_rest_helper.get_token(room.url)
- if not user_token:
- raise HTTPException(status_code=500, detail="Failed to get user token")
-
- bot_token = await self.daily_rest_helper.get_token(room.url)
- if not bot_token:
- raise HTTPException(status_code=500, detail="Failed to get bot token")
-
- async with self.lock:
- self.pool.append(
- {"room_url": room.url, "user_token": user_token, "bot_token": bot_token}
- )
-
- except Exception as e:
- print(f"Error adding room to pool: {e}")
-
- async def get_room(self) -> Dict[str, str]:
- """Retrieves a room from the pool and requests a new one to maintain the size."""
- async with self.lock:
- if not self.pool:
- raise HTTPException(status_code=503, detail="No available rooms")
-
- room = self.pool.pop(0) # Get first available room
-
- # Start a background task to replenish the pool
- asyncio.create_task(self.add_room())
-
- return room
-
- async def delete_room(self, room_url: str):
- """Deletes a room when it is not needed anymore"""
- await self.daily_rest_helper.delete_room_by_url(room_url)
-
- async def cleanup(self):
- for rooms in self.pool:
- room_url = rooms["room_url"]
- await self.delete_room(room_url)
-
-
-class BotManager:
- """Manages bot subprocesses asynchronously."""
-
- def __init__(self):
- self.bot_procs: Dict[int, asyncio.subprocess.Process] = {}
- self.room_mappings: Dict[int, str] = {} # Maps process ID to room URL
-
- async def start_bot(self, room_url: str, token: str) -> int:
- bot_file = "single_bot"
- command = f"python3 -m {bot_file} -u {room_url} -t {token}"
-
- try:
- proc = await asyncio.create_subprocess_shell(
- command,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- if proc.pid is None:
- raise HTTPException(status_code=500, detail="Failed to get subprocess PID")
-
- self.bot_procs[proc.pid] = proc
- self.room_mappings[proc.pid] = room_url
- # Monitor the process and delete the room when it exits
- asyncio.create_task(self._monitor_process(proc.pid))
-
- return proc.pid
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- async def _monitor_process(self, pid: int):
- """Monitors a bot process and deletes the associated room when it exits."""
- proc = self.bot_procs.get(pid)
- if proc:
- await proc.wait() # Wait for the process to exit
- room_url = self.room_mappings.pop(pid, None)
-
- if room_url:
- await room_pool.delete_room(room_url)
- print(f"Deleted room: {room_url}")
-
- del self.bot_procs[pid]
-
- async def cleanup(self):
- """Terminates all running bot processes and deletes associated rooms."""
- for pid, proc in list(self.bot_procs.items()):
- try:
- proc.terminate()
- await asyncio.wait_for(proc.wait(), timeout=5)
-
- room_url = self.room_mappings.pop(pid, None)
- if room_url:
- await room_pool.delete_room(room_url) # Delete room when process terminates
- print(f"Deleted room: {room_url}")
-
- except asyncio.TimeoutError:
- print(f"Process {pid} did not terminate in time.")
- except Exception as e:
- print(f"Error terminating process {pid}: {e}")
-
- # Clear remaining mappings
- self.bot_procs.clear()
- self.room_mappings.clear()
-
-
-# Global instances
-bot_manager = BotManager()
-room_pool: RoomPool # Will be initialized in lifespan
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """Handles FastAPI startup and shutdown."""
- global room_pool
- aiohttp_session = aiohttp.ClientSession()
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- room_pool = RoomPool(daily_rest_helper)
- await room_pool.fill_pool(NUMBER_OF_ROOMS) # Fill pool on startup
-
- yield # Run app
-
- await bot_manager.cleanup()
- await room_pool.cleanup()
- await aiohttp_session.close()
-
-
-# Initialize FastAPI app with lifespan manager
-app = FastAPI(lifespan=lifespan)
-
-# Configure CORS to allow requests from any origin
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.post("/connect")
-async def bot_connect(request: Request) -> Dict[Any, Any]:
- try:
- room = await room_pool.get_room()
- await bot_manager.start_bot(room["room_url"], room["bot_token"])
- except HTTPException as e:
- return {"error": str(e)}
-
- return {
- "room_url": room["room_url"],
- "token": room["user_token"],
- }
-
-
-if __name__ == "__main__":
- uvicorn.run(app, host="0.0.0.0", port=7860)
diff --git a/examples/instant-voice/server/src/single_bot.py b/examples/instant-voice/server/src/single_bot.py
deleted file mode 100644
index 23a6008cb..000000000
--- a/examples/instant-voice/server/src/single_bot.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import argparse
-import asyncio
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.services.gemini_multimodal_live import GeminiMultimodalLiveLLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-SYSTEM_INSTRUCTION = f"""
-"You are Gemini Chatbot, a friendly, helpful robot.
-
-Your goal is to demonstrate your capabilities in a succinct way.
-
-Your output will be converted to audio so don't include special characters in your answers.
-
-Respond to what the user said in a creative and helpful way. Keep your responses brief. One or two sentences at most.
-"""
-
-
-def extract_arguments():
- parser = argparse.ArgumentParser(description="Instant Voice Example")
- parser.add_argument(
- "-u", "--url", type=str, required=True, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-t", "--token", type=str, required=False, help="Token of the Daily room to join"
- )
- args, unknown = parser.parse_known_args()
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- token = args.token
- return url, token
-
-
-async def main():
- room_url, token = extract_arguments()
- print(f"room_url: {room_url}")
-
- daily_transport = DailyTransport(
- room_url,
- token,
- "Instant voice Chatbot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- voice_id="Puck", # Aoede, Charon, Fenrir, Kore, Puck
- transcribe_user_audio=True,
- system_instruction=SYSTEM_INSTRUCTION,
- )
-
- context = OpenAILLMContext()
- context_aggregator = llm.create_context_aggregator(context)
-
- # RTVI events for Pipecat client UI
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]), transport=daily_transport)
-
- pipeline = Pipeline(
- [
- daily_transport.input(),
- context_aggregator.user(),
- rtvi,
- llm, # LLM
- daily_transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @daily_transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.debug("First participant joined: {}", participant["id"])
-
- @daily_transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.debug(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False)
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/local-input-select-stt/README.md b/examples/local-input-select-stt/README.md
deleted file mode 100644
index c5aa58b35..000000000
--- a/examples/local-input-select-stt/README.md
+++ /dev/null
@@ -1,88 +0,0 @@
-
-# Pipecat Audio Transcription Example ๐๐๏ธ
-
-Welcome to the **Pipecat Audio Transcription Example**!
-
-This project showcases how to integrate the awesome [pipecat](https://github.com/pipecat-ai/pipecat) library with a neat textual interface (powered by [Textual](https://github.com/Textualize/textual)) to select audio devices, perform real-time speech-to-text (STT) transcription using [Whisper](https://github.com/openai/whisper).
-
-> **Note:** Although the script allows you to select both input and output audio devices, this example only utilizes the audio **input** for transcription.
-
----
-
-## ๐ Features
-
-- **Interactive Audio Device Selection:**
- Choose your preferred audio input device using a cool, textual UI.
-
-- **State-of-the-Art Transcription:**
- Leverage Whisper's large model (running on CUDA) for high-quality, real-time STT.
-
-- **Live Transcription Logging:**
- Watch your spoken words transform into text on your console instantly.
-
-- **Easy Setup:**
- Everything you need is in the [`requirements.txt`](./requirements.txt).
-
----
-
-## ๐ฅ Demo
-
-Get a quick glimpse of the app in action!
-*(Don't worry โ I'll be adding a GIF demo here soon!)*
-
-
-
----
-
-## ๐ง Installation
-
-
-Install Dependencies:
-
-```bash
-pip install -r requirements.txt
-```
-
-
----
-
-## ๐ Usage
-
-Run the main script:
-
-```bash
-python bot.py
-```
-
-When the app launches, you'll see a textual interface that lets you select your audio input device. Once selected, the app will begin capturing audio, transcribing it using Whisper.
-
----
-
-## โ๏ธ How It Works
-
-
-1. **LocalAudioTransport:**
- Captures audio from your chosen input device.
-
-2. **WhisperSTTService:**
- Processes the audio stream using Whisper's large model for speech-to-text conversion.
-
-3. **TranscriptionLogger:**
- Logs the transcribed text to the console as soon as it's processed.
-
-
----
-
-## ๐ฆ Dependencies
-
-The project relies on:
-
-- [pipecat](https://github.com/yourusername/pipecat) โ For building the audio processing pipeline.
-- [Textual](https://github.com/Textualize/textual) โ For the interactive terminal UI.
-- [Whisper](https://github.com/openai/whisper) โ For state-of-the-art STT transcription.
-
----
-
-## Example improvements:
-
-I plan to improve this example with local LLM calls and audio output.
diff --git a/examples/local-input-select-stt/bot.py b/examples/local-input-select-stt/bot.py
deleted file mode 100644
index 26cbbdfa3..000000000
--- a/examples/local-input-select-stt/bot.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import sys
-from typing import Tuple
-
-from dotenv import load_dotenv
-from loguru import logger
-from select_audio_device import AudioDevice, run_device_selector
-
-from pipecat.observers.loggers.transcription_log_observer import TranscriptionLogObserver
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineTask
-from pipecat.services.whisper.stt import Model, WhisperSTTService
-from pipecat.transports.local.audio import LocalAudioTransport, LocalAudioTransportParams
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-async def main(input_device: int, output_device: int):
- transport = LocalAudioTransport(
- LocalAudioTransportParams(
- audio_in_enabled=True,
- audio_out_enabled=False,
- input_device_index=input_device,
- output_device_index=output_device,
- )
- )
-
- stt = WhisperSTTService(device="cuda", model=Model.LARGE, no_speech_prob=0.3)
-
- pipeline = Pipeline([transport.input(), stt])
-
- task = PipelineTask(pipeline, observers=[TranscriptionLogObserver()])
-
- runner = PipelineRunner(handle_sigint=False if sys.platform == "win32" else True)
-
- await asyncio.gather(runner.run(task))
-
-
-if __name__ == "__main__":
- res: Tuple[AudioDevice, AudioDevice, int] = asyncio.run(
- run_device_selector() # runs the textual app that allows to select input device
- )
-
- asyncio.run(main(res[0].index, res[1].index))
diff --git a/examples/local-input-select-stt/demo.gif b/examples/local-input-select-stt/demo.gif
deleted file mode 100644
index f4beb2cb7..000000000
Binary files a/examples/local-input-select-stt/demo.gif and /dev/null differ
diff --git a/examples/local-input-select-stt/requirements.txt b/examples/local-input-select-stt/requirements.txt
deleted file mode 100644
index 16bf20994..000000000
--- a/examples/local-input-select-stt/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-pipecat-ai[whisper, openai]
-textual==1.0.0
-pydantic-settings==2.7.1
-pyaudio==0.2.14
diff --git a/examples/local-input-select-stt/select_audio_device.py b/examples/local-input-select-stt/select_audio_device.py
deleted file mode 100644
index b6875e407..000000000
--- a/examples/local-input-select-stt/select_audio_device.py
+++ /dev/null
@@ -1,253 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-from typing import List, Optional, Tuple
-
-import pyaudio
-from pydantic import BaseModel, ConfigDict, Field
-from pydantic_settings import BaseSettings
-from textual.app import App, ComposeResult
-from textual.containers import Container
-from textual.widgets import Footer, Header, Label, ListItem, ListView, Select
-from textual.widgets.option_list import Option
-
-# โโโ DATA MODELS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
-
-
-class HostApi(BaseModel):
- index: int
- struct_version: int = Field(..., alias="structVersion")
- type: int
- name: str
- device_count: int = Field(..., alias="deviceCount")
- default_input_device: int = Field(..., alias="defaultInputDevice")
- default_output_device: int = Field(..., alias="defaultOutputDevice")
-
-
-class AudioDevice(BaseModel):
- model_config = ConfigDict(populate_by_name=True)
- index: int
- struct_version: int = Field(..., alias="structVersion")
- name: str
- host_api: int = Field(..., alias="hostApi")
- max_input_channels: int = Field(..., alias="maxInputChannels")
- max_output_channels: int = Field(..., alias="maxOutputChannels")
- default_low_input_latency: float = Field(..., alias="defaultLowInputLatency")
- default_low_output_latency: float = Field(..., alias="defaultLowOutputLatency")
- default_high_input_latency: float = Field(..., alias="defaultHighInputLatency")
- default_high_output_latency: float = Field(..., alias="defaultHighOutputLatency")
- default_sample_rate: float = Field(..., alias="defaultSampleRate")
-
-
-# โโโ SETTINGS MODEL โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
-
-
-class AudioSettings(BaseSettings): # to save settings to a file
- host_api: Optional[int] = None
- input_device: Optional[AudioDevice] = None
- output_device: Optional[AudioDevice] = None
-
- class Config:
- env_file = "settings.env" # or adjust as needed
-
- def save_to_json(self, filepath: str) -> None:
- with open(filepath, "w") as f:
- f.write(self.model_dump_json(indent=2))
-
-
-# โโโ TEXTUAL APP โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
-
-
-class AudioDeviceSelectorApp(App):
- CSS = """
- Screen {
- align: center middle;
- }
- #container {
- width: 80%;
- border: round green;
- padding: 1 2;
- }
- """
-
- def __init__(
- self,
- default_host_api: Optional[int] = None,
- default_input_device: Optional[AudioDevice] = None,
- default_output_device: Optional[AudioDevice] = None,
- **kwargs,
- ) -> None:
- super().__init__(**kwargs)
- # Save defaults passed from settings.
- self.default_host_api: Optional[int] = default_host_api
- self.default_input_device: Optional[AudioDevice] = default_input_device
- self.default_output_device: Optional[AudioDevice] = default_output_device
-
- self.pyaudio_instance = pyaudio.PyAudio()
-
- # Static datastructures: host APIs and devices as wellโtyped models.
- self.host_apis: List[HostApi] = []
- self.current_host_api: Optional[int] = None
-
- self.all_input_devices: List[AudioDevice] = []
- self.all_output_devices: List[AudioDevice] = []
- self.input_devices: List[AudioDevice] = []
- self.output_devices: List[AudioDevice] = []
-
- # Stage management: first select input, then output.
- self.stage: str = "input"
- self.selected_input_device: Optional[AudioDevice] = None
- self.selected_output_device: Optional[AudioDevice] = None
- host_api_count: int = self.pyaudio_instance.get_host_api_count()
- for i in range(host_api_count):
- raw_api = self.pyaudio_instance.get_host_api_info_by_index(i)
- # Inject the index (if not already present)
- raw_api["index"] = i
- try:
- api = HostApi.parse_obj(raw_api)
- self.host_apis.append(api)
- except Exception as e:
- # Skip APIs that don't conform.
- continue
-
- def compose(self) -> ComposeResult:
- options: List[Tuple[str, Option]] = [
- (
- api.name,
- Option(
- prompt=str(api.name) if api.name else f"Host API {api.index}",
- id=str(api.index),
- ),
- )
- for api in self.host_apis
- ]
-
- yield Header()
-
- yield Footer()
- with Container(id="container"):
- yield Label("Select Host API:", id="host-api-label")
- # Create the Select widget with no options initially.
- self.host_api_select: Select[HostApi] = Select(options=options, id="host-api-select")
- yield self.host_api_select
- self.prompt = Label("Select Input Audio Device:", id="prompt")
- yield self.prompt
- self.list_view = ListView(id="device-list")
- yield self.list_view
-
- def on_mount(self) -> None:
- # Populate host APIs from PyAudio.
-
- # Build the dropdown options.
-
- self.host_api_select.refresh() # Force a redraw
-
- # Determine the default host API.
- if self.default_host_api is not None:
- self.current_host_api = self.default_host_api
- else:
- default_api_info = self.pyaudio_instance.get_default_host_api_info()
- self.current_host_api = default_api_info["index"]
-
- # Delay setting the dropdown's value until the widget is fully initialized.
- self.set_timer(
- 0,
- lambda: setattr(self.host_api_select, "value", str(self.current_host_api)),
- )
-
- # Load all devices and parse them into AudioDevice objects.
- device_count: int = self.pyaudio_instance.get_device_count()
- for i in range(device_count):
- raw_device = self.pyaudio_instance.get_device_info_by_index(i)
- raw_device["index"] = i
- try:
- device = AudioDevice.parse_obj(raw_device)
- except Exception as e:
- # Skip devices missing required fields.
- continue
- if device.max_input_channels > 0:
- self.all_input_devices.append(device)
- if device.max_output_channels > 0:
- self.all_output_devices.append(device)
-
- self.filter_devices()
- self.populate_list(self.input_devices)
- if self.default_input_device:
- self._select_default_in_list(self.default_input_device)
-
- def filter_devices(self) -> None:
- """Filter devices based on the selected host API."""
- self.input_devices = [
- d for d in self.all_input_devices if d.host_api == self.current_host_api
- ]
- self.output_devices = [
- d for d in self.all_output_devices if d.host_api == self.current_host_api
- ]
-
- def populate_list(self, devices: List[AudioDevice]) -> None:
- """Populate the ListView with a list of AudioDevice objects."""
- self.list_view.clear()
- for dev in devices:
- item_text: str = f"{dev.name} (Index: {dev.index})"
- item = ListItem(Label(item_text))
- # Attach the AudioDevice instance to the widget.
- item.device_info = dev # type: ignore
- self.list_view.append(item)
-
- def _select_default_in_list(self, default_device: AudioDevice) -> None:
- """Pre-select the default device if present in the current list."""
- for idx, item in enumerate(self.list_view.children):
- if hasattr(item, "device_info") and item.device_info.index == default_device.index:
- self.list_view.index = idx
- break
-
- async def on_select_changed(self, event: Select.Changed) -> None:
- """Handle changes in the host API dropdown."""
- if event.select.id == "host-api-select":
- self.current_host_api = int(event.value.id)
- self.filter_devices()
- if self.stage == "input":
- self.populate_list(self.input_devices)
- if self.default_input_device:
- self._select_default_in_list(self.default_input_device)
- elif self.stage == "output":
- self.populate_list(self.output_devices)
- if self.default_output_device:
- self._select_default_in_list(self.default_output_device)
-
- async def on_list_view_selected(self, message: ListView.Selected) -> None:
- """Record device selection and switch stages."""
- selected_item = message.item
- device_info: AudioDevice = selected_item.device_info # type: ignore
- if self.stage == "input":
- self.selected_input_device = device_info
- self.stage = "output"
- self.prompt.update("Select Output Audio Device:")
- self.populate_list(self.output_devices)
- if self.default_output_device:
- self._select_default_in_list(self.default_output_device)
- elif self.stage == "output":
- self.selected_output_device = device_info
- await self.action_quit()
-
-
-# โโโ HELPER FUNCTIONS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
-
-
-async def run_device_selector(
- default_host_api: Optional[int] = None,
- default_input_device: Optional[AudioDevice] = None,
- default_output_device: Optional[AudioDevice] = None,
-) -> Tuple[AudioDevice, AudioDevice, int]:
- app = AudioDeviceSelectorApp(
- default_host_api=default_host_api,
- default_input_device=default_input_device,
- default_output_device=default_output_device,
- )
- await app.run_async()
-
- # The current_host_api is guaranteed to be set.
- return app.selected_input_device, app.selected_output_device, app.current_host_api # type: ignore
diff --git a/examples/moondream-chatbot/.dockerignore b/examples/moondream-chatbot/.dockerignore
deleted file mode 100644
index 994402bfd..000000000
--- a/examples/moondream-chatbot/.dockerignore
+++ /dev/null
@@ -1,163 +0,0 @@
-# flyctl launch added from .gitignore
-# Byte-compiled / optimized / DLL files
-**/__pycache__
-**/*.py[cod]
-**/*$py.class
-
-# C extensions
-**/*.so
-
-# Distribution / packaging
-**/.Python
-**/build
-**/develop-eggs
-**/dist
-**/downloads
-**/eggs
-**/.eggs
-**/lib
-**/lib64
-**/parts
-**/sdist
-**/var
-**/wheels
-**/share/python-wheels
-**/*.egg-info
-**/.installed.cfg
-**/*.egg
-**/MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-**/*.manifest
-**/*.spec
-
-# Installer logs
-**/pip-log.txt
-**/pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-**/htmlcov
-**/.tox
-**/.nox
-**/.coverage
-**/.coverage.*
-**/.cache
-**/nosetests.xml
-**/coverage.xml
-**/*.cover
-**/*.py,cover
-**/.hypothesis
-**/.pytest_cache
-**/cover
-
-# Translations
-**/*.mo
-**/*.pot
-
-# Django stuff:
-**/*.log
-**/local_settings.py
-**/db.sqlite3
-**/db.sqlite3-journal
-
-# Flask stuff:
-**/instance
-**/.webassets-cache
-
-# Scrapy stuff:
-**/.scrapy
-
-# Sphinx documentation
-**/docs/_build
-
-# PyBuilder
-**/.pybuilder
-**/target
-
-# Jupyter Notebook
-**/.ipynb_checkpoints
-
-# IPython
-**/profile_default
-**/ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-**/.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-**/__pypackages__
-
-# Celery stuff
-**/celerybeat-schedule
-**/celerybeat.pid
-
-# SageMath parsed files
-**/*.sage.py
-
-# Environments
-**/.env
-**/.venv
-**/env
-**/venv
-**/ENV
-**/env.bak
-**/venv.bak
-
-# Spyder project settings
-**/.spyderproject
-**/.spyproject
-
-# Rope project settings
-**/.ropeproject
-
-# mkdocs documentation
-site
-
-# mypy
-**/.mypy_cache
-**/.dmypy.json
-**/dmypy.json
-
-# Pyre type checker
-**/.pyre
-
-# pytype static type analyzer
-**/.pytype
-
-# Cython debug symbols
-**/cython_debug
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-**/runpod.toml
-fly.toml
diff --git a/examples/moondream-chatbot/.gitignore b/examples/moondream-chatbot/.gitignore
deleted file mode 100644
index 2bc1403d1..000000000
--- a/examples/moondream-chatbot/.gitignore
+++ /dev/null
@@ -1,161 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-runpod.toml
diff --git a/examples/moondream-chatbot/Dockerfile b/examples/moondream-chatbot/Dockerfile
deleted file mode 100644
index d5948d5c1..000000000
--- a/examples/moondream-chatbot/Dockerfile
+++ /dev/null
@@ -1,25 +0,0 @@
-FROM ubuntu:22.04
-
-RUN apt-get update && apt-get install -y wget
-RUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
-RUN dpkg -i cuda-keyring_1.1-1_all.deb
-
-RUN echo "deb [signed-by=/usr/share/keyrings/cuda-archive-keyring.gpg] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" > /etc/apt/sources.list.d/cuda-ubuntu2204-x86_64.list
-
-RUN apt-get update && apt-get install -y python3 python3-pip
-RUN apt-get install -y cuda-nvcc-12-4 libcublas-12-4 libcudnn8
-
-RUN mkdir /app
-RUN mkdir /app/assets
-RUN mkdir /app/utils
-COPY *.py /app/
-COPY requirements.txt /app/
-copy assets/* /app/assets/
-copy utils/* /app/utils/
-
-WORKDIR /app
-RUN pip3 install -r requirements.txt
-
-EXPOSE 7860
-
-CMD ["python3", "server.py"]
diff --git a/examples/moondream-chatbot/Dockerfile.intel b/examples/moondream-chatbot/Dockerfile.intel
deleted file mode 100644
index 57028b53e..000000000
--- a/examples/moondream-chatbot/Dockerfile.intel
+++ /dev/null
@@ -1,76 +0,0 @@
-FROM ubuntu:22.04
-
-# environment variables for Intel OneAPI components
-ENV DPCPPROOT=/opt/intel/oneapi/compiler/latest
-ENV MKLROOT=/opt/intel/oneapi/mkl/latest
-ENV CCLROOT=/opt/intel/oneapi/ccl/latest
-ENV MPIROOT=/opt/intel/oneapi/mpi/latest
-
-# Install necessary dependencies
-RUN apt-get update && apt-get install -y --no-install-recommends \
- build-essential \
- wget \
- lsb-release \
- pciutils \
- gnupg2 \
- python3-pip
-
-# Add Intel OneAPI repository and GPG key
-# Intel GPU repository and GPG key
-# Install Intel OneAPI components and source the environment scripts
-RUN wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null && \
- echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | tee /etc/apt/sources.list.d/oneAPI.list && \
- /bin/bash -c ' \
- . /etc/os-release && \
- if [[ " jammy " =~ " ${VERSION_CODENAME} " ]]; then \
- wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg && \
- echo "deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu ${VERSION_CODENAME}/lts/2350 unified" | \
- tee /etc/apt/sources.list.d/intel-gpu-${VERSION_CODENAME}.list && \
- apt-get update && \
- apt-get install -y --no-install-recommends intel-opencl-icd \
- intel-level-zero-gpu level-zero intel-media-va-driver-non-free \
- libmfx1 libmfxgen1 libvpl2 libegl-mesa0 libegl1-mesa \
- libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri \
- libglapi-mesa libgles2-mesa-dev libglx-mesa0 libigdgmm12 \
- libxatracker2 mesa-va-drivers mesa-vdpau-drivers \
- mesa-vulkan-drivers va-driver-all; \
- else \
- echo "Ubuntu version ${VERSION_CODENAME} not supported. Exiting..."; \
- exit 1; \
- fi' && \
- apt-get update && apt-get install -y --no-install-recommends \
- intel-oneapi-dpcpp-cpp-2024.1=2024.1.0-963 intel-oneapi-mkl-devel=2024.1.0-691 \
- intel-oneapi-ccl-devel=2021.12.0-309 && \
- apt-get clean && rm -rf /var/lib/apt/lists/* && \
- groupadd -r render && usermod -aG render root && \
- echo "source ${DPCPPROOT}/env/vars.sh" >> ~/.bashrc && \
- echo "source ${MKLROOT}/env/vars.sh" >> ~/.bashrc && \
- echo "source ${CCLROOT}/env/vars.sh" >> ~/.bashrc && \
- echo "source ${MPIROOT}/env/vars.sh" >> ~/.bashrc && \
- echo "export LD_LIBRARY_PATH=${MKLROOT}/lib:${DPCPPROOT}/linux/compiler/lib/intel64_lin:$LD_LIBRARY_PATH" >> ~/.bashrc
-
-WORKDIR /app
-COPY . /app
-RUN mkdir -p /app /app/assets /app/utils
-COPY *.py requirements.txt assets/* utils/* /app/
-
-# Install the Intel-specific versions of torch
-RUN python3 -m pip install --no-cache-dir -r requirements.txt && \
- pip uninstall -y torch && \
- pip freeze | grep 'nvidia-' | xargs pip uninstall -y && \
- pip install --no-cache-dir --force-reinstall torch==2.1.0.post2 torchvision==0.16.0.post2 torchaudio==2.1.0.post2 \
- intel-extension-for-pytorch==2.1.30+xpu oneccl_bind_pt==2.1.300+xpu \
- --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/
-
-RUN echo '#!/bin/bash\n\
-source ${DPCPPROOT}/env/vars.sh\n\
-source ${MKLROOT}/env/vars.sh\n\
-source ${CCLROOT}/env/vars.sh\n\
-source ${MPIROOT}/env/vars.sh\n\
-export LD_LIBRARY_PATH=${MKLROOT}/lib:${DPCPPROOT}/linux/compiler/lib/intel64_lin:$LD_LIBRARY_PATH\n\
-python3 server.py' > /usr/local/bin/run_app.sh && \
- chmod +x /usr/local/bin/run_app.sh && \
- find / -type d -name "__pycache__" -exec rm -rf {} +
-
-EXPOSE 7860
-ENTRYPOINT ["/usr/local/bin/run_app.sh"]
diff --git a/examples/moondream-chatbot/README.md b/examples/moondream-chatbot/README.md
deleted file mode 100644
index bf8c7661a..000000000
--- a/examples/moondream-chatbot/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Moondream Chatbot
-
-
-
-
-This app connects you to a chatbot powered by GPT-4, complete with animations generated by Stable Video Diffusion. The chatbot also has vision powers thanks to [Moondream](https://moondream.ai) so you can ask it, for example, "what do you see?".
-
-โน๏ธ The first time, things might take some time to get started since VAD (Voice Activity Detection) and vision models need to be downloaded.
-
-## Get started
-
-```python
-python3 -m venv venv
-source venv/bin/activate
-pip install -r requirements.txt
-
-cp env.example .env # and add your credentials
-
-```
-
-## Run the server
-
-```bash
-python server.py
-```
-
-Then, visit `http://localhost:7860/` in your browser to start a chatbot
-session.
-
-## Build and test the Docker image
-
-```
-docker build -t moonbot .
-docker run --env-file .env -p 7860:7860 moonbot
-```
-
-### For Intel GPUs (Arc, Max and Flex series)
-
-```
-docker build -t moonbot -f Dockerfile.intel .
-docker run --env-file .env -p 7860:7860 --device /dev/dri moonbot
-```
-
-You can try to visit `http://localhost:7860/` again.
diff --git a/examples/moondream-chatbot/assets/robot01.png b/examples/moondream-chatbot/assets/robot01.png
deleted file mode 100644
index 3864411dc..000000000
Binary files a/examples/moondream-chatbot/assets/robot01.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot010.png b/examples/moondream-chatbot/assets/robot010.png
deleted file mode 100644
index e389e0933..000000000
Binary files a/examples/moondream-chatbot/assets/robot010.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot011.png b/examples/moondream-chatbot/assets/robot011.png
deleted file mode 100644
index c0f0633f3..000000000
Binary files a/examples/moondream-chatbot/assets/robot011.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot012.png b/examples/moondream-chatbot/assets/robot012.png
deleted file mode 100644
index e5fb2a7d1..000000000
Binary files a/examples/moondream-chatbot/assets/robot012.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot013.png b/examples/moondream-chatbot/assets/robot013.png
deleted file mode 100644
index cd62a2005..000000000
Binary files a/examples/moondream-chatbot/assets/robot013.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot014.png b/examples/moondream-chatbot/assets/robot014.png
deleted file mode 100644
index 516ca4e8b..000000000
Binary files a/examples/moondream-chatbot/assets/robot014.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot015.png b/examples/moondream-chatbot/assets/robot015.png
deleted file mode 100644
index 9b9242691..000000000
Binary files a/examples/moondream-chatbot/assets/robot015.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot016.png b/examples/moondream-chatbot/assets/robot016.png
deleted file mode 100644
index cbd2d9d6f..000000000
Binary files a/examples/moondream-chatbot/assets/robot016.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot017.png b/examples/moondream-chatbot/assets/robot017.png
deleted file mode 100644
index 5780fa27a..000000000
Binary files a/examples/moondream-chatbot/assets/robot017.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot018.png b/examples/moondream-chatbot/assets/robot018.png
deleted file mode 100644
index 5c983704d..000000000
Binary files a/examples/moondream-chatbot/assets/robot018.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot019.png b/examples/moondream-chatbot/assets/robot019.png
deleted file mode 100644
index c0f9bef58..000000000
Binary files a/examples/moondream-chatbot/assets/robot019.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot02.png b/examples/moondream-chatbot/assets/robot02.png
deleted file mode 100644
index 267969849..000000000
Binary files a/examples/moondream-chatbot/assets/robot02.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot020.png b/examples/moondream-chatbot/assets/robot020.png
deleted file mode 100644
index 88bcfa04a..000000000
Binary files a/examples/moondream-chatbot/assets/robot020.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot021.png b/examples/moondream-chatbot/assets/robot021.png
deleted file mode 100644
index 5d30e6029..000000000
Binary files a/examples/moondream-chatbot/assets/robot021.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot022.png b/examples/moondream-chatbot/assets/robot022.png
deleted file mode 100644
index 0e2d412ed..000000000
Binary files a/examples/moondream-chatbot/assets/robot022.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot023.png b/examples/moondream-chatbot/assets/robot023.png
deleted file mode 100644
index d4bc03938..000000000
Binary files a/examples/moondream-chatbot/assets/robot023.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot024.png b/examples/moondream-chatbot/assets/robot024.png
deleted file mode 100644
index 62f60c815..000000000
Binary files a/examples/moondream-chatbot/assets/robot024.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot025.png b/examples/moondream-chatbot/assets/robot025.png
deleted file mode 100644
index c2ac6639e..000000000
Binary files a/examples/moondream-chatbot/assets/robot025.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot03.png b/examples/moondream-chatbot/assets/robot03.png
deleted file mode 100644
index 1cb8c76d5..000000000
Binary files a/examples/moondream-chatbot/assets/robot03.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot04.png b/examples/moondream-chatbot/assets/robot04.png
deleted file mode 100644
index 155d19f47..000000000
Binary files a/examples/moondream-chatbot/assets/robot04.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot05.png b/examples/moondream-chatbot/assets/robot05.png
deleted file mode 100644
index b5a5c4b79..000000000
Binary files a/examples/moondream-chatbot/assets/robot05.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot06.png b/examples/moondream-chatbot/assets/robot06.png
deleted file mode 100644
index b5733db5f..000000000
Binary files a/examples/moondream-chatbot/assets/robot06.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot07.png b/examples/moondream-chatbot/assets/robot07.png
deleted file mode 100644
index 8b5d57655..000000000
Binary files a/examples/moondream-chatbot/assets/robot07.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot08.png b/examples/moondream-chatbot/assets/robot08.png
deleted file mode 100644
index f7600a559..000000000
Binary files a/examples/moondream-chatbot/assets/robot08.png and /dev/null differ
diff --git a/examples/moondream-chatbot/assets/robot09.png b/examples/moondream-chatbot/assets/robot09.png
deleted file mode 100644
index 16c1a98ba..000000000
Binary files a/examples/moondream-chatbot/assets/robot09.png and /dev/null differ
diff --git a/examples/moondream-chatbot/bot.py b/examples/moondream-chatbot/bot.py
deleted file mode 100644
index dcda37ca5..000000000
--- a/examples/moondream-chatbot/bot.py
+++ /dev/null
@@ -1,213 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from PIL import Image
-from runner import configure
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- BotStartedSpeakingFrame,
- BotStoppedSpeakingFrame,
- Frame,
- ImageRawFrame,
- OutputImageRawFrame,
- SpriteFrame,
- TextFrame,
- UserImageRequestFrame,
-)
-from pipecat.pipeline.parallel_pipeline import ParallelPipeline
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.aggregators.sentence import SentenceAggregator
-from pipecat.processors.aggregators.vision_image_frame import VisionImageFrameAggregator
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.moondream.vision import MoondreamService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-user_request_answer = "Let me take a look."
-
-sprites = []
-
-script_dir = os.path.dirname(__file__)
-
-for i in range(1, 26):
- # Build the full path to the image file
- full_path = os.path.join(script_dir, f"assets/robot0{i}.png")
- # Get the filename without the extension to use as the dictionary key
- # Open the image and convert it to bytes
- with Image.open(full_path) as img:
- sprites.append(OutputImageRawFrame(image=img.tobytes(), size=img.size, format=img.format))
-
-flipped = sprites[::-1]
-sprites.extend(flipped)
-
-# When the bot isn't talking, show a static image of the cat listening
-quiet_frame = sprites[0]
-talking_frame = SpriteFrame(images=sprites)
-
-
-class TalkingAnimation(FrameProcessor):
- """This class starts a talking animation when it receives an first BotStartedSpeakingFrame,
- and then returns to a "quiet" sprite when it sees a BotStoppedSpeakingFrame.
- """
-
- def __init__(self):
- super().__init__()
- self._is_talking = False
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, BotStartedSpeakingFrame):
- if not self._is_talking:
- await self.push_frame(talking_frame)
- self._is_talking = True
- elif isinstance(frame, BotStoppedSpeakingFrame):
- await self.push_frame(quiet_frame)
- self._is_talking = False
-
- await self.push_frame(frame, direction)
-
-
-class UserImageRequester(FrameProcessor):
- def __init__(self):
- super().__init__()
- self.participant_id = None
-
- def set_participant_id(self, participant_id: str):
- self.participant_id = participant_id
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if self.participant_id and isinstance(frame, TextFrame):
- if frame.text == user_request_answer:
- await self.push_frame(
- UserImageRequestFrame(self.participant_id), FrameDirection.UPSTREAM
- )
- await self.push_frame(TextFrame("Describe the image in a short sentence."))
- else:
- await self.push_frame(frame, direction)
-
-
-class TextFilterProcessor(FrameProcessor):
- def __init__(self, text: str):
- super().__init__()
- self.text = text
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, TextFrame):
- if frame.text != self.text:
- await self.push_frame(frame)
- else:
- await self.push_frame(frame, direction)
-
-
-class ImageFilterProcessor(FrameProcessor):
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if not isinstance(frame, ImageRawFrame):
- await self.push_frame(frame, direction)
-
-
-async def main():
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_in_enabled=True,
- video_out_enabled=True,
- video_out_width=1024,
- video_out_height=576,
- transcription_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- ta = TalkingAnimation()
-
- sa = SentenceAggregator()
- ir = UserImageRequester()
- va = VisionImageFrameAggregator()
-
- # If you run into weird description, try with use_cpu=True
- moondream = MoondreamService()
-
- tf = TextFilterProcessor(user_request_answer)
- imgf = ImageFilterProcessor()
-
- messages = [
- {
- "role": "system",
- "content": f"You are Chatbot, a friendly, helpful robot. Let the user know that you are capable of chatting or describing what you see. Your goal is to demonstrate your capabilities in a succinct way. Reply with only '{user_request_answer}' if the user asks you to describe what you see. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way, but keep your responses brief. Start by introducing yourself.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(),
- context_aggregator.user(),
- llm,
- ParallelPipeline([sa, ir, va, moondream], [tf, imgf]),
- tts,
- ta,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(pipeline)
- await task.queue_frame(quiet_frame)
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
- await transport.capture_participant_video(participant["id"], framerate=0)
- ir.set_participant_id(participant["id"])
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/moondream-chatbot/env.example b/examples/moondream-chatbot/env.example
deleted file mode 100644
index 571ebb8b4..000000000
--- a/examples/moondream-chatbot/env.example
+++ /dev/null
@@ -1,4 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
-DAILY_API_KEY=7df...
-OPENAI_API_KEY=sk-PL...
-CARTESIA_API_KEY=your_cartesia_api_key_here
diff --git a/examples/moondream-chatbot/image.png b/examples/moondream-chatbot/image.png
deleted file mode 100644
index 17ba5401f..000000000
Binary files a/examples/moondream-chatbot/image.png and /dev/null differ
diff --git a/examples/moondream-chatbot/requirements.txt b/examples/moondream-chatbot/requirements.txt
deleted file mode 100644
index 08fd27cb7..000000000
--- a/examples/moondream-chatbot/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[daily,cartesia,moondream,openai,silero]
diff --git a/examples/moondream-chatbot/runner.py b/examples/moondream-chatbot/runner.py
deleted file mode 100644
index ad39a3ac4..000000000
--- a/examples/moondream-chatbot/runner.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/moondream-chatbot/server.py b/examples/moondream-chatbot/server.py
deleted file mode 100644
index 9597bdc9a..000000000
--- a/examples/moondream-chatbot/server.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-# Load environment variables from .env file
-load_dotenv(override=True)
-
-MAX_BOTS_PER_ROOM = 1
-
-# Bot sub-process dict for status reporting and concurrency control
-bot_procs = {}
-
-daily_helpers = {}
-
-
-def cleanup():
- # Clean up function, just to be extra safe
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-app = FastAPI(lifespan=lifespan)
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.get("/")
-async def start_agent(request: Request):
- print(f"!!! Creating room")
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- print(f"!!! Room URL: {room.url}")
- # Ensure the room property is present
- if not room.url:
- raise HTTPException(
- status_code=500,
- detail="Missing 'room' property in request data. Cannot start agent without a target room!",
- )
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room.url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limited reach for room: {room.url}")
-
- # Get the token for the room
- token = await daily_helpers["rest"].get_token(room.url)
-
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- # Spawn a new agent, and join the user session
- # Note: this is mostly for demonstration purposes (refer to 'deployment' in README)
- try:
- proc = subprocess.Popen(
- [f"python3 -m bot -u {room.url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room.url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room.url)
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- if proc[0].poll() is None:
- status = "running"
- else:
- status = "finished"
-
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Moondream FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/news-chatbot/.gitignore b/examples/news-chatbot/.gitignore
deleted file mode 100644
index 0d298d282..000000000
--- a/examples/news-chatbot/.gitignore
+++ /dev/null
@@ -1,51 +0,0 @@
-# Python
-__pycache__/
-*.py[cod]
-*$py.class
-*.so
-.Python
-build/
-dist/
-*.egg-info/
-.installed.cfg
-*.egg
-.pytest_cache/
-.coverage
-.coverage.*
-.env
-.venv
-env/
-venv/
-ENV/
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# JavaScript/Node.js
-node_modules/
-dist/
-dist-ssr/
-*.local
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-# Logs
-logs/
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-# Editor/IDE
-.vscode/*
-!.vscode/extensions.json
-.idea/
-*.swp
-*.swo
-.DS_Store
-
-# Project specific
-runpod.toml
\ No newline at end of file
diff --git a/examples/news-chatbot/README.md b/examples/news-chatbot/README.md
deleted file mode 100644
index da27a6282..000000000
--- a/examples/news-chatbot/README.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# News Chatbot
-
-A simple AI-powered chatbot that leverages Gemini's real-time search capabilities in a voice AI application.
-
-This example demonstrates Gemini's ability to query Google search in real time and return relevant responses, including links to the URLs that Gemini searched.
-
-All the details about grounding with Google Search can be found [here](https://ai.google.dev/gemini-api/docs/grounding?lang=python).
-
-## Quick Start
-
-### First, start the bot server:
-
-1. Navigate to the server directory:
- ```bash
- cd server
- ```
-2. Create and activate a virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-3. Install requirements:
- ```bash
- pip install -r requirements.txt
- ```
-4. Copy env.example to .env and configure:
- - Add your API keys
-5. Start the server:
- ```bash
- python server.py
- ```
-
-### Next, connect using the client app:
-
-For client-side setup, refer to the [JavaScript Guide](client/javascript/README.md).
-
-## Important Note
-
-Ensure the bot server is running before using any client implementations.
-
-## Requirements
-
-- Python 3.10+
-- Node.js 16+ (for JavaScript and React implementations)
-- Daily API key
-- Gemini API key (for Gemini bot)
-- Cartesia API key
-- Modern web browser with WebRTC support
\ No newline at end of file
diff --git a/examples/news-chatbot/client/javascript/README.md b/examples/news-chatbot/client/javascript/README.md
deleted file mode 100644
index 3b0c7f96e..000000000
--- a/examples/news-chatbot/client/javascript/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# JavaScript Implementation
-
-Basic implementation using the [Pipecat JavaScript SDK](https://docs.pipecat.ai/client/js/introduction).
-
-## Setup
-
-1. Run the bot server. See the [server README](../../README).
-
-2. Navigate to the `client/javascript` directory:
-
-```bash
-cd client/javascript
-```
-
-3. Install dependencies:
-
-```bash
-npm install
-```
-
-4. Run the client app:
-
-```
-npm run dev
-```
-
-5. Visit http://localhost:5173 in your browser.
diff --git a/examples/news-chatbot/client/javascript/index.html b/examples/news-chatbot/client/javascript/index.html
deleted file mode 100644
index 5400c2729..000000000
--- a/examples/news-chatbot/client/javascript/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
- AI Chatbot
-
-
-
-
-
-
- Status: Disconnected
-
-
- Connect
- Disconnect
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/news-chatbot/client/javascript/package-lock.json b/examples/news-chatbot/client/javascript/package-lock.json
deleted file mode 100644
index 335851006..000000000
--- a/examples/news-chatbot/client/javascript/package-lock.json
+++ /dev/null
@@ -1,1282 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0"
- },
- "devDependencies": {
- "vite": "^6.3.5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.77.0.tgz",
- "integrity": "sha512-icNXKieKAkRR/C5dcPjrCkL1jQGFp5C5WtLHy5uHAdTztm+mo9wlPJuehbWaGOM3TV24mgWHZ/+8jOys1G0I4w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
- "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
- "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
- "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
- "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
- "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
- "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
- "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
- "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
- "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
- "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
- "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
- "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
- "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
- "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
- "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
- "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
- "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
- "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
- "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
- "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
- "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
- "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
- "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
- "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/daily-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/daily-transport/-/daily-transport-1.0.0.tgz",
- "integrity": "sha512-iXmv9Et/TGPvJoeOY+ZBPv+a3pbqT502jco2MBHl8l2VrtztkidjDwiOkPfPdD191CCwaSbV5laSYALsD0AyxA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.77.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz",
- "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz",
- "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz",
- "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz",
- "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz",
- "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz",
- "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz",
- "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz",
- "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz",
- "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz",
- "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz",
- "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz",
- "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz",
- "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz",
- "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz",
- "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
- "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz",
- "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz",
- "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz",
- "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz",
- "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
- "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.6",
- "@esbuild/android-arm": "0.25.6",
- "@esbuild/android-arm64": "0.25.6",
- "@esbuild/android-x64": "0.25.6",
- "@esbuild/darwin-arm64": "0.25.6",
- "@esbuild/darwin-x64": "0.25.6",
- "@esbuild/freebsd-arm64": "0.25.6",
- "@esbuild/freebsd-x64": "0.25.6",
- "@esbuild/linux-arm": "0.25.6",
- "@esbuild/linux-arm64": "0.25.6",
- "@esbuild/linux-ia32": "0.25.6",
- "@esbuild/linux-loong64": "0.25.6",
- "@esbuild/linux-mips64el": "0.25.6",
- "@esbuild/linux-ppc64": "0.25.6",
- "@esbuild/linux-riscv64": "0.25.6",
- "@esbuild/linux-s390x": "0.25.6",
- "@esbuild/linux-x64": "0.25.6",
- "@esbuild/netbsd-arm64": "0.25.6",
- "@esbuild/netbsd-x64": "0.25.6",
- "@esbuild/openbsd-arm64": "0.25.6",
- "@esbuild/openbsd-x64": "0.25.6",
- "@esbuild/openharmony-arm64": "0.25.6",
- "@esbuild/sunos-x64": "0.25.6",
- "@esbuild/win32-arm64": "0.25.6",
- "@esbuild/win32-ia32": "0.25.6",
- "@esbuild/win32-x64": "0.25.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/rollup": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz",
- "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.44.2",
- "@rollup/rollup-android-arm64": "4.44.2",
- "@rollup/rollup-darwin-arm64": "4.44.2",
- "@rollup/rollup-darwin-x64": "4.44.2",
- "@rollup/rollup-freebsd-arm64": "4.44.2",
- "@rollup/rollup-freebsd-x64": "4.44.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.44.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.44.2",
- "@rollup/rollup-linux-arm64-gnu": "4.44.2",
- "@rollup/rollup-linux-arm64-musl": "4.44.2",
- "@rollup/rollup-linux-loongarch64-gnu": "4.44.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-musl": "4.44.2",
- "@rollup/rollup-linux-s390x-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-musl": "4.44.2",
- "@rollup/rollup-win32-arm64-msvc": "4.44.2",
- "@rollup/rollup-win32-ia32-msvc": "4.44.2",
- "@rollup/rollup-win32-x64-msvc": "4.44.2",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/examples/news-chatbot/client/javascript/package.json b/examples/news-chatbot/client/javascript/package.json
deleted file mode 100644
index e3050697a..000000000
--- a/examples/news-chatbot/client/javascript/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "vite": "^6.3.5"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0"
- }
-}
diff --git a/examples/news-chatbot/client/javascript/src/app.js b/examples/news-chatbot/client/javascript/src/app.js
deleted file mode 100644
index 493bb695a..000000000
--- a/examples/news-chatbot/client/javascript/src/app.js
+++ /dev/null
@@ -1,324 +0,0 @@
-/**
- * Copyright (c) 2024โ2025, Daily
- *
- * SPDX-License-Identifier: BSD 2-Clause License
- */
-
-/**
- * Pipecat Client Implementation
- *
- * This client connects to an RTVI-compatible bot server using WebRTC (via Daily).
- * It handles audio/video streaming and manages the connection lifecycle.
- *
- * Requirements:
- * - A running RTVI bot server (defaults to http://localhost:7860)
- * - The server must implement the /connect endpoint that returns Daily.co room credentials
- * - Browser with WebRTC support
- */
-
-import { LogLevel, PipecatClient, RTVIEvent } from '@pipecat-ai/client-js';
-import { DailyTransport } from '@pipecat-ai/daily-transport';
-
-/**
- * ChatbotClient handles the connection and media management for a real-time
- * voice and video interaction with an AI bot.
- */
-class ChatbotClient {
- constructor() {
- // Initialize client state
- this.pcClient = null;
- this.setupDOMElements();
- this.setupEventListeners();
- }
-
- /**
- * Set up references to DOM elements and create necessary media elements
- */
- setupDOMElements() {
- // Get references to UI control elements
- this.connectBtn = document.getElementById('connect-btn');
- this.disconnectBtn = document.getElementById('disconnect-btn');
- this.statusSpan = document.getElementById('connection-status');
- this.debugLog = document.getElementById('debug-log');
- this.searchResultContainer = document.getElementById(
- 'search-result-container'
- );
-
- // Create an audio element for bot's voice output
- this.botAudio = document.createElement('audio');
- this.botAudio.autoplay = true;
- this.botAudio.playsInline = true;
- document.body.appendChild(this.botAudio);
- }
-
- /**
- * Set up event listeners for connect/disconnect buttons
- */
- setupEventListeners() {
- this.connectBtn.addEventListener('click', () => this.connect());
- this.disconnectBtn.addEventListener('click', () => this.disconnect());
- }
-
- /**
- * Add a timestamped message to the debug log
- */
- log(message) {
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
-
- // Add styling based on message type
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3'; // blue for user
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50'; // green for bot
- }
-
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- console.log(message);
- }
-
- /**
- * Update the connection status display
- */
- updateStatus(status) {
- this.statusSpan.textContent = status;
- this.log(`Status: ${status}`);
- }
-
- /**
- * Check for available media tracks and set them up if present
- * This is called when the bot is ready or when the transport state changes to ready
- */
- setupMediaTracks() {
- if (!this.pcClient) return;
-
- // Get current tracks from the client
- const tracks = this.pcClient.tracks();
-
- // Set up any available bot tracks
- if (tracks.bot?.audio) {
- this.setupAudioTrack(tracks.bot.audio);
- }
- }
-
- /**
- * Set up listeners for track events (start/stop)
- * This handles new tracks being added during the session
- */
- setupTrackListeners() {
- if (!this.pcClient) return;
-
- // Listen for new tracks starting
- this.pcClient.on(RTVIEvent.TrackStarted, (track, participant) => {
- // Only handle non-local (bot) tracks
- if (!participant?.local && track.kind === 'audio') {
- this.setupAudioTrack(track);
- }
- });
-
- // Listen for tracks stopping
- this.pcClient.on(RTVIEvent.TrackStopped, (track, participant) => {
- this.log(
- `Track stopped event: ${track.kind} from ${
- participant?.name || 'unknown'
- }`
- );
- });
- }
-
- /**
- * Set up an audio track for playback
- * Handles both initial setup and track updates
- */
- setupAudioTrack(track) {
- this.log('Setting up audio track');
- // Check if we're already playing this track
- if (this.botAudio.srcObject) {
- const oldTrack = this.botAudio.srcObject.getAudioTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
- // Create a new MediaStream with the track and set it as the audio source
- this.botAudio.srcObject = new MediaStream([track]);
- }
-
- /**
- * Initialize and connect to the bot
- * This sets up the Pipecat client, initializes devices, and establishes the connection
- */
- async connect() {
- try {
- // Initialize the Pipecat client with a Daily WebRTC transport and our configuration
- this.pcClient = new PipecatClient({
- transport: new DailyTransport(),
- enableMic: true, // Enable microphone for user input
- enableCam: false,
- callbacks: {
- // Handle connection state changes
- onConnected: () => {
- this.updateStatus('Connected');
- this.connectBtn.disabled = true;
- this.disconnectBtn.disabled = false;
- this.log('Client connected');
- },
- onDisconnected: () => {
- this.updateStatus('Disconnected');
- this.connectBtn.disabled = false;
- this.disconnectBtn.disabled = true;
- this.log('Client disconnected');
- },
- // Handle transport state changes
- onTransportStateChanged: (state) => {
- this.updateStatus(`Transport: ${state}`);
- this.log(`Transport state changed: ${state}`);
- if (state === 'ready') {
- this.setupMediaTracks();
- }
- },
- // Handle search response events
- onBotLlmSearchResponse: this.handleSearchResponse.bind(this),
- // Handle bot connection events
- onBotConnected: (participant) => {
- this.log(`Bot connected: ${JSON.stringify(participant)}`);
- },
- onBotDisconnected: (participant) => {
- this.log(`Bot disconnected: ${JSON.stringify(participant)}`);
- },
- onBotReady: (data) => {
- this.log(`Bot ready: ${JSON.stringify(data)}`);
- this.setupMediaTracks();
- },
- // Transcript events
- onUserTranscript: (data) => {
- // Only log final transcripts
- if (data.final) {
- this.log(`User: ${data.text}`);
- }
- },
- onBotTranscript: (data) => {
- this.log(`Bot: ${data.text}`);
- },
- // Error handling
- onMessageError: (error) => {
- console.log('Message error:', error);
- },
- onError: (error) => {
- console.log('Error:', error);
- },
- },
- });
-
- //this.pcClient.setLogLevel(LogLevel.DEBUG)
-
- // Set up listeners for media track events
- this.setupTrackListeners();
-
- // Initialize audio devices
- this.log('Initializing devices...');
- await this.pcClient.initDevices();
-
- // Connect to the bot
- this.log('Connecting to bot...');
- await this.pcClient.connect({
- // The baseURL and endpoint of your bot server that the client will connect to
- endpoint: 'http://localhost:7860/connect',
- });
-
- this.log('Connection complete');
- } catch (error) {
- // Handle any errors during connection
- this.log(`Error connecting: ${error.message}`);
- this.log(`Error stack: ${error.stack}`);
- this.updateStatus('Error');
-
- // Clean up if there's an error
- if (this.pcClient) {
- try {
- await this.pcClient.disconnect();
- } catch (disconnectError) {
- this.log(`Error during disconnect: ${disconnectError.message}`);
- }
- }
- }
- }
-
- /**
- * Disconnect from the bot and clean up media resources
- */
- async disconnect() {
- if (this.pcClient) {
- try {
- // Disconnect the Pipecat client
- await this.pcClient.disconnect();
- this.pcClient = null;
-
- // Clean up audio
- if (this.botAudio.srcObject) {
- this.botAudio.srcObject.getTracks().forEach((track) => track.stop());
- this.botAudio.srcObject = null;
- }
-
- // Clean up video
- this.searchResultContainer.innerHTML = '';
- } catch (error) {
- this.log(`Error disconnecting: ${error.message}`);
- }
- }
- }
-
- handleSearchResponse(response) {
- console.log('SearchResponseHelper, received message:', response);
- // Clear existing content
- this.searchResultContainer.innerHTML = '';
-
- // Create a container for all content
- const contentContainer = document.createElement('div');
- contentContainer.className = 'content-container';
-
- // Add the search_result
- if (response.search_result) {
- const searchResultDiv = document.createElement('div');
- searchResultDiv.className = 'search-result';
- searchResultDiv.textContent = response.search_result;
- contentContainer.appendChild(searchResultDiv);
- }
-
- // Add the sources
- if (response.origins) {
- const sourcesDiv = document.createElement('div');
- sourcesDiv.className = 'sources';
-
- const sourcesTitle = document.createElement('h3');
- sourcesTitle.className = 'sources-title';
- sourcesTitle.textContent = 'Sources:';
- sourcesDiv.appendChild(sourcesTitle);
-
- response.origins.forEach((origin) => {
- const sourceLink = document.createElement('a');
- sourceLink.className = 'source-link';
- sourceLink.href = origin.site_uri;
- sourceLink.target = '_blank';
- sourceLink.textContent = origin.site_title;
- sourcesDiv.appendChild(sourceLink);
- });
-
- contentContainer.appendChild(sourcesDiv);
- }
-
- // Add the rendered_content in an iframe
- if (response.rendered_content) {
- const iframe = document.createElement('iframe');
- iframe.className = 'iframe-container';
- iframe.srcdoc = response.rendered_content;
- contentContainer.appendChild(iframe);
- }
-
- // Append the content container to the content panel
- this.searchResultContainer.appendChild(contentContainer);
- }
-}
-
-// Initialize the client when the page loads
-window.addEventListener('DOMContentLoaded', () => {
- new ChatbotClient();
-});
diff --git a/examples/news-chatbot/client/javascript/src/style.css b/examples/news-chatbot/client/javascript/src/style.css
deleted file mode 100644
index 590e44d89..000000000
--- a/examples/news-chatbot/client/javascript/src/style.css
+++ /dev/null
@@ -1,134 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#search-result-container {
- background-color: #e0e0e0;
- padding: 20px;
- width: calc(100% - 40px);
- height: 450px;
- overflow: auto;
-}
-
-/* Container for all content */
-.content-container {
- display: flex;
- flex-direction: column;
- gap: 20px; /* Space between elements */
- font-family: Arial, sans-serif;
-}
-
-/* Styles for the search result */
-.search-result {
- font-size: 16px;
- line-height: 1.5;
- color: #333;
-}
-
-/* Styles for the sources container */
-.sources {
- display: flex;
- flex-direction: column;
- gap: 8px; /* Space between source links */
-}
-
-.sources-title {
- font-size: 16px;
- font-weight: bold;
- color: #444;
-}
-
-/* Styles for source links */
-.source-link {
- text-decoration: none;
- color: #1a73e8;
-}
-
-.source-link:hover {
- text-decoration: underline;
-}
-
-/* Styles for the iframe container */
-.iframe-container {
- flex: none;
- width: 100%;
- height: 400px; /* Adjust height as needed */
- border: none;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 200px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/news-chatbot/client/javascript/vite.config.js b/examples/news-chatbot/client/javascript/vite.config.js
deleted file mode 100644
index 5ccad4a6b..000000000
--- a/examples/news-chatbot/client/javascript/vite.config.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { defineConfig } from 'vite';
-
-export default defineConfig({
- server: {
- proxy: {
- // Proxy /api requests to the backend server
- '/connect': {
- target: 'http://0.0.0.0:7860', // Replace with your backend URL
- changeOrigin: true,
- },
- },
- },
-});
diff --git a/examples/news-chatbot/server/README.md b/examples/news-chatbot/server/README.md
deleted file mode 100644
index 2c3fa0c15..000000000
--- a/examples/news-chatbot/server/README.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# News Chatbot Server
-
-A FastAPI server that manages bot instances and provide endpoint for Pipecat client connections.
-
-## Endpoints
-
-- `POST /connect` - Pipecat client connection endpoint
-
-## Environment Variables
-
-Copy `env.example` to `.env` and configure:
-
-```ini
-# Required API Keys
-DAILY_API_KEY= # Your Daily API key
-DEEPGRAM_API_KEY= # Your Deepgram API key
-GOOGLE_API_KEY= # Your Google/Gemini API key
-CARTESIA_API_KEY= # Your Cartesia API key
-
-# Optional Configuration
-DAILY_API_URL= # Optional: Daily API URL (defaults to https://api.daily.co/v1)
-DAILY_SAMPLE_ROOM_URL= # Optional: Fixed room URL for development
-HOST= # Optional: Host address (defaults to 0.0.0.0)
-FAST_API_PORT= # Optional: Port number (defaults to 7860)
-```
-
-## Running the Server
-
-Set up and activate your virtual environment:
-
-```bash
-python3 -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-```
-
-Install dependencies:
-
-```bash
-pip install -r requirements.txt
-```
-
-If you want to use the local version of `pipecat` in this repo rather than the last published version, also run:
-
-```bash
-pip install --editable "../../../[daily,deepgram,google,cartesia,openai,silero]"
-```
-
-Run the server:
-
-```bash
-python server.py
-```
diff --git a/examples/news-chatbot/server/env.example b/examples/news-chatbot/server/env.example
deleted file mode 100644
index 772a2478a..000000000
--- a/examples/news-chatbot/server/env.example
+++ /dev/null
@@ -1,5 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
-DAILY_API_KEY=
-CARTESIA_API_KEY=
-DEEPGRAM_API_KEY=
-GOOGLE_API_KEY=
\ No newline at end of file
diff --git a/examples/news-chatbot/server/news_bot.py b/examples/news-chatbot/server/news_bot.py
deleted file mode 100644
index a24143051..000000000
--- a/examples/news-chatbot/server/news_bot.py
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2024-2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-from pathlib import Path
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import Frame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIProcessor
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.google.llm import GoogleLLMService, LLMSearchResponseFrame
-from pipecat.services.google.rtvi import GoogleRTVIObserver
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-from pipecat.utils.text.markdown_text_filter import MarkdownTextFilter
-
-sys.path.append(str(Path(__file__).parent.parent))
-from runner import configure
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-# Function handlers for the LLM
-# https://ai.google.dev/gemini-api/docs/grounding?lang=python#dynamic-retrieval
-# Some queries are likely to benefit more from Grounding with Google Search than others.
-# The dynamic retrieval feature gives you additional control over when to use Grounding with Google Search.
-# If the dynamic retrieval mode is unspecified, Grounding with Google Search is always triggered.
-# If the mode is set to dynamic, the model decides when to use grounding based on a threshold that you can configure.
-# The threshold is a floating-point value in the range [0,1] and defaults to 0.3.
-# If the threshold value is 0, the response is always grounded with Google Search; if it's 1, it never is.
-search_tool = {
- "google_search_retrieval": {
- "dynamic_retrieval_config": {
- "mode": "MODE_DYNAMIC",
- "dynamic_threshold": 0,
- } # always grounding
- }
-}
-tools = [search_tool]
-
-system_instruction = """
-You are an expert at providing the most recent news from any place. Your responses will be converted to audio, so ensure they are formatted in plain text without special characters (e.g., *, _, -) or overly complex formatting.
-
-Guidelines:
-- Use the Google search API to retrieve the current date and provide the latest news.
-- Always deliver accurate and concise responses.
-- Ensure all responses are clear, using plain text only. Avoid any special characters or symbols.
-
-Start every interaction by asking how you can assist the user.
-"""
-
-
-class LLMSearchLoggerProcessor(FrameProcessor):
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, LLMSearchResponseFrame):
- print(f"LLMSearchLoggerProcessor: {frame}")
-
- await self.push_frame(frame)
-
-
-async def main():
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- token,
- "Latest news!",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- text_filters=[MarkdownTextFilter()],
- )
-
- llm = GoogleLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- system_instruction=system_instruction,
- tools=tools,
- model="gemini-1.5-flash",
- )
-
- context = OpenAILLMContext(
- [
- {
- "role": "user",
- "content": "Start by greeting the user warmly, introducing yourself, and mentioning the current day. Be friendly and engaging to set a positive tone for the interaction.",
- }
- ],
- )
- context_aggregator = llm.create_context_aggregator(context)
-
- llm_search_logger = LLMSearchLoggerProcessor()
-
- #
- # RTVI events for Pipecat client UI
- #
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- transport.input(),
- stt,
- rtvi,
- context_aggregator.user(),
- llm,
- llm_search_logger,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[GoogleRTVIObserver(rtvi)],
- )
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.debug("First participant joined: {}", participant["id"])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- print(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner()
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/news-chatbot/server/requirements.txt b/examples/news-chatbot/server/requirements.txt
deleted file mode 100644
index 93151fddd..000000000
--- a/examples/news-chatbot/server/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[daily,google,deepgram,cartesia,silero,openai]
diff --git a/examples/news-chatbot/server/runner.py b/examples/news-chatbot/server/runner.py
deleted file mode 100644
index 04157d549..000000000
--- a/examples/news-chatbot/server/runner.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-from typing import Optional
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- (url, token, _) = await configure_with_args(aiohttp_session)
- return (url, token)
-
-
-async def configure_with_args(
- aiohttp_session: aiohttp.ClientSession, parser: Optional[argparse.ArgumentParser] = None
-):
- if not parser:
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token, args)
diff --git a/examples/news-chatbot/server/server.py b/examples/news-chatbot/server/server.py
deleted file mode 100644
index ddecd1e6f..000000000
--- a/examples/news-chatbot/server/server.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-from typing import Any, Dict
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-# Load environment variables from .env file
-load_dotenv(override=True)
-
-# Dictionary to track bot processes: {pid: (process, room_url)}
-bot_procs = {}
-
-# Store Daily API helpers
-daily_helpers = {}
-
-
-def cleanup():
- """Cleanup function to terminate all bot processes.
-
- Called during server shutdown.
- """
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """FastAPI lifespan manager that handles startup and shutdown tasks.
-
- - Creates aiohttp session
- - Initializes Daily API helper
- - Cleans up resources on shutdown
- """
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-# Initialize FastAPI app with lifespan manager
-app = FastAPI(lifespan=lifespan)
-
-# Configure CORS to allow requests from any origin
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-async def create_room_and_token() -> tuple[str, str]:
- """Helper function to create a Daily room and generate an access token.
-
- Returns:
- tuple[str, str]: A tuple containing (room_url, token)
-
- Raises:
- HTTPException: If room creation or token generation fails
- """
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- if not room.url:
- raise HTTPException(status_code=500, detail="Failed to create room")
-
- token = await daily_helpers["rest"].get_token(room.url)
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- return room.url, token
-
-
-@app.post("/connect")
-async def bot_connect(request: Request) -> Dict[Any, Any]:
- """Connect endpoint that creates a room and returns connection credentials.
-
- This endpoint is called by client to establish a connection.
-
- Returns:
- Dict[Any, Any]: Authentication bundle containing room_url and token
-
- Raises:
- HTTPException: If room creation, token generation, or bot startup fails
- """
- print("Creating room for RTVI connection")
- room_url, token = await create_room_and_token()
- print(f"Room URL: {room_url}")
-
- # Start the bot process
- try:
- bot_file = "news_bot"
- proc = subprocess.Popen(
- [f"python3 -m {bot_file} -u {room_url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room_url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- # Return the authentication bundle in format expected by DailyTransport
- return {"room_url": room_url, "token": token}
-
-
-if __name__ == "__main__":
- import uvicorn
-
- # Parse command line arguments for server configuration
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Travel Companion FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- # Start the FastAPI server
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/open-telemetry/README.md b/examples/open-telemetry/README.md
deleted file mode 100644
index 1d3871e94..000000000
--- a/examples/open-telemetry/README.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# OpenTelemetry Tracing with Pipecat
-
-This repository demonstrates OpenTelemetry tracing integration for Pipecat services, with examples for different backends.
-
-## Tracing Features in Pipecat
-
-- **Hierarchical Tracing**: Track entire conversations, turns, and service calls
-- **Service Tracing**: Detailed spans for TTS, STT, and LLM services with rich context
-- **TTFB Metrics**: Capture Time To First Byte metrics for latency analysis
-- **Usage Statistics**: Track character counts for TTS and token usage for LLMs
-
-## Trace Structure
-
-Traces are organized hierarchically:
-
-```
-Conversation (conversation)
-โโโ turn
-โ โโโ stt_deepgramsttservice
-โ โโโ llm_openaillmservice
-โ โโโ tts_cartesiattsservice
-โโโ turn
- โโโ stt_deepgramsttservice
- โโโ llm_openaillmservice
- โโโ tts_cartesiattsservice
- turn
- โโโ ...
-```
-
-This organization helps you track conversation-to-conversation and turn-to-turn interactions.
-
-## Available Demos
-
-| Demo | Description |
-| ------------------------------- | ------------------------------------------------------------------------- |
-| [Jaeger Tracing](./jaeger/) | Tracing with Jaeger, an open-source end-to-end distributed tracing system |
-| [Langfuse Tracing](./langfuse/) | Tracing with Langfuse, a specialized platform for LLM observability |
-
-## Common Requirements
-
-- Python 3.10+
-- Pipecat and its dependencies
-- API keys for the services used (Deepgram, Cartesia, OpenAI)
-- The appropriate OpenTelemetry exporters
-
-## How Tracing Works
-
-The tracing system consists of:
-
-1. **TurnTrackingObserver**: Detects conversation turns
-2. **TurnTraceObserver**: Creates spans for turns and conversations
-3. **Service Decorators**: `@traced_tts`, `@traced_stt`, `@traced_llm` for service-specific tracing
-4. **Context Providers**: Share context between different parts of the pipeline
-
-## Getting Started
-
-1. Choose one of the demos from the table above
-2. Follow the README instructions in the respective directory
-
-## Common Troubleshooting
-
-- **Debugging Traces**: Set `OTEL_CONSOLE_EXPORT=true` to print traces to the console for debugging
-- **Missing Metrics**: Check that `enable_metrics=True` in PipelineParams
-- **API Key Issues**: Verify your API keys are set correctly in the .env file
-
-## References
-
-- [OpenTelemetry Python Documentation](https://opentelemetry-python.readthedocs.io/)
-- [Pipecat Documentation](https://docs.pipecat.ai/server/utilities/opentelemetry)
diff --git a/examples/open-telemetry/jaeger/README.md b/examples/open-telemetry/jaeger/README.md
deleted file mode 100644
index 57a9bb7d3..000000000
--- a/examples/open-telemetry/jaeger/README.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Jaeger Tracing for Pipecat
-
-This demo showcases OpenTelemetry tracing integration for Pipecat services using Jaeger, allowing you to visualize service calls, performance metrics, and dependencies.
-
-## Setup Instructions
-
-### 1. Start the Jaeger Container
-
-Run Jaeger in Docker to collect and visualize traces:
-
-```bash
-docker run -d --name jaeger \
- -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
- -p 16686:16686 \
- -p 4317:4317 \
- -p 4318:4318 \
- jaegertracing/all-in-one:latest
-```
-
-### 2. Environment Configuration
-
-Create a `.env` file with your API keys and enable tracing:
-
-```
-ENABLE_TRACING=true
-OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 # Point to your Jaeger backend
-# OTEL_CONSOLE_EXPORT=true # Set to any value for debug output to console
-
-# Service API keys
-DEEPGRAM_API_KEY=your_key_here
-CARTESIA_API_KEY=your_key_here
-OPENAI_API_KEY=your_key_here
-```
-
-### 3. Install Dependencies
-
-```bash
-pip install -r requirements.txt
-```
-
-> Install only the grpc exporter. If you have a conflict, uninstall the http exporter.
-
-### 4. Run the Demo
-
-```bash
-python bot.py
-```
-
-### 5. View Traces in Jaeger
-
-Open your browser to [http://localhost:16686](http://localhost:16686) and select the "pipecat-demo" service to view traces.
-
-## Jaeger-Specific Configuration
-
-In the `bot.py` file, note the GRPC exporter configuration:
-
-```python
-from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
-
-# Create the exporter
-otlp_exporter = OTLPSpanExporter(
- endpoint=os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"),
- insecure=True,
-)
-
-# Set up tracing with the exporter
-setup_tracing(
- service_name="pipecat-demo",
- exporter=otlp_exporter,
- console_export=bool(os.getenv("OTEL_CONSOLE_EXPORT")),
-)
-```
-
-## Troubleshooting
-
-- **No Traces in Jaeger**: Ensure the Docker container is running and the OTLP endpoint is correct
-- **Connection Errors**: Verify network connectivity to the Jaeger container
-- **Exporter Issues**: Try the Console exporter (`OTEL_CONSOLE_EXPORT=true`) to verify tracing works
-
-## References
-
-- [Jaeger Documentation](https://www.jaegertracing.io/docs/latest/)
diff --git a/examples/open-telemetry/jaeger/bot.py b/examples/open-telemetry/jaeger/bot.py
deleted file mode 100644
index 5b16814b5..000000000
--- a/examples/open-telemetry/jaeger/bot.py
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-from dotenv import load_dotenv
-from loguru import logger
-from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
-
-from pipecat.adapters.schemas.function_schema import FunctionSchema
-from pipecat.adapters.schemas.tools_schema import ToolsSchema
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.network.fastapi_websocket import FastAPIWebsocketParams
-from pipecat.transports.services.daily import DailyParams
-from pipecat.utils.tracing.setup import setup_tracing
-
-load_dotenv(override=True)
-
-IS_TRACING_ENABLED = bool(os.getenv("ENABLE_TRACING"))
-
-# Initialize tracing if enabled
-if IS_TRACING_ENABLED:
- # Create the exporter
- otlp_exporter = OTLPSpanExporter(
- endpoint=os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"),
- insecure=True,
- )
-
- # Set up tracing with the exporter
- setup_tracing(
- service_name="pipecat-demo",
- exporter=otlp_exporter,
- console_export=bool(os.getenv("OTEL_CONSOLE_EXPORT")),
- )
- logger.info("OpenTelemetry tracing initialized")
-
-
-async def fetch_weather_from_api(params: FunctionCallParams):
- await params.result_callback({"conditions": "nice", "temperature": "75"})
-
-
-# We store functions so objects (e.g. SileroVADAnalyzer) don't get
-# instantiated. The function will be called when the desired transport gets
-# selected.
-transport_params = {
- "daily": lambda: DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- "twilio": lambda: FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- "webrtc": lambda: TransportParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
-}
-
-
-async def run_example(transport: BaseTransport, _: argparse.Namespace, handle_sigint: bool):
- logger.info(f"Starting bot")
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- llm = OpenAILLMService(
- api_key=os.getenv("OPENAI_API_KEY"), params=OpenAILLMService.InputParams(temperature=0.5)
- )
-
- # You can also register a function_name of None to get all functions
- # sent to the same callback with an additional function_name parameter.
- llm.register_function("get_current_weather", fetch_weather_from_api)
-
- @llm.event_handler("on_function_calls_started")
- async def on_function_calls_started(service, function_calls):
- await tts.queue_frame(TTSSpeakFrame("Let me check on that."))
-
- weather_function = FunctionSchema(
- name="get_current_weather",
- description="Get the current weather",
- properties={
- "location": {
- "type": "string",
- "description": "The city and state, e.g. San Francisco, CA",
- },
- "format": {
- "type": "string",
- "enum": ["celsius", "fahrenheit"],
- "description": "The temperature unit to use. Infer this from the user's location.",
- },
- },
- required=["location", "format"],
- )
- tools = ToolsSchema(standard_tools=[weather_function])
-
- messages = [
- {
- "role": "system",
- "content": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way.",
- },
- ]
-
- context = OpenAILLMContext(messages, tools)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(),
- stt,
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- enable_tracing=IS_TRACING_ENABLED,
- # Optionally, add a conversation ID to track the conversation
- # conversation_id="8df26cc1-6db0-4a7a-9930-1e037c8f1fa2",
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info(f"Client connected")
- # Kick off the conversation.
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info(f"Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=handle_sigint)
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- from pipecat.examples.run import main
-
- main(run_example, transport_params=transport_params)
diff --git a/examples/open-telemetry/jaeger/env.example b/examples/open-telemetry/jaeger/env.example
deleted file mode 100644
index 68b2ef6b0..000000000
--- a/examples/open-telemetry/jaeger/env.example
+++ /dev/null
@@ -1,10 +0,0 @@
-DEEPGRAM_API_KEY=your_deepgram_key
-CARTESIA_API_KEY=your_cartesia_key
-OPENAI_API_KEY=your_openai_key
-
-# Set to any value to enable tracing
-ENABLE_TRACING=true
-# OTLP endpoint (defaults to localhost:4317 if not set)
-OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
-# Set to any value to enable console output for debugging
-# OTEL_CONSOLE_EXPORT=true
\ No newline at end of file
diff --git a/examples/open-telemetry/jaeger/requirements.txt b/examples/open-telemetry/jaeger/requirements.txt
deleted file mode 100644
index 344a0560e..000000000
--- a/examples/open-telemetry/jaeger/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-fastapi
-uvicorn
-python-dotenv
-pipecat-ai[daily,webrtc,silero,cartesia,deepgram,openai,tracing]
-pipecat-ai-small-webrtc-prebuilt
-opentelemetry-exporter-otlp-proto-grpc
\ No newline at end of file
diff --git a/examples/open-telemetry/langfuse/README.md b/examples/open-telemetry/langfuse/README.md
deleted file mode 100644
index 1ae95f400..000000000
--- a/examples/open-telemetry/langfuse/README.md
+++ /dev/null
@@ -1,84 +0,0 @@
-# Langfuse Tracing for Pipecat
-
-This demo showcases [Langfuse](https://langfuse.com) tracing integration for Pipecat services via OpenTelemetry, allowing you to visualize service calls, performance metrics, and dependencies with a focus on LLM observability.
-
-Pipecat trace in Langfuse:
-
-https://github.com/user-attachments/assets/13dd7431-bf5e-42e3-8d6d-2ed84c51195d
-
-## Setup Instructions
-
-### 1. Create a Langfuse Project and get API keys
-
-[Self-host](https://langfuse.com/self-hosting) Langfuse or create a free [Langfuse Cloud](https://cloud.langfuse.com) account.
-Create a new project and get the API keys.
-
-### 2. Environment Configuration
-
-Base64 encode your Langfuse public and secret key:
-
-```bash
-echo -n "pk-lf-1234567890:sk-lf-1234567890" | base64
-```
-
-Create a `.env` file with your API keys to enable tracing:
-
-```
-ENABLE_TRACING=true
-# OTLP endpoint for Langfuse
-OTEL_EXPORTER_OTLP_ENDPOINT=https://cloud.langfuse.com/api/public/otel
-OTEL_EXPORTER_OTLP_HEADERS=Authorization=Basic%20
-# Set to any value to enable console output for debugging
-# OTEL_CONSOLE_EXPORT=true
-
-# Service API keys
-DEEPGRAM_API_KEY=your_key_here
-CARTESIA_API_KEY=your_key_here
-OPENAI_API_KEY=your_key_here
-```
-
-### 3. Install Dependencies
-
-```bash
-pip install -r requirements.txt
-```
-
-> Install only the http exporter. If you have a conflict, uninstall the grpc exporter.
-
-### 4. Run the Demo
-
-```bash
-python bot.py
-```
-
-### 5. View Traces in Langfuse
-
-Open your browser to [https://cloud.langfuse.com](https://cloud.langfuse.com) to view traces.
-
-## Langfuse-Specific Configuration
-
-In the `bot.py` file, note the HTTP exporter configuration:
-
-```python
-from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
-
-# Create the exporter - configured from environment variables
-otlp_exporter = OTLPSpanExporter()
-
-# Set up tracing with the exporter
-setup_tracing(
- service_name="pipecat-demo",
- exporter=otlp_exporter,
- console_export=bool(os.getenv("OTEL_CONSOLE_EXPORT")),
-)
-```
-
-## Troubleshooting
-
-- **No Traces in Langfuse**: Ensure that your credentials are correct and follow this [troubleshooting guide](https://langfuse.com/faq/all/missing-traces)
-- **Connection Errors**: Verify network connectivity to Langfuse
-- **Authorization Issues**: Check that your base64 encoding is correct and the API keys are valid
-
-## References
-
-- [Langfuse OpenTelemetry Documentation](https://langfuse.com/docs/opentelemetry/get-started)
diff --git a/examples/open-telemetry/langfuse/bot.py b/examples/open-telemetry/langfuse/bot.py
deleted file mode 100644
index b1bf65d99..000000000
--- a/examples/open-telemetry/langfuse/bot.py
+++ /dev/null
@@ -1,167 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-from dotenv import load_dotenv
-from loguru import logger
-from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
-
-from pipecat.adapters.schemas.function_schema import FunctionSchema
-from pipecat.adapters.schemas.tools_schema import ToolsSchema
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import TTSSpeakFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.base_transport import BaseTransport, TransportParams
-from pipecat.transports.network.fastapi_websocket import FastAPIWebsocketParams
-from pipecat.transports.services.daily import DailyParams
-from pipecat.utils.tracing.setup import setup_tracing
-
-load_dotenv(override=True)
-
-IS_TRACING_ENABLED = bool(os.getenv("ENABLE_TRACING"))
-
-# Initialize tracing if enabled
-if IS_TRACING_ENABLED:
- # Create the exporter
- otlp_exporter = OTLPSpanExporter()
-
- # Set up tracing with the exporter
- setup_tracing(
- service_name="pipecat-demo",
- exporter=otlp_exporter,
- console_export=bool(os.getenv("OTEL_CONSOLE_EXPORT")),
- )
- logger.info("OpenTelemetry tracing initialized")
-
-
-async def fetch_weather_from_api(params: FunctionCallParams):
- await params.result_callback({"conditions": "nice", "temperature": "75"})
-
-
-# We store functions so objects (e.g. SileroVADAnalyzer) don't get
-# instantiated. The function will be called when the desired transport gets
-# selected.
-transport_params = {
- "daily": lambda: DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- "twilio": lambda: FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- "webrtc": lambda: TransportParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
-}
-
-
-async def run_example(transport: BaseTransport, _: argparse.Namespace, handle_sigint: bool):
- logger.info(f"Starting bot")
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- llm = OpenAILLMService(
- api_key=os.getenv("OPENAI_API_KEY"), params=OpenAILLMService.InputParams(temperature=0.5)
- )
-
- # You can also register a function_name of None to get all functions
- # sent to the same callback with an additional function_name parameter.
- llm.register_function("get_current_weather", fetch_weather_from_api)
-
- @llm.event_handler("on_function_calls_started")
- async def on_function_calls_started(service, function_calls):
- await tts.queue_frame(TTSSpeakFrame("Let me check on that."))
-
- weather_function = FunctionSchema(
- name="get_current_weather",
- description="Get the current weather",
- properties={
- "location": {
- "type": "string",
- "description": "The city and state, e.g. San Francisco, CA",
- },
- "format": {
- "type": "string",
- "enum": ["celsius", "fahrenheit"],
- "description": "The temperature unit to use. Infer this from the user's location.",
- },
- },
- required=["location", "format"],
- )
- tools = ToolsSchema(standard_tools=[weather_function])
-
- messages = [
- {
- "role": "system",
- "content": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way.",
- },
- ]
-
- context = OpenAILLMContext(messages, tools)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(),
- stt,
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- enable_tracing=IS_TRACING_ENABLED,
- # Optionally, add a conversation ID to track the conversation
- # conversation_id="8df26cc1-6db0-4a7a-9930-1e037c8f1fa2",
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info(f"Client connected")
- # Kick off the conversation.
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info(f"Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=handle_sigint)
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- from pipecat.examples.run import main
-
- main(run_example, transport_params=transport_params)
diff --git a/examples/open-telemetry/langfuse/env.example b/examples/open-telemetry/langfuse/env.example
deleted file mode 100644
index 622854799..000000000
--- a/examples/open-telemetry/langfuse/env.example
+++ /dev/null
@@ -1,18 +0,0 @@
-DEEPGRAM_API_KEY=your_deepgram_key
-CARTESIA_API_KEY=your_cartesia_key
-OPENAI_API_KEY=your_openai_key
-
-# Set to any value to enable tracing
-ENABLE_TRACING=true
-
-# ๐ช๐บ EU data region
-OTEL_EXPORTER_OTLP_ENDPOINT="https://cloud.langfuse.com/api/public/otel"
-# ๐บ๐ธ US data region
-# OTEL_EXPORTER_OTLP_ENDPOINT="https://us.cloud.langfuse.com/api/public/otel"
-# ๐ Local deployment (>= v3.22.0)
-# OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:3000/api/public/otel"
-
-OTEL_EXPORTER_OTLP_HEADERS="Authorization=Basic "
-
-# Set to any value to enable console output for debugging
-# OTEL_CONSOLE_EXPORT=true
\ No newline at end of file
diff --git a/examples/open-telemetry/langfuse/requirements.txt b/examples/open-telemetry/langfuse/requirements.txt
deleted file mode 100644
index 6f06ac809..000000000
--- a/examples/open-telemetry/langfuse/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-fastapi
-uvicorn
-python-dotenv
-pipecat-ai[daily,webrtc,silero,cartesia,deepgram,openai,tracing]
-pipecat-ai-small-webrtc-prebuilt
-opentelemetry-exporter-otlp-proto-http
\ No newline at end of file
diff --git a/examples/p2p-webrtc/daily-interop-bridge/README.md b/examples/p2p-webrtc/daily-interop-bridge/README.md
deleted file mode 100644
index 9de3f379f..000000000
--- a/examples/p2p-webrtc/daily-interop-bridge/README.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# SmallWebRTC and Daily
-
-A Pipecat example demonstrating how to interoperate audio and video between `SmallWebRTCTransport` and `DailyTransport`.
-
-## ๐ Quick Start
-
-### 1๏ธโฃ Start the Bot Server
-
-#### ๐ง Set Up the Environment
-1. Create and activate a virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
-2. Install dependencies:
- ```bash
- pip install -r requirements.txt
- ```
-
-3. Configure environment variables:
- - Copy `env.example` to `.env`
- ```bash
- cp env.example .env
- ```
- - Add your API keys
-
-#### โถ๏ธ Run the Server
-```bash
-python server.py
-```
-
-### 1๏ธโฃ Connect the first client using Daily Prebuilt
-
-- Open your browser and navigate to the same URL that you configured inside your `.env` file:
- - `DAILY_SAMPLE_ROOM_URL`
-
-### 2๏ธโฃ Connect the second client using SmallWebRTC Prebuilt UI
-
-- Open your browser and navigate to:
-๐ http://localhost:7860
- - (Or use your custom port, if configured)
-
-## โ ๏ธ Important Note
-Ensure the bot server is running before using any client implementations.
-
-## ๐ Requirements
-
-- Python **3.10+**
-- Node.js **16+** (for JavaScript components)
-- Google API Key
-- Modern web browser with WebRTC support
-
----
-
-### ๐ก Notes
-- Ensure all dependencies are installed before running the server.
-- Check the `.env` file for missing configurations.
-- WebRTC requires a secure environment (HTTPS) for full functionality in production.
-
-Happy coding! ๐
\ No newline at end of file
diff --git a/examples/p2p-webrtc/daily-interop-bridge/bot.py b/examples/p2p-webrtc/daily-interop-bridge/bot.py
deleted file mode 100644
index e8783ab71..000000000
--- a/examples/p2p-webrtc/daily-interop-bridge/bot.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.frames.frames import (
- InputAudioRawFrame,
- InputImageRawFrame,
- OutputAudioRawFrame,
- OutputImageRawFrame,
-)
-from pipecat.pipeline.parallel_pipeline import ParallelPipeline
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.frame_processor import Frame, FrameDirection, FrameProcessor
-from pipecat.transports.base_transport import TransportParams
-from pipecat.transports.network.small_webrtc import SmallWebRTCTransport
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-
-class MirrorProcessor(FrameProcessor):
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, InputAudioRawFrame):
- await self.push_frame(
- OutputAudioRawFrame(
- audio=frame.audio,
- sample_rate=frame.sample_rate,
- num_channels=frame.num_channels,
- )
- )
- elif isinstance(frame, InputImageRawFrame):
- await self.push_frame(
- OutputImageRawFrame(image=frame.image, size=frame.size, format=frame.format)
- )
- else:
- await self.push_frame(frame, direction)
-
-
-async def run_bot(webrtc_connection):
- pipecat_transport = SmallWebRTCTransport(
- webrtc_connection=webrtc_connection,
- params=TransportParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_in_enabled=True,
- video_out_enabled=True,
- video_out_is_live=True,
- video_out_width=1280,
- video_out_height=720,
- ),
- )
-
- room_url = os.getenv("DAILY_SAMPLE_ROOM_URL", "")
- daily_transport = DailyTransport(
- room_url,
- None,
- "SmallWebRTC",
- params=DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_in_enabled=True,
- video_out_enabled=True,
- video_out_is_live=True,
- video_out_width=1280,
- video_out_height=720,
- ),
- )
-
- pipeline = Pipeline(
- [
- ParallelPipeline(
- [
- daily_transport.input(),
- MirrorProcessor(),
- pipecat_transport.output(),
- ],
- [
- pipecat_transport.input(),
- MirrorProcessor(),
- daily_transport.output(),
- ],
- )
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @daily_transport.event_handler("on_participant_joined")
- async def on_participant_joined(transport, participant):
- await transport.capture_participant_video(participant["id"])
-
- @pipecat_transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info("Pipecat Client connected")
-
- @pipecat_transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info("Pipecat Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False)
-
- await runner.run(task)
diff --git a/examples/p2p-webrtc/daily-interop-bridge/env.example b/examples/p2p-webrtc/daily-interop-bridge/env.example
deleted file mode 100644
index 8ea5961f2..000000000
--- a/examples/p2p-webrtc/daily-interop-bridge/env.example
+++ /dev/null
@@ -1,2 +0,0 @@
-DAILY_API_KEY=
-DAILY_SAMPLE_ROOM_URL=
\ No newline at end of file
diff --git a/examples/p2p-webrtc/daily-interop-bridge/requirements.txt b/examples/p2p-webrtc/daily-interop-bridge/requirements.txt
deleted file mode 100644
index 19d9ca501..000000000
--- a/examples/p2p-webrtc/daily-interop-bridge/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-aiortc
-pipecat-ai[silero, webrtc, daily]
\ No newline at end of file
diff --git a/examples/p2p-webrtc/daily-interop-bridge/server.py b/examples/p2p-webrtc/daily-interop-bridge/server.py
deleted file mode 100644
index c8dae7888..000000000
--- a/examples/p2p-webrtc/daily-interop-bridge/server.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import sys
-from contextlib import asynccontextmanager
-from typing import Dict
-
-import uvicorn
-from bot import run_bot
-from dotenv import load_dotenv
-from fastapi import BackgroundTasks, FastAPI
-from fastapi.responses import RedirectResponse
-from loguru import logger
-from pipecat_ai_small_webrtc_prebuilt.frontend import SmallWebRTCPrebuiltUI
-
-from pipecat.transports.network.webrtc_connection import IceServer, SmallWebRTCConnection
-
-# Load environment variables
-load_dotenv(override=True)
-
-app = FastAPI()
-
-# Store connections by pc_id
-pcs_map: Dict[str, SmallWebRTCConnection] = {}
-
-ice_servers = [
- IceServer(
- urls="stun:stun.l.google.com:19302",
- )
-]
-
-# Mount the frontend at /
-app.mount("/prebuilt", SmallWebRTCPrebuiltUI)
-
-
-@app.get("/", include_in_schema=False)
-async def root_redirect():
- return RedirectResponse(url="/prebuilt/")
-
-
-@app.post("/api/offer")
-async def offer(request: dict, background_tasks: BackgroundTasks):
- pc_id = request.get("pc_id")
-
- if pc_id and pc_id in pcs_map:
- pipecat_connection = pcs_map[pc_id]
- logger.info(f"Reusing existing connection for pc_id: {pc_id}")
- await pipecat_connection.renegotiate(
- sdp=request["sdp"], type=request["type"], restart_pc=request.get("restart_pc", False)
- )
- else:
- pipecat_connection = SmallWebRTCConnection(ice_servers)
- await pipecat_connection.initialize(sdp=request["sdp"], type=request["type"])
-
- @pipecat_connection.event_handler("closed")
- async def handle_disconnected(webrtc_connection: SmallWebRTCConnection):
- logger.info(f"Discarding peer connection for pc_id: {webrtc_connection.pc_id}")
- pcs_map.pop(webrtc_connection.pc_id, None)
-
- background_tasks.add_task(run_bot, pipecat_connection)
-
- answer = pipecat_connection.get_answer()
- # Updating the peer connection inside the map
- pcs_map[answer["pc_id"]] = pipecat_connection
-
- return answer
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- yield # Run app
- coros = [pc.disconnect() for pc in pcs_map.values()]
- await asyncio.gather(*coros)
- pcs_map.clear()
-
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="WebRTC demo")
- parser.add_argument(
- "--host", default="localhost", help="Host for HTTP server (default: localhost)"
- )
- parser.add_argument(
- "--port", type=int, default=7860, help="Port for HTTP server (default: 7860)"
- )
- parser.add_argument("--verbose", "-v", action="count")
- args = parser.parse_args()
-
- logger.remove(0)
- if args.verbose:
- logger.add(sys.stderr, level="TRACE")
- else:
- logger.add(sys.stderr, level="DEBUG")
-
- uvicorn.run(app, host=args.host, port=args.port)
diff --git a/examples/p2p-webrtc/video-transform/README.md b/examples/p2p-webrtc/video-transform/README.md
deleted file mode 100644
index fdc4a8862..000000000
--- a/examples/p2p-webrtc/video-transform/README.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Video Transform
-
-A Pipecat example demonstrating how to send and receive audio and video using `SmallWebRTCTransport`. This project also applies image processing to video frames using OpenCV.
-
-## ๐ Quick Start
-
-### 1๏ธโฃ Start the Bot Server
-
-#### ๐ Navigate to the Server Directory
-```bash
-cd server
-```
-
-#### ๐ง Set Up the Environment
-1. Create and activate a virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
-2. Install dependencies:
- ```bash
- pip install -r requirements.txt
- ```
-
-3. Configure environment variables:
- - Copy `env.example` to `.env`
- ```bash
- cp env.example .env
- ```
- - Add your API keys
-
-#### โถ๏ธ Run the Server
-```bash
-python server.py
-```
-
-### 2๏ธโฃ Test with SmallWebRTC Prebuilt UI
-
-You can quickly test your bot using the `SmallWebRTCPrebuiltUI`:
-
-- Open your browser and navigate to:
-๐ http://localhost:7860
- - (Or use your custom port, if configured)
-
-### 3๏ธโฃ Connect Using a Custom Client App
-
-For client-side setup, refer to the:
-- [Typescript Guide](client/typescript/README.md).
-- [iOS Guide](client/ios/README.md).
-
-## โ ๏ธ Important Note
-Ensure the bot server is running before using any client implementations.
-
-## ๐ Requirements
-
-- Python **3.10+**
-- Node.js **16+** (for JavaScript components)
-- Google API Key
-- Modern web browser with WebRTC support
-
----
-
-### ๐ก Notes
-- Ensure all dependencies are installed before running the server.
-- Check the `.env` file for missing configurations.
-- WebRTC requires a secure environment (HTTPS) for full functionality in production.
-
-Happy coding! ๐
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/.gitignore b/examples/p2p-webrtc/video-transform/client/android/.gitignore
deleted file mode 100644
index 10cfdbfaf..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-*.iml
-.gradle
-/local.properties
-/.idea
-.DS_Store
-/build
-/captures
-.externalNativeBuild
-.cxx
-local.properties
diff --git a/examples/p2p-webrtc/video-transform/client/android/LICENSE b/examples/p2p-webrtc/video-transform/client/android/LICENSE
deleted file mode 100644
index 976aa72fe..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-BSD 2-Clause License
-
-Copyright (c) 2024โ2025, Daily
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/examples/p2p-webrtc/video-transform/client/android/README.md b/examples/p2p-webrtc/video-transform/client/android/README.md
deleted file mode 100644
index d0718b88b..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Pipecat Small WebRTC Client for Android
-
-Demo app which connects to the `video-transform` backend over the small WebRTC transport.
-
-## How to run
-
-```bash
-./gradlew runDebug
-```
-
-Ensure that the `video-transform` server is running as described in the parent README.
-
diff --git a/examples/p2p-webrtc/video-transform/client/android/build.gradle.kts b/examples/p2p-webrtc/video-transform/client/android/build.gradle.kts
deleted file mode 100644
index 861303b1f..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/build.gradle.kts
+++ /dev/null
@@ -1,5 +0,0 @@
-plugins {
- alias(libs.plugins.jetbrains.kotlin.android) apply false
- alias(libs.plugins.android.application) apply false
- alias(libs.plugins.compose.compiler) apply false
-}
diff --git a/examples/p2p-webrtc/video-transform/client/android/gradle.properties b/examples/p2p-webrtc/video-transform/client/android/gradle.properties
deleted file mode 100644
index 20e2a0152..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/gradle.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Project-wide Gradle settings.
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. For more details, visit
-# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
-# org.gradle.parallel=true
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
-android.useAndroidX=true
-# Kotlin code style for this project: "official" or "obsolete":
-kotlin.code.style=official
-# Enables namespacing of each library's R class so that its R class includes only the
-# resources declared in the library itself and none from the library's dependencies,
-# thereby reducing the size of the R class for that library
-android.nonTransitiveRClass=true
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/gradle/libs.versions.toml b/examples/p2p-webrtc/video-transform/client/android/gradle/libs.versions.toml
deleted file mode 100644
index be90d31de..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/gradle/libs.versions.toml
+++ /dev/null
@@ -1,34 +0,0 @@
-[versions]
-accompanistPermissions = "0.34.0"
-agp = "8.7.3"
-constraintlayoutCompose = "1.1.0"
-pipecatClient = "0.3.7"
-kotlin = "2.0.20"
-coreKtx = "1.15.0"
-lifecycleRuntimeKtx = "2.8.7"
-activityCompose = "1.9.3"
-composeBom = "2024.12.01"
-kotlinxSerializationJson = "1.7.1"
-kotlinxSerializationPlugin = "2.0.20"
-
-[libraries]
-accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanistPermissions" }
-androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "constraintlayoutCompose" }
-androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
-pipecat-client-smallwebrtc = { module = "ai.pipecat:small-webrtc-transport", version.ref = "pipecatClient" }
-androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
-androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
-androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
-androidx-ui = { group = "androidx.compose.ui", name = "ui" }
-androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
-androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
-androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
-androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
-androidx-material3 = { group = "androidx.compose.material3", name = "material3" }
-kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }
-
-[plugins]
-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
-android-application = { id = "com.android.application", version.ref = "agp" }
-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
-jetbrains-kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlinxSerializationPlugin" }
diff --git a/examples/p2p-webrtc/video-transform/client/android/gradle/wrapper/gradle-wrapper.jar b/examples/p2p-webrtc/video-transform/client/android/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index e708b1c02..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/gradle/wrapper/gradle-wrapper.properties b/examples/p2p-webrtc/video-transform/client/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 2c47b5b4b..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Mon Aug 05 13:01:27 BST 2024
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/examples/p2p-webrtc/video-transform/client/android/gradlew b/examples/p2p-webrtc/video-transform/client/android/gradlew
deleted file mode 100755
index 4f906e0c8..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/gradlew
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=`expr $i + 1`
- done
- case $i in
- 0) set -- ;;
- 1) set -- "$args0" ;;
- 2) set -- "$args0" "$args1" ;;
- 3) set -- "$args0" "$args1" "$args2" ;;
- 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=`save "$@"`
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-exec "$JAVACMD" "$@"
diff --git a/examples/p2p-webrtc/video-transform/client/android/gradlew.bat b/examples/p2p-webrtc/video-transform/client/android/gradlew.bat
deleted file mode 100644
index 107acd32c..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/examples/p2p-webrtc/video-transform/client/android/settings.gradle.kts b/examples/p2p-webrtc/video-transform/client/android/settings.gradle.kts
deleted file mode 100644
index afd7e3285..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/settings.gradle.kts
+++ /dev/null
@@ -1,24 +0,0 @@
-pluginManagement {
- repositories {
- google {
- content {
- includeGroupByRegex("com\\.android.*")
- includeGroupByRegex("com\\.google.*")
- includeGroupByRegex("androidx.*")
- }
- }
- mavenCentral()
- gradlePluginPortal()
- }
-}
-dependencyResolutionManagement {
- repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
- repositories {
- google()
- mavenCentral()
- mavenLocal()
- }
-}
-
-rootProject.name = "Pipecat Small WebRTC Client"
-include(":small-webrtc-client")
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/.gitignore b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/.gitignore
deleted file mode 100644
index 42afabfd2..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/build.gradle.kts b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/build.gradle.kts
deleted file mode 100644
index c1810cd14..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/build.gradle.kts
+++ /dev/null
@@ -1,75 +0,0 @@
-plugins {
- alias(libs.plugins.android.application)
- alias(libs.plugins.jetbrains.kotlin.android)
- alias(libs.plugins.jetbrains.kotlin.serialization)
- alias(libs.plugins.compose.compiler)
-}
-
-android {
- namespace = "ai.pipecat.small_webrtc_client"
- compileSdk = 35
-
- defaultConfig {
- applicationId = "ai.pipecat.small_webrtc_client"
- minSdk = 26
- targetSdk = 35
- versionCode = 1
- versionName = "1.0"
-
- vectorDrawables {
- useSupportLibrary = true
- }
- }
-
- buildTypes {
- release {
- isMinifyEnabled = 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"
- }
-
- buildFeatures {
- compose = true
- buildConfig = true
- }
-
- composeOptions {
- kotlinCompilerExtensionVersion = "1.5.1"
- }
-
- packaging {
- resources {
- excludes += "/META-INF/{AL2.0,LGPL2.1}"
- }
- }
-}
-
-dependencies {
- implementation(libs.pipecat.client.smallwebrtc)
- implementation(libs.androidx.core.ktx)
- implementation(libs.androidx.lifecycle.runtime.ktx)
- implementation(libs.androidx.activity.compose)
- implementation(platform(libs.androidx.compose.bom))
- implementation(libs.androidx.ui)
- implementation(libs.androidx.ui.graphics)
- implementation(libs.androidx.ui.tooling.preview)
- implementation(libs.androidx.material3)
- implementation(libs.accompanist.permissions)
- implementation(libs.androidx.constraintlayout.compose)
- implementation(libs.kotlinx.serialization.json)
- androidTestImplementation(platform(libs.androidx.compose.bom))
- debugImplementation(libs.androidx.ui.tooling)
- debugImplementation(libs.androidx.ui.test.manifest)
-}
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/proguard-rules.pro b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/proguard-rules.pro
deleted file mode 100644
index 481bb4348..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/AndroidManifest.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/AndroidManifest.xml
deleted file mode 100644
index 397ea75cd..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/MainActivity.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/MainActivity.kt
deleted file mode 100644
index 4e8339707..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/MainActivity.kt
+++ /dev/null
@@ -1,257 +0,0 @@
-package ai.pipecat.small_webrtc_client
-
-import ai.pipecat.small_webrtc_client.ui.InCallLayout
-import ai.pipecat.small_webrtc_client.ui.PermissionScreen
-import ai.pipecat.small_webrtc_client.ui.theme.Colors
-import ai.pipecat.small_webrtc_client.ui.theme.RTVIClientTheme
-import ai.pipecat.small_webrtc_client.ui.theme.TextStyles
-import ai.pipecat.small_webrtc_client.ui.theme.textFieldColors
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.activity.enableEdgeToEdge
-import androidx.annotation.DrawableRes
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-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.imePadding
-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.shape.RoundedCornerShape
-import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.foundation.verticalScroll
-import androidx.compose.material3.AlertDialog
-import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.Icon
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.material3.TextField
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-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.unit.dp
-import androidx.compose.ui.unit.sp
-
-
-class MainActivity : ComponentActivity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- enableEdgeToEdge()
-
- val voiceClientManager = VoiceClientManager(this)
-
- setContent {
- RTVIClientTheme {
- Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
- Box(
- Modifier
- .fillMaxSize()
- .padding(innerPadding)
- ) {
- PermissionScreen()
-
- val vcState = voiceClientManager.state.value
-
- if (vcState != null) {
- InCallLayout(voiceClientManager)
-
- } else {
- ConnectSettings(voiceClientManager)
- }
-
- voiceClientManager.errors.firstOrNull()?.let { errorText ->
-
- val dismiss: () -> Unit = { voiceClientManager.errors.removeAt(0) }
-
- AlertDialog(
- onDismissRequest = dismiss,
- confirmButton = {
- Button(onClick = dismiss) {
- Text(
- text = "OK",
- fontSize = 14.sp,
- fontWeight = FontWeight.W700,
- color = Color.White,
- style = TextStyles.base
- )
- }
- },
- containerColor = Color.White,
- title = {
- Text(
- text = "Error",
- fontSize = 22.sp,
- fontWeight = FontWeight.W600,
- color = Color.Black,
- style = TextStyles.base
- )
- },
- text = {
- Text(
- text = errorText.message,
- fontSize = 16.sp,
- fontWeight = FontWeight.W400,
- color = Color.Black,
- style = TextStyles.base
- )
- }
- )
- }
- }
- }
- }
- }
- }
-}
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Composable
-fun ConnectSettings(
- voiceClientManager: VoiceClientManager,
-) {
- val scrollState = rememberScrollState()
-
- val start = {
- val backendUrl = Preferences.backendUrl.value
-
- voiceClientManager.start(baseUrl = backendUrl!!)
- }
-
- Box(
- modifier = Modifier
- .fillMaxSize()
- .verticalScroll(scrollState)
- .imePadding()
- .padding(20.dp),
- contentAlignment = Alignment.Center
- ) {
- Box(
- Modifier
- .fillMaxWidth()
- .shadow(2.dp, RoundedCornerShape(16.dp))
- .clip(RoundedCornerShape(16.dp))
- .background(Colors.mainSurfaceBackground)
- ) {
- Column(
- Modifier
- .fillMaxWidth()
- .padding(
- vertical = 24.dp,
- horizontal = 28.dp
- )
- ) {
- Spacer(modifier = Modifier.height(12.dp))
-
- Text(
- modifier = Modifier.align(Alignment.CenterHorizontally),
- text = "Connect to WebRTC server",
- fontSize = 22.sp,
- fontWeight = FontWeight.W700,
- style = TextStyles.base
- )
-
- Spacer(modifier = Modifier.height(36.dp))
-
- Text(
- text = "Backend URL",
- fontSize = 16.sp,
- fontWeight = FontWeight.W400,
- style = TextStyles.base
- )
-
- Spacer(modifier = Modifier.height(12.dp))
-
- TextField(
- modifier = Modifier
- .fillMaxWidth()
- .border(1.dp, Colors.textFieldBorder, RoundedCornerShape(12.dp)),
- value = Preferences.backendUrl.value ?: "",
- onValueChange = { Preferences.backendUrl.value = it },
- keyboardOptions = KeyboardOptions(
- keyboardType = KeyboardType.Uri,
- imeAction = ImeAction.Next
- ),
- colors = textFieldColors(),
- shape = RoundedCornerShape(12.dp)
- )
-
- Spacer(modifier = Modifier.height(36.dp))
-
- Row(
- modifier = Modifier.fillMaxWidth(),
- horizontalArrangement = Arrangement.spacedBy(16.dp)
- ) {
- ConnectDialogButton(
- modifier = Modifier.weight(1f),
- onClick = start,
- text = "Connect",
- foreground = Color.White,
- background = Colors.buttonNormal,
- border = Colors.buttonNormal
- )
- }
- }
- }
- }
-}
-
-@Composable
-private fun ConnectDialogButton(
- onClick: () -> Unit,
- text: String,
- foreground: Color,
- background: Color,
- border: Color,
- modifier: Modifier = Modifier,
- @DrawableRes icon: Int? = null,
-) {
- val shape = RoundedCornerShape(8.dp)
-
- Row(
- modifier
- .border(1.dp, border, shape)
- .clip(shape)
- .background(background)
- .clickable(onClick = onClick)
- .padding(vertical = 10.dp, horizontal = 24.dp),
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.Center
- ) {
- if (icon != null) {
- Icon(
- modifier = Modifier.size(24.dp),
- painter = painterResource(icon),
- tint = foreground,
- contentDescription = null
- )
-
- Spacer(modifier = Modifier.width(8.dp))
- }
-
- Text(
- text = text,
- fontSize = 16.sp,
- fontWeight = FontWeight.W500,
- color = foreground
- )
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/Preferences.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/Preferences.kt
deleted file mode 100644
index 667dc261a..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/Preferences.kt
+++ /dev/null
@@ -1,75 +0,0 @@
-package ai.pipecat.small_webrtc_client
-
-import android.content.Context
-import android.content.SharedPreferences
-import androidx.compose.runtime.mutableStateOf
-import kotlinx.serialization.KSerializer
-import kotlinx.serialization.json.Json
-
-private val JSON_INSTANCE = Json { ignoreUnknownKeys = true }
-
-object Preferences {
-
- private const val PREF_BACKEND_URL = "backend_url"
-
- private lateinit var prefs: SharedPreferences
-
- fun initAppStart(context: Context) {
- prefs = context.applicationContext.getSharedPreferences("prefs", Context.MODE_PRIVATE)
-
- listOf(backendUrl).forEach { it.init() }
- }
-
- private fun getString(key: String): String? = prefs.getString(key, null)
-
- interface BasePref {
- fun init()
- }
-
- class StringPref(private val key: String): BasePref {
- private val cachedValue = mutableStateOf(null)
-
- override fun init() {
- cachedValue.value = getString(key)
- prefs.registerOnSharedPreferenceChangeListener { _, changedKey ->
- if (key == changedKey) {
- cachedValue.value = getString(key)
- }
- }
- }
-
- var value: String?
- get() = cachedValue.value
- set(newValue) {
- cachedValue.value = newValue
- prefs.edit().putString(key, newValue).apply()
- }
- }
-
- class JsonPref(private val key: String, private var serializer: KSerializer): BasePref {
- private val cachedValue = mutableStateOf(null)
-
- private fun lookupValue(): E? =
- getString(key)?.let { JSON_INSTANCE.decodeFromString(serializer, it) }
-
- override fun init() {
- cachedValue.value = lookupValue()
- prefs.registerOnSharedPreferenceChangeListener { _, changedKey ->
- if (key == changedKey) {
- cachedValue.value = lookupValue()
- }
- }
- }
-
- var value: E?
- get() = cachedValue.value
- set(newValue) {
- cachedValue.value = newValue
- prefs.edit()
- .putString(key, newValue?.let { JSON_INSTANCE.encodeToString(serializer, it) })
- .apply()
- }
- }
-
- val backendUrl = StringPref(PREF_BACKEND_URL)
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/RTVIApplication.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/RTVIApplication.kt
deleted file mode 100644
index 5298deafc..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/RTVIApplication.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package ai.pipecat.small_webrtc_client
-
-import android.app.Application
-
-class RTVIApplication : Application() {
- override fun onCreate() {
- super.onCreate()
- Preferences.initAppStart(this)
- }
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/VoiceClientManager.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/VoiceClientManager.kt
deleted file mode 100644
index 2225d8ac4..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/VoiceClientManager.kt
+++ /dev/null
@@ -1,191 +0,0 @@
-package ai.pipecat.small_webrtc_client
-
-import ai.pipecat.client.RTVIClient
-import ai.pipecat.client.RTVIClientOptions
-import ai.pipecat.client.RTVIClientParams
-import ai.pipecat.client.RTVIEventCallbacks
-import ai.pipecat.client.result.Future
-import ai.pipecat.client.result.RTVIError
-import ai.pipecat.client.result.Result
-import ai.pipecat.client.small_webrtc_transport.SmallWebRTCTransport
-import ai.pipecat.client.types.ActionDescription
-import ai.pipecat.client.types.Participant
-import ai.pipecat.client.types.PipecatMetrics
-import ai.pipecat.client.types.ServiceConfig
-import ai.pipecat.client.types.Tracks
-import ai.pipecat.client.types.Transcript
-import ai.pipecat.client.types.TransportState
-import ai.pipecat.small_webrtc_client.utils.Timestamp
-import android.content.Context
-import android.util.Log
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.Stable
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateListOf
-import androidx.compose.runtime.mutableStateOf
-
-@Immutable
-data class Error(val message: String)
-
-@Stable
-class VoiceClientManager(private val context: Context) {
-
- companion object {
- private const val TAG = "VoiceClientManager"
- }
-
- private val client = mutableStateOf(null)
-
- val state = mutableStateOf(null)
-
- val errors = mutableStateListOf()
-
- val actionDescriptions =
- mutableStateOf, RTVIError>?>(null)
-
- val expiryTime = mutableStateOf(null)
-
- val botReady = mutableStateOf(false)
- val botIsTalking = mutableStateOf(false)
- val userIsTalking = mutableStateOf(false)
- val botAudioLevel = mutableFloatStateOf(0f)
- val userAudioLevel = mutableFloatStateOf(0f)
-
- val mic = mutableStateOf(false)
- val camera = mutableStateOf(false)
- val tracks = mutableStateOf(null)
-
- private fun Future.displayErrors() = withErrorCallback {
- Log.e(TAG, "Future resolved with error: ${it.description}", it.exception)
- errors.add(Error(it.description))
- }
-
- fun start(baseUrl: String) {
-
- if (client.value != null) {
- return
- }
-
- val options = RTVIClientOptions(
- params = RTVIClientParams(baseUrl = null),
- enableMic = true,
- enableCam = true
- )
-
- state.value = TransportState.Disconnected
-
- val callbacks = object : RTVIEventCallbacks() {
- override fun onTransportStateChanged(state: TransportState) {
- this@VoiceClientManager.state.value = state
- }
-
- override fun onBackendError(message: String) {
- "Error from backend: $message".let {
- Log.e(TAG, it)
- errors.add(Error(it))
- }
- }
-
- override fun onBotReady(version: String, config: List) {
-
- Log.i(TAG, "Bot ready. Version $version, config: $config")
-
- botReady.value = true
-
- client.value?.describeActions()?.withCallback {
- actionDescriptions.value = it
- }
- }
-
- override fun onPipecatMetrics(data: PipecatMetrics) {
- Log.i(TAG, "Pipecat metrics: $data")
- }
-
- override fun onUserTranscript(data: Transcript) {
- Log.i(TAG, "User transcript: $data")
- }
-
- override fun onBotTranscript(text: String) {
- Log.i(TAG, "Bot transcript: $text")
- }
-
- override fun onBotStartedSpeaking() {
- Log.i(TAG, "Bot started speaking")
- botIsTalking.value = true
- }
-
- override fun onBotStoppedSpeaking() {
- Log.i(TAG, "Bot stopped speaking")
- botIsTalking.value = false
- }
-
- override fun onUserStartedSpeaking() {
- Log.i(TAG, "User started speaking")
- userIsTalking.value = true
- }
-
- override fun onUserStoppedSpeaking() {
- Log.i(TAG, "User stopped speaking")
- userIsTalking.value = false
- }
-
- override fun onTracksUpdated(tracks: Tracks) {
- this@VoiceClientManager.tracks.value = tracks
- }
-
- override fun onInputsUpdated(camera: Boolean, mic: Boolean) {
- this@VoiceClientManager.camera.value = camera
- this@VoiceClientManager.mic.value = mic
- }
-
- override fun onConnected() {
- expiryTime.value = client.value?.expiry?.let(Timestamp::ofEpochSecs)
- }
-
- override fun onDisconnected() {
- expiryTime.value = null
- actionDescriptions.value = null
- botIsTalking.value = false
- userIsTalking.value = false
- state.value = null
- actionDescriptions.value = null
- botReady.value = false
- tracks.value = null
-
- client.value?.release()
- client.value = null
- }
-
- override fun onUserAudioLevel(level: Float) {
- userAudioLevel.floatValue = level
- }
-
- override fun onRemoteAudioLevel(level: Float, participant: Participant) {
- botAudioLevel.floatValue = level
- }
- }
-
- val client = RTVIClient(SmallWebRTCTransport.Factory(context, baseUrl), callbacks, options)
-
- client.connect().displayErrors().withErrorCallback {
- callbacks.onDisconnected()
- }
-
- this.client.value = client
- }
-
- fun enableCamera(enabled: Boolean) {
- client.value?.enableCam(enabled)?.displayErrors()
- }
-
- fun enableMic(enabled: Boolean) {
- client.value?.enableMic(enabled)?.displayErrors()
- }
-
- fun toggleCamera() = enableCamera(!camera.value)
- fun toggleMic() = enableMic(!mic.value)
-
- fun stop() {
- client.value?.disconnect()?.displayErrors()
- }
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/AudioIndicator.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/AudioIndicator.kt
deleted file mode 100644
index 6d29f7cfa..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/AudioIndicator.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import androidx.compose.animation.core.LinearEasing
-import androidx.compose.animation.core.animateFloat
-import androidx.compose.animation.core.animateFloatAsState
-import androidx.compose.animation.core.infiniteRepeatable
-import androidx.compose.animation.core.rememberInfiniteTransition
-import androidx.compose.animation.core.tween
-import androidx.compose.foundation.Canvas
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.StrokeCap
-import androidx.compose.ui.semantics.clearAndSetSemantics
-
-@Composable
-fun ListeningAnimation(
- modifier: Modifier,
- active: Boolean,
- level: Float,
- color: Color,
-) {
- val infiniteTransition = rememberInfiniteTransition("listeningAnimation")
-
- val loopState by infiniteTransition.animateFloat(
- initialValue = 0f,
- targetValue = Math.PI.toFloat() * 2f,
- animationSpec = infiniteRepeatable(tween(durationMillis = 1000, easing = LinearEasing)),
- label = "listeningAnimationLoopState"
- )
-
- val activeFraction by animateFloatAsState(
- if (active) {
- Math.pow(level.toDouble(), 0.3).toFloat()
- } else {
- 0f
- }
- )
-
- Canvas(modifier.clearAndSetSemantics { }) {
-
- val strokeWidthPx = size.width / 12
-
- val lineCount = 5
-
- for (i in 1..lineCount) {
-
- val sine = Math.sin(loopState + 0.9 * i)
- val fraction = activeFraction * ((sine + 1) / 2).toFloat()
-
- val x = (size.width / (lineCount + 1)) * i
-
- val yMax = size.height * 0.25f
- val yMin = size.height * 0.5f
-
- val y = yMin + (yMax - yMin) * fraction
- val yEnd = size.height - y
-
- this.drawLine(
- start = Offset(x, y),
- end = Offset(x, yEnd),
- color = color,
- strokeWidth = strokeWidthPx,
- cap = StrokeCap.Round
- )
- }
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/BotIndicator.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/BotIndicator.kt
deleted file mode 100644
index 282c4f812..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/BotIndicator.kt
+++ /dev/null
@@ -1,122 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import ai.pipecat.client.small_webrtc_transport.views.VideoView
-import ai.pipecat.client.types.Tracks
-import ai.pipecat.small_webrtc_client.ui.theme.Colors
-import android.view.ViewGroup.LayoutParams
-import androidx.compose.animation.AnimatedContent
-import androidx.compose.animation.animateColorAsState
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.aspectRatio
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.material3.CircularProgressIndicator
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.FloatState
-import androidx.compose.runtime.State
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.StrokeCap
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.viewinterop.AndroidView
-
-@Composable
-fun BotIndicator(
- modifier: Modifier,
- isReady: Boolean,
- isTalking: State,
- audioLevel: FloatState,
- tracks: State
-) {
- Box(
- modifier = modifier.padding(15.dp),
- contentAlignment = Alignment.Center
- ) {
- val color by animateColorAsState(if (isTalking.value || !isReady) {
- Color.Black
- } else {
- Colors.botIndicatorBackground
- })
-
- Box(
- Modifier
- .aspectRatio(1f)
- .fillMaxSize()
- .shadow(20.dp, CircleShape)
- .border(12.dp, Color.White, CircleShape)
- .border(1.dp, Colors.lightGrey, CircleShape)
- .clip(CircleShape)
- .background(color)
- .padding(50.dp),
- contentAlignment = Alignment.Center,
- ) {
- AnimatedContent(
- targetState = isReady
- ) { isReadyVal ->
- if (isReadyVal) {
-
- val botVideoTrack by remember { derivedStateOf {
- tracks.value?.bot?.video
- }}
-
- if (botVideoTrack != null) {
- AndroidView(
- modifier = Modifier.fillMaxSize(),
- factory = { context ->
- VideoView(context).apply {
- layoutParams = LayoutParams(
- LayoutParams.MATCH_PARENT,
- LayoutParams.MATCH_PARENT
- )
- }
- },
- update = {
- it.track = botVideoTrack
- }
- )
- } else {
- ListeningAnimation(
- modifier = Modifier.fillMaxSize(),
- active = isTalking.value,
- level = audioLevel.floatValue,
- color = Color.White
- )
- }
- } else {
- CircularProgressIndicator(
- modifier = Modifier.size(180.dp),
- color = Color.White,
- strokeWidth = 12.dp,
- strokeCap = StrokeCap.Round,
- trackColor = color
- )
- }
- }
- }
- }
-}
-
-@Composable
-@Preview
-fun PreviewBotIndicator() {
- BotIndicator(
- modifier = Modifier,
- isReady = false,
- isTalking = remember { mutableStateOf(true) },
- audioLevel = remember { mutableFloatStateOf(1.0f) },
- tracks = remember { mutableStateOf(null) }
- )
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallFooter.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallFooter.kt
deleted file mode 100644
index d9f46c7ab..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallFooter.kt
+++ /dev/null
@@ -1,89 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import ai.pipecat.small_webrtc_client.R
-import ai.pipecat.small_webrtc_client.ui.theme.Colors
-import androidx.annotation.DrawableRes
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.ColumnScope
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Icon
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-
-@Composable
-private fun FooterButton(
- modifier: Modifier,
- onClick: () -> Unit,
- @DrawableRes icon: Int,
- text: String,
- foreground: Color,
- background: Color,
- border: Color,
-) {
- val shape = RoundedCornerShape(12.dp)
-
- Row(
- modifier
- .border(1.dp, border, shape)
- .clip(shape)
- .background(background)
- .clickable(onClick = onClick)
- .padding(vertical = 10.dp, horizontal = 18.dp),
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.Center
- ) {
- Icon(
- modifier = Modifier.size(24.dp),
- painter = painterResource(icon),
- tint = foreground,
- contentDescription = null
- )
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(
- text = text,
- fontSize = 14.sp,
- fontWeight = FontWeight.W600,
- color = foreground
- )
- }
-}
-
-@Composable
-fun ColumnScope.InCallFooter(
- onClickEnd: () -> Unit,
-) {
- Row(Modifier
- .fillMaxWidth(0.5f)
- .padding(15.dp)
- .align(Alignment.CenterHorizontally)
- ) {
- FooterButton(
- modifier = Modifier.weight(1f),
- onClick = onClickEnd,
- icon = R.drawable.phone_hangup,
- text = "End",
- foreground = Color.White,
- background = Colors.endButton,
- border = Colors.endButton
- )
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallHeader.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallHeader.kt
deleted file mode 100644
index 3fa2aa2eb..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallHeader.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import ai.pipecat.small_webrtc_client.utils.Timestamp
-import androidx.compose.animation.AnimatedContent
-import androidx.compose.animation.fadeIn
-import androidx.compose.animation.fadeOut
-import androidx.compose.animation.togetherWith
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.constraintlayout.compose.ConstraintLayout
-
-@Composable
-fun InCallHeader(
- expiryTime: Timestamp?
-) {
- ConstraintLayout(
- Modifier
- .fillMaxWidth()
- .padding(vertical = 15.dp)
- ) {
- val refTimer = createRef()
-
- AnimatedContent(
- modifier = Modifier.constrainAs(refTimer) {
- top.linkTo(parent.top)
- bottom.linkTo(parent.bottom)
- end.linkTo(parent.end)
- },
- targetState = expiryTime,
- transitionSpec = { fadeIn() togetherWith fadeOut() }
- ) { expiryTimeVal ->
- if (expiryTimeVal != null) {
- Timer(expiryTime = expiryTimeVal, modifier = Modifier)
- }
- }
- }
-}
-
-@Composable
-@Preview
-fun PreviewInCallHeader() {
- InCallHeader(
- Timestamp.now() + java.time.Duration.ofMinutes(3)
- )
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallLayout.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallLayout.kt
deleted file mode 100644
index ef2185bbe..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/InCallLayout.kt
+++ /dev/null
@@ -1,71 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import ai.pipecat.small_webrtc_client.VoiceClientManager
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
-
-@Composable
-fun InCallLayout(voiceClientManager: VoiceClientManager) {
-
- val localCam by remember { derivedStateOf { voiceClientManager.tracks.value?.local?.video } }
-
- Column(Modifier.fillMaxSize()) {
-
- InCallHeader(expiryTime = voiceClientManager.expiryTime.value)
-
- Box(
- modifier = Modifier
- .weight(1f)
- .fillMaxWidth(),
- contentAlignment = Alignment.Center
- ) {
- Column(
- modifier = Modifier.fillMaxWidth(),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.spacedBy(12.dp, Alignment.CenterVertically)
- ) {
- BotIndicator(
- modifier = Modifier,
- isReady = voiceClientManager.botReady.value,
- isTalking = voiceClientManager.botIsTalking,
- audioLevel = voiceClientManager.botAudioLevel,
- tracks = voiceClientManager.tracks
- )
-
- Row(
- verticalAlignment = Alignment.CenterVertically
- ) {
- UserMicButton(
- onClick = voiceClientManager::toggleMic,
- micEnabled = voiceClientManager.mic.value,
- modifier = Modifier,
- isTalking = voiceClientManager.userIsTalking,
- audioLevel = voiceClientManager.userAudioLevel
- )
-
- UserCamButton(
- onClick = voiceClientManager::toggleCamera,
- camEnabled = voiceClientManager.camera.value,
- camTrackId = localCam,
- modifier = Modifier
- )
- }
- }
- }
-
- InCallFooter(
- onClickEnd = voiceClientManager::stop
- )
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/PermissionScreen.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/PermissionScreen.kt
deleted file mode 100644
index dcd56e5b0..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/PermissionScreen.kt
+++ /dev/null
@@ -1,99 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import ai.pipecat.small_webrtc_client.ui.theme.Colors
-import ai.pipecat.small_webrtc_client.ui.theme.TextStyles
-import android.Manifest
-import android.util.Log
-import androidx.activity.compose.rememberLauncherForActivityResult
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Button
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-import androidx.compose.ui.window.Dialog
-import com.google.accompanist.permissions.ExperimentalPermissionsApi
-import com.google.accompanist.permissions.isGranted
-import com.google.accompanist.permissions.rememberPermissionState
-
-@OptIn(ExperimentalPermissionsApi::class)
-@Composable
-fun PermissionScreen() {
- val cameraPermission = rememberPermissionState(Manifest.permission.CAMERA)
- val micPermission = rememberPermissionState(Manifest.permission.RECORD_AUDIO)
-
- val requestPermissionLauncher = rememberLauncherForActivityResult(
- ActivityResultContracts.RequestMultiplePermissions()
- ) { isGranted ->
- Log.i("MainActivity", "Permissions granted: $isGranted")
- }
-
- if (!cameraPermission.status.isGranted || !micPermission.status.isGranted) {
-
- Dialog(
- onDismissRequest = {},
- ) {
- val dialogShape = RoundedCornerShape(16.dp)
-
- Column(
- Modifier
- .shadow(6.dp, dialogShape)
- .border(2.dp, Colors.logoBorder, dialogShape)
- .clip(dialogShape)
- .background(Color.White)
- .padding(28.dp)
- ) {
- Text(
- text = "Permissions",
- fontSize = 24.sp,
- fontWeight = FontWeight.W700,
- style = TextStyles.base
- )
-
- Spacer(modifier = Modifier.height(8.dp))
-
- Text(
- text = "Please grant camera and mic permissions to continue",
- fontSize = 18.sp,
- fontWeight = FontWeight.W400,
- style = TextStyles.base
- )
-
- Spacer(modifier = Modifier.height(36.dp))
-
- Button(
- modifier = Modifier.align(Alignment.End),
- shape = RoundedCornerShape(12.dp),
- onClick = {
- requestPermissionLauncher.launch(
- arrayOf(
- Manifest.permission.CAMERA,
- Manifest.permission.RECORD_AUDIO
- )
- )
- }
- ) {
- Text(
- text = "Grant permissions",
- fontSize = 16.sp,
- fontWeight = FontWeight.W700,
- style = TextStyles.base
- )
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/Timer.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/Timer.kt
deleted file mode 100644
index 1b5af67c9..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/Timer.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import ai.pipecat.small_webrtc_client.R
-import ai.pipecat.small_webrtc_client.ui.theme.Colors
-import ai.pipecat.small_webrtc_client.utils.Timestamp
-import ai.pipecat.small_webrtc_client.utils.formatTimer
-import ai.pipecat.small_webrtc_client.utils.rtcStateSecs
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.layout.widthIn
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Icon
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-import java.time.Duration
-
-@Composable
-fun Timer(
- expiryTime: Timestamp,
- modifier: Modifier,
-) {
- val now by rtcStateSecs()
-
- val shape = RoundedCornerShape(
- topStart = 12.dp,
- bottomStart = 12.dp,
- )
-
- Row(
- modifier = modifier
- .widthIn(min = 100.dp)
- .clip(shape)
- .background(Colors.lightGrey)
- .padding(top = 12.dp, bottom = 12.dp, start = 12.dp, end = 16.dp),
- verticalAlignment = Alignment.CenterVertically
- ) {
- Icon(
- painter = painterResource(id = R.drawable.timer_outline),
- contentDescription = null,
- modifier = Modifier.size(20.dp),
- tint = Colors.expiryTimerForeground
- )
-
- Spacer(Modifier.width(8.dp))
-
- Text(
- text = formatTimer(duration = expiryTime - now),
- fontSize = 16.sp,
- fontWeight = FontWeight.W600,
- color = Colors.expiryTimerForeground
- )
- }
-}
-
-@Composable
-@Preview
-fun PreviewExpiryTimer() {
- Timer(Timestamp.now() + Duration.ofMinutes(5), Modifier)
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/UserCamButton.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/UserCamButton.kt
deleted file mode 100644
index 4a3048a1a..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/UserCamButton.kt
+++ /dev/null
@@ -1,110 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import ai.pipecat.client.small_webrtc_transport.views.VideoView
-import ai.pipecat.client.types.MediaTrackId
-import ai.pipecat.small_webrtc_client.R
-import ai.pipecat.small_webrtc_client.ui.theme.Colors
-import androidx.compose.animation.animateColorAsState
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.material3.Icon
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.viewinterop.AndroidView
-
-@Composable
-fun UserCamButton(
- onClick: () -> Unit,
- camEnabled: Boolean,
- camTrackId: MediaTrackId?,
- modifier: Modifier,
-) {
- Box(
- modifier = modifier.padding(15.dp).size(96.dp),
- contentAlignment = Alignment.Center
- ) {
- val color by animateColorAsState(
- if (camEnabled) {
- Colors.unmutedMicBackground
- } else {
- Colors.mutedMicBackground
- }
- )
-
- Box(
- Modifier
- .fillMaxSize()
- .shadow(3.dp, CircleShape)
- .border(6.dp, Color.White, CircleShape)
- .border(1.dp, Colors.lightGrey, CircleShape)
- .clip(CircleShape)
- .background(color)
- .clickable(onClick = onClick),
- contentAlignment = Alignment.Center,
- ) {
- if (camTrackId != null) {
- AndroidView(
- factory = { context ->
- VideoView(context)
- },
- update = { view ->
- view.track = camTrackId
- }
- )
- } else {
- Icon(
- modifier = Modifier.size(30.dp),
- painter = painterResource(
- if (camEnabled) {
- R.drawable.video
- } else {
- R.drawable.video_off
- }
- ),
- tint = Color.White,
- contentDescription = if (camEnabled) {
- "Disable camera"
- } else {
- "Enable camera"
- },
- )
- }
- }
- }
-}
-
-@Composable
-@Preview
-fun PreviewUserCamButton() {
- UserCamButton(
- onClick = {},
- camTrackId = null,
- camEnabled = true,
- modifier = Modifier,
- )
-}
-
-@Composable
-@Preview
-fun PreviewUserCamButtonMuted() {
- UserCamButton(
- onClick = {},
- camTrackId = null,
- camEnabled = false,
- modifier = Modifier,
- )
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/UserMicButton.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/UserMicButton.kt
deleted file mode 100644
index 9e9040e37..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/UserMicButton.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui
-
-import ai.pipecat.small_webrtc_client.R
-import ai.pipecat.small_webrtc_client.ui.theme.Colors
-import androidx.compose.animation.animateColorAsState
-import androidx.compose.animation.core.animateDpAsState
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.material3.Icon
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.FloatState
-import androidx.compose.runtime.State
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-
-@Composable
-fun UserMicButton(
- onClick: () -> Unit,
- micEnabled: Boolean,
- modifier: Modifier,
- isTalking: State,
- audioLevel: FloatState,
-) {
- Box(
- modifier = modifier.padding(15.dp),
- contentAlignment = Alignment.Center
- ) {
- val borderThickness by animateDpAsState(
- if (isTalking.value) {
- (24.dp * Math.pow(audioLevel.floatValue.toDouble(), 0.3).toFloat()) + 3.dp
- } else {
- 6.dp
- }
- )
-
- val color by animateColorAsState(
- if (!micEnabled) {
- Colors.mutedMicBackground
- } else if (isTalking.value) {
- Color.Black
- } else {
- Colors.unmutedMicBackground
- }
- )
-
- Box(
- Modifier
- .shadow(3.dp, CircleShape)
- .border(borderThickness, Color.White, CircleShape)
- .border(1.dp, Colors.lightGrey, CircleShape)
- .clip(CircleShape)
- .background(color)
- .clickable(onClick = onClick)
- .padding(36.dp),
- contentAlignment = Alignment.Center,
- ) {
- Icon(
- modifier = Modifier.size(48.dp),
- painter = painterResource(
- if (micEnabled) {
- R.drawable.microphone
- } else {
- R.drawable.microphone_off
- }
- ),
- tint = Color.White,
- contentDescription = if (micEnabled) {
- "Mute microphone"
- } else {
- "Unmute microphone"
- },
- )
- }
- }
-}
-
-@Composable
-@Preview
-fun PreviewUserMicButton() {
- UserMicButton(
- onClick = {},
- micEnabled = true,
- modifier = Modifier,
- isTalking = remember { mutableStateOf(false) },
- audioLevel = remember { mutableFloatStateOf(1.0f) }
- )
-}
-
-@Composable
-@Preview
-fun PreviewUserMicButtonMuted() {
- UserMicButton(
- onClick = {},
- micEnabled = false,
- modifier = Modifier,
- isTalking = remember { mutableStateOf(false) },
- audioLevel = remember { mutableFloatStateOf(1.0f) }
- )
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Color.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Color.kt
deleted file mode 100644
index 7a55d707a..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Color.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui.theme
-
-import androidx.compose.ui.graphics.Color
-
-object Colors {
- val buttonNormal = Color(0xFF374151)
- val buttonWarning = Color(0xFFE53935)
- val buttonSection = Color(0xFFDFF1FF)
-
- val activityBackground = Color(0xFFF9FAFB)
- val mainSurfaceBackground = Color.White
-
- val lightGrey = Color(0x7FE5E7EB)
- val expiryTimerForeground = Color.Black
- val logoBorder = Color(0xFFE2E8F0)
- val endButton = Color(0xFF0F172A)
- val textFieldBorder = Color(0xFFDFE6EF)
-
- val botIndicatorBackground = Color(0xFF374151)
- val mutedMicBackground = Color(0xFFF04A4A)
- val unmutedMicBackground = Color(0xFF616978)
-}
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Theme.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Theme.kt
deleted file mode 100644
index 9f5307286..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Theme.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui.theme
-
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.TextFieldDefaults
-import androidx.compose.material3.lightColorScheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.graphics.Color
-
-private val LightColorScheme = lightColorScheme(
- primary = Colors.buttonNormal,
- secondary = Colors.buttonWarning,
- background = Colors.activityBackground,
- surface = Colors.mainSurfaceBackground
-)
-
-@Composable
-fun RTVIClientTheme(
- content: @Composable () -> Unit
-) {
- val colorScheme = LightColorScheme
-
- MaterialTheme(
- colorScheme = colorScheme,
- typography = Typography,
- content = content
- )
-}
-
-@Composable
-fun textFieldColors() = TextFieldDefaults.colors().copy(
- unfocusedContainerColor = Colors.activityBackground,
- focusedContainerColor = Colors.activityBackground,
- focusedIndicatorColor = Color.Transparent,
- disabledIndicatorColor = Color.Transparent,
- unfocusedIndicatorColor = Color.Transparent,
-)
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Type.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Type.kt
deleted file mode 100644
index fb20151a1..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/ui/theme/Type.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-package ai.pipecat.small_webrtc_client.ui.theme
-
-import ai.pipecat.small_webrtc_client.R
-import androidx.compose.material3.Typography
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.font.Font
-import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.sp
-
-object TextStyles {
- val base = TextStyle(fontFamily = FontFamily(Font(R.font.inter)))
-}
-
-// Set of Material typography styles to start with
-val Typography = Typography(
- bodyLarge = TextStyle(
- fontFamily = FontFamily.Default,
- fontWeight = FontWeight.Normal,
- fontSize = 16.sp,
- lineHeight = 24.sp,
- letterSpacing = 0.5.sp
- )
- /* Other default text styles to override
- titleLarge = TextStyle(
- fontFamily = FontFamily.Default,
- fontWeight = FontWeight.Normal,
- fontSize = 22.sp,
- lineHeight = 28.sp,
- letterSpacing = 0.sp
- ),
- labelSmall = TextStyle(
- fontFamily = FontFamily.Default,
- fontWeight = FontWeight.Medium,
- fontSize = 11.sp,
- lineHeight = 16.sp,
- letterSpacing = 0.5.sp
- )
- */
-)
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/utils/RealTimeClock.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/utils/RealTimeClock.kt
deleted file mode 100644
index 8d951bfef..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/utils/RealTimeClock.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package ai.pipecat.small_webrtc_client.utils
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.flow
-
-private val rtcFlowSecs = flow {
- while(true) {
- val now = Timestamp.now().toEpochMilli()
-
- val rounded = ((now + 500) / 1000) * 1000
- emit(Timestamp.ofEpochMilli(rounded))
-
- val target = rounded + 1000
- delay(target - now)
- }
-}
-
-@Composable
-fun rtcStateSecs() = rtcFlowSecs.collectAsState(initial = Timestamp.now())
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/utils/TimeUtils.kt b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/utils/TimeUtils.kt
deleted file mode 100644
index ceba7bebf..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/java/ai/pipecat/small_webrtc_client/utils/TimeUtils.kt
+++ /dev/null
@@ -1,64 +0,0 @@
-package ai.pipecat.small_webrtc_client.utils
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
-import java.time.Duration
-import java.time.Instant
-import java.time.format.DateTimeFormatter
-import java.util.Date
-
-// Wrapper for Compose stability
-@Immutable
-@JvmInline
-value class Timestamp(
- val value: Instant
-) : Comparable {
- val isInPast: Boolean
- get() = value < Instant.now()
-
- val isInFuture: Boolean
- get() = value > Instant.now()
-
- fun toEpochMilli() = value.toEpochMilli()
-
- operator fun plus(duration: Duration) = Timestamp(value + duration)
-
- operator fun minus(duration: Duration) = Timestamp(value - duration)
-
- operator fun minus(rhs: Timestamp) = Duration.between(rhs.value, value)
-
- override operator fun compareTo(other: Timestamp) = value.compareTo(other.value)
-
- fun toISOString(): String = DateTimeFormatter.ISO_INSTANT.format(value)
-
- override fun toString() = toISOString()
-
- companion object {
- fun now() = Timestamp(Instant.now())
-
- fun ofEpochMilli(value: Long) = Timestamp(Instant.ofEpochMilli(value))
-
- fun ofEpochSecs(value: Long) = ofEpochMilli(value * 1000)
-
- fun parse(value: CharSequence) = Timestamp(Instant.parse(value))
-
- fun from(date: Date) = Timestamp(date.toInstant())
- }
-}
-
-@Composable
-fun formatTimer(duration: Duration): String {
-
- if (duration.seconds < 0) {
- return "0s"
- }
-
- val mins = duration.seconds / 60
- val secs = duration.seconds % 60
-
- return if (mins == 0L) {
- "${secs}s"
- } else {
- "${mins}m ${secs}s"
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/ic_launcher_background.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index 07d5da9cb..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/ic_launcher_foreground.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/ic_launcher_foreground.xml
deleted file mode 100644
index 2b068d114..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/microphone.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/microphone.xml
deleted file mode 100644
index ed375ff21..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/microphone.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/microphone_off.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/microphone_off.xml
deleted file mode 100644
index bbeb43c59..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/microphone_off.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/phone_hangup.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/phone_hangup.xml
deleted file mode 100644
index a637344c3..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/phone_hangup.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/timer_outline.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/timer_outline.xml
deleted file mode 100644
index ef0ca41fe..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/timer_outline.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/video.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/video.xml
deleted file mode 100644
index bce7a9ed5..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/video.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/video_off.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/video_off.xml
deleted file mode 100644
index c06bc38a3..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/drawable/video_off.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/font/inter.ttf b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/font/inter.ttf
deleted file mode 100644
index e31b51e3e..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/font/inter.ttf and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index 6f3b755bf..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index 6f3b755bf..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-hdpi/ic_launcher.webp
deleted file mode 100644
index c209e78ec..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-hdpi/ic_launcher_round.webp
deleted file mode 100644
index b2dfe3d1b..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-mdpi/ic_launcher.webp
deleted file mode 100644
index 4f0f1d64e..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-mdpi/ic_launcher_round.webp
deleted file mode 100644
index 62b611da0..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xhdpi/ic_launcher.webp
deleted file mode 100644
index 948a3070f..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
deleted file mode 100644
index 1b9a6956b..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxhdpi/ic_launcher.webp
deleted file mode 100644
index 28d4b77f9..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
deleted file mode 100644
index 9287f5083..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
deleted file mode 100644
index aa7d6427e..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
deleted file mode 100644
index 9126ae37c..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/values/strings.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/values/strings.xml
deleted file mode 100644
index 41e627ddf..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- Pipecat Small WebRTC Client
-
diff --git a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/values/themes.xml b/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/values/themes.xml
deleted file mode 100644
index 3675aa6ba..000000000
--- a/examples/p2p-webrtc/video-transform/client/android/small-webrtc-client/src/main/res/values/themes.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/ios/.gitignore b/examples/p2p-webrtc/video-transform/client/ios/.gitignore
deleted file mode 100644
index f89982e48..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/SimpleChatbot.xcodeproj/xcuserdata/
-/SimpleChatbot.xcodeproj/project.xcworkspace/xcuserdata/
diff --git a/examples/p2p-webrtc/video-transform/client/ios/README.md b/examples/p2p-webrtc/video-transform/client/ios/README.md
deleted file mode 100644
index d9cd6539c..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# iOS implementation
-
-Basic implementation using the [Pipecat iOS SDK](https://docs.pipecat.ai/client/ios/introduction).
-
-## Prerequisites
-
-1. Run the bot server. See the [server README](../../server).
-2. Install [Xcode](https://developer.apple.com/xcode/), and set up your device [to run your own applications](https://developer.apple.com/documentation/xcode/distributing-your-app-to-registered-devices).
-
-## Running locally
-
-1. Clone this repository locally.
-2. Open the SimpleChatbot.xcodeproj in Xcode.
-3. Tell Xcode to update its Package Dependencies by clicking File -> Packages -> Update to Latest Package Versions.
-4. Build the project.
-5. Run the project on your device.
-6. Connect to the URL you are testing.
-
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.pbxproj b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.pbxproj
deleted file mode 100644
index b6ea476e4..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,727 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 56;
- objects = {
-
-/* Begin PBXBuildFile section */
- 90031FA72C616EE700408370 /* SimpleChatbotApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FA62C616EE700408370 /* SimpleChatbotApp.swift */; };
- 90031FA92C616EE700408370 /* PreJoinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FA82C616EE700408370 /* PreJoinView.swift */; };
- 90031FAB2C616EE800408370 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 90031FAA2C616EE800408370 /* Assets.xcassets */; };
- 90031FAE2C616EE800408370 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 90031FAD2C616EE800408370 /* Preview Assets.xcassets */; };
- 90031FB82C616EE900408370 /* SimpleChatbotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FB72C616EE900408370 /* SimpleChatbotTests.swift */; };
- 90031FC22C616EE900408370 /* SimpleChatbotUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FC12C616EE900408370 /* SimpleChatbotUITests.swift */; };
- 90031FC42C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FC32C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift */; };
- 90031FDC2C6D5DD700408370 /* ToastModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FDB2C6D5DD700408370 /* ToastModifier.swift */; };
- 90383A912D9C357F00D0DDA3 /* PipecatClientIOSSmallWebrtc in Frameworks */ = {isa = PBXBuildFile; productRef = 90383A902D9C357F00D0DDA3 /* PipecatClientIOSSmallWebrtc */; };
- 90383A932D9C35B300D0DDA3 /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90383A922D9C35B300D0DDA3 /* ChatView.swift */; };
- 90383A962D9C35BD00D0DDA3 /* LiveMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90383A942D9C35BD00D0DDA3 /* LiveMessage.swift */; };
- 90383A982D9D85E700D0DDA3 /* CameraButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90383A972D9D85E700D0DDA3 /* CameraButtonView.swift */; };
- 90383A9B2DA4620800D0DDA3 /* PipecatClientIOSSmallWebrtc in Frameworks */ = {isa = PBXBuildFile; productRef = 90383A9A2DA4620800D0DDA3 /* PipecatClientIOSSmallWebrtc */; };
- 90ABB98E2C735ED6000D9CC7 /* MeetingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB98D2C735ED6000D9CC7 /* MeetingView.swift */; };
- 90ABB9932C73820D000D9CC7 /* MicrophoneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9922C73820D000D9CC7 /* MicrophoneView.swift */; };
- 90ABB9982C738356000D9CC7 /* CustomColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9972C738356000D9CC7 /* CustomColors.swift */; };
- 90ABB99A2C73A6A9000D9CC7 /* MockCallContainerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9992C73A6A9000D9CC7 /* MockCallContainerModel.swift */; };
- 90ABB99D2C73C2D1000D9CC7 /* CallContainerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB99C2C73C2D1000D9CC7 /* CallContainerModel.swift */; };
- 90ABB9A32C74E1CE000D9CC7 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9A22C74E1CE000D9CC7 /* SettingsView.swift */; };
- 90ABB9A62C74EA8A000D9CC7 /* SettingsPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9A52C74EA8A000D9CC7 /* SettingsPreference.swift */; };
- 90ABB9A82C74EAB1000D9CC7 /* SettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9A72C74EAB1000D9CC7 /* SettingsManager.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 90031FB42C616EE900408370 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 90031F9B2C616EE700408370 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 90031FA22C616EE700408370;
- remoteInfo = SimpleChatbot;
- };
- 90031FBE2C616EE900408370 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 90031F9B2C616EE700408370 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 90031FA22C616EE700408370;
- remoteInfo = SimpleChatbot;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 90031FA32C616EE700408370 /* SimpleChatbot.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SimpleChatbot.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 90031FA62C616EE700408370 /* SimpleChatbotApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleChatbotApp.swift; sourceTree = ""; };
- 90031FA82C616EE700408370 /* PreJoinView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreJoinView.swift; sourceTree = ""; };
- 90031FAA2C616EE800408370 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- 90031FAD2C616EE800408370 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
- 90031FB32C616EE900408370 /* SimpleChatbotTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleChatbotTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 90031FB72C616EE900408370 /* SimpleChatbotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleChatbotTests.swift; sourceTree = ""; };
- 90031FBD2C616EE900408370 /* SimpleChatbotUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleChatbotUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 90031FC12C616EE900408370 /* SimpleChatbotUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleChatbotUITests.swift; sourceTree = ""; };
- 90031FC32C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleChatbotUITestsLaunchTests.swift; sourceTree = ""; };
- 90031FD62C63FD6A00408370 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
- 90031FDB2C6D5DD700408370 /* ToastModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastModifier.swift; sourceTree = ""; };
- 90383A922D9C35B300D0DDA3 /* ChatView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatView.swift; sourceTree = ""; };
- 90383A942D9C35BD00D0DDA3 /* LiveMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveMessage.swift; sourceTree = ""; };
- 90383A972D9D85E700D0DDA3 /* CameraButtonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CameraButtonView.swift; sourceTree = ""; };
- 90ABB98D2C735ED6000D9CC7 /* MeetingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingView.swift; sourceTree = ""; };
- 90ABB9922C73820D000D9CC7 /* MicrophoneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MicrophoneView.swift; sourceTree = ""; };
- 90ABB9972C738356000D9CC7 /* CustomColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomColors.swift; sourceTree = ""; };
- 90ABB9992C73A6A9000D9CC7 /* MockCallContainerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCallContainerModel.swift; sourceTree = ""; };
- 90ABB99C2C73C2D1000D9CC7 /* CallContainerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallContainerModel.swift; sourceTree = ""; };
- 90ABB9A22C74E1CE000D9CC7 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; };
- 90ABB9A52C74EA8A000D9CC7 /* SettingsPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsPreference.swift; sourceTree = ""; };
- 90ABB9A72C74EAB1000D9CC7 /* SettingsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsManager.swift; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 90031FA02C616EE700408370 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90383A912D9C357F00D0DDA3 /* PipecatClientIOSSmallWebrtc in Frameworks */,
- 90383A9B2DA4620800D0DDA3 /* PipecatClientIOSSmallWebrtc in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FB02C616EE900408370 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FBA2C616EE900408370 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 90031F9A2C616EE700408370 = {
- isa = PBXGroup;
- children = (
- 90031FA52C616EE700408370 /* SimpleChatbot */,
- 90031FB62C616EE900408370 /* SimpleChatbotTests */,
- 90031FC02C616EE900408370 /* SimpleChatbotUITests */,
- 90031FA42C616EE700408370 /* Products */,
- );
- sourceTree = "";
- };
- 90031FA42C616EE700408370 /* Products */ = {
- isa = PBXGroup;
- children = (
- 90031FA32C616EE700408370 /* SimpleChatbot.app */,
- 90031FB32C616EE900408370 /* SimpleChatbotTests.xctest */,
- 90031FBD2C616EE900408370 /* SimpleChatbotUITests.xctest */,
- );
- name = Products;
- sourceTree = "";
- };
- 90031FA52C616EE700408370 /* SimpleChatbot */ = {
- isa = PBXGroup;
- children = (
- 90383A952D9C35BD00D0DDA3 /* types */,
- 90ABB99B2C73C2C5000D9CC7 /* model */,
- 90031FDD2C6D61E000408370 /* views */,
- 90031FD62C63FD6A00408370 /* Info.plist */,
- 90031FA62C616EE700408370 /* SimpleChatbotApp.swift */,
- 90031FAA2C616EE800408370 /* Assets.xcassets */,
- 90031FAC2C616EE800408370 /* Preview Content */,
- );
- path = SimpleChatbot;
- sourceTree = "";
- };
- 90031FAC2C616EE800408370 /* Preview Content */ = {
- isa = PBXGroup;
- children = (
- 90031FAD2C616EE800408370 /* Preview Assets.xcassets */,
- );
- path = "Preview Content";
- sourceTree = "";
- };
- 90031FB62C616EE900408370 /* SimpleChatbotTests */ = {
- isa = PBXGroup;
- children = (
- 90031FB72C616EE900408370 /* SimpleChatbotTests.swift */,
- );
- path = SimpleChatbotTests;
- sourceTree = "";
- };
- 90031FC02C616EE900408370 /* SimpleChatbotUITests */ = {
- isa = PBXGroup;
- children = (
- 90031FC12C616EE900408370 /* SimpleChatbotUITests.swift */,
- 90031FC32C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift */,
- );
- path = SimpleChatbotUITests;
- sourceTree = "";
- };
- 90031FDD2C6D61E000408370 /* views */ = {
- isa = PBXGroup;
- children = (
- 90ABB99E2C73C3A9000D9CC7 /* components */,
- 90ABB9962C738346000D9CC7 /* extensions */,
- 90ABB9A42C74EA52000D9CC7 /* settings */,
- 90031FA82C616EE700408370 /* PreJoinView.swift */,
- 90ABB98D2C735ED6000D9CC7 /* MeetingView.swift */,
- );
- path = views;
- sourceTree = "";
- };
- 90383A952D9C35BD00D0DDA3 /* types */ = {
- isa = PBXGroup;
- children = (
- 90383A942D9C35BD00D0DDA3 /* LiveMessage.swift */,
- );
- path = types;
- sourceTree = "";
- };
- 90ABB9962C738346000D9CC7 /* extensions */ = {
- isa = PBXGroup;
- children = (
- 90ABB9972C738356000D9CC7 /* CustomColors.swift */,
- );
- path = extensions;
- sourceTree = "";
- };
- 90ABB99B2C73C2C5000D9CC7 /* model */ = {
- isa = PBXGroup;
- children = (
- 90ABB9992C73A6A9000D9CC7 /* MockCallContainerModel.swift */,
- 90ABB99C2C73C2D1000D9CC7 /* CallContainerModel.swift */,
- );
- path = model;
- sourceTree = "";
- };
- 90ABB99E2C73C3A9000D9CC7 /* components */ = {
- isa = PBXGroup;
- children = (
- 90383A972D9D85E700D0DDA3 /* CameraButtonView.swift */,
- 90383A922D9C35B300D0DDA3 /* ChatView.swift */,
- 90ABB9922C73820D000D9CC7 /* MicrophoneView.swift */,
- 90031FDB2C6D5DD700408370 /* ToastModifier.swift */,
- );
- path = components;
- sourceTree = "";
- };
- 90ABB9A42C74EA52000D9CC7 /* settings */ = {
- isa = PBXGroup;
- children = (
- 90ABB9A52C74EA8A000D9CC7 /* SettingsPreference.swift */,
- 90ABB9A72C74EAB1000D9CC7 /* SettingsManager.swift */,
- 90ABB9A22C74E1CE000D9CC7 /* SettingsView.swift */,
- );
- path = settings;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 90031FA22C616EE700408370 /* SimpleChatbot */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 90031FC72C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbot" */;
- buildPhases = (
- 90031F9F2C616EE700408370 /* Sources */,
- 90031FA02C616EE700408370 /* Frameworks */,
- 90031FA12C616EE700408370 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = SimpleChatbot;
- packageProductDependencies = (
- 90383A902D9C357F00D0DDA3 /* PipecatClientIOSSmallWebrtc */,
- 90383A9A2DA4620800D0DDA3 /* PipecatClientIOSSmallWebrtc */,
- );
- productName = SimpleChatbot;
- productReference = 90031FA32C616EE700408370 /* SimpleChatbot.app */;
- productType = "com.apple.product-type.application";
- };
- 90031FB22C616EE900408370 /* SimpleChatbotTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 90031FCA2C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbotTests" */;
- buildPhases = (
- 90031FAF2C616EE900408370 /* Sources */,
- 90031FB02C616EE900408370 /* Frameworks */,
- 90031FB12C616EE900408370 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 90031FB52C616EE900408370 /* PBXTargetDependency */,
- );
- name = SimpleChatbotTests;
- productName = SimpleChatbotTests;
- productReference = 90031FB32C616EE900408370 /* SimpleChatbotTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
- 90031FBC2C616EE900408370 /* SimpleChatbotUITests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 90031FCD2C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbotUITests" */;
- buildPhases = (
- 90031FB92C616EE900408370 /* Sources */,
- 90031FBA2C616EE900408370 /* Frameworks */,
- 90031FBB2C616EE900408370 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 90031FBF2C616EE900408370 /* PBXTargetDependency */,
- );
- name = SimpleChatbotUITests;
- productName = SimpleChatbotUITests;
- productReference = 90031FBD2C616EE900408370 /* SimpleChatbotUITests.xctest */;
- productType = "com.apple.product-type.bundle.ui-testing";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 90031F9B2C616EE700408370 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- BuildIndependentTargetsInParallel = 1;
- LastSwiftUpdateCheck = 1540;
- LastUpgradeCheck = 1540;
- TargetAttributes = {
- 90031FA22C616EE700408370 = {
- CreatedOnToolsVersion = 15.4;
- };
- 90031FB22C616EE900408370 = {
- CreatedOnToolsVersion = 15.4;
- TestTargetID = 90031FA22C616EE700408370;
- };
- 90031FBC2C616EE900408370 = {
- CreatedOnToolsVersion = 15.4;
- TestTargetID = 90031FA22C616EE700408370;
- };
- };
- };
- buildConfigurationList = 90031F9E2C616EE700408370 /* Build configuration list for PBXProject "SimpleChatbot" */;
- compatibilityVersion = "Xcode 14.0";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 90031F9A2C616EE700408370;
- packageReferences = (
- 90383A992DA4620800D0DDA3 /* XCRemoteSwiftPackageReference "pipecat-client-ios-small-webrtc" */,
- );
- productRefGroup = 90031FA42C616EE700408370 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 90031FA22C616EE700408370 /* SimpleChatbot */,
- 90031FB22C616EE900408370 /* SimpleChatbotTests */,
- 90031FBC2C616EE900408370 /* SimpleChatbotUITests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 90031FA12C616EE700408370 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90031FAE2C616EE800408370 /* Preview Assets.xcassets in Resources */,
- 90031FAB2C616EE800408370 /* Assets.xcassets in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FB12C616EE900408370 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FBB2C616EE900408370 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 90031F9F2C616EE700408370 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90ABB99D2C73C2D1000D9CC7 /* CallContainerModel.swift in Sources */,
- 90ABB9A62C74EA8A000D9CC7 /* SettingsPreference.swift in Sources */,
- 90383A962D9C35BD00D0DDA3 /* LiveMessage.swift in Sources */,
- 90ABB99A2C73A6A9000D9CC7 /* MockCallContainerModel.swift in Sources */,
- 90031FA92C616EE700408370 /* PreJoinView.swift in Sources */,
- 90383A982D9D85E700D0DDA3 /* CameraButtonView.swift in Sources */,
- 90383A932D9C35B300D0DDA3 /* ChatView.swift in Sources */,
- 90ABB9982C738356000D9CC7 /* CustomColors.swift in Sources */,
- 90ABB98E2C735ED6000D9CC7 /* MeetingView.swift in Sources */,
- 90ABB9A32C74E1CE000D9CC7 /* SettingsView.swift in Sources */,
- 90ABB9932C73820D000D9CC7 /* MicrophoneView.swift in Sources */,
- 90ABB9A82C74EAB1000D9CC7 /* SettingsManager.swift in Sources */,
- 90031FDC2C6D5DD700408370 /* ToastModifier.swift in Sources */,
- 90031FA72C616EE700408370 /* SimpleChatbotApp.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FAF2C616EE900408370 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90031FB82C616EE900408370 /* SimpleChatbotTests.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FB92C616EE900408370 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90031FC42C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift in Sources */,
- 90031FC22C616EE900408370 /* SimpleChatbotUITests.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 90031FB52C616EE900408370 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 90031FA22C616EE700408370 /* SimpleChatbot */;
- targetProxy = 90031FB42C616EE900408370 /* PBXContainerItemProxy */;
- };
- 90031FBF2C616EE900408370 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 90031FA22C616EE700408370 /* SimpleChatbot */;
- targetProxy = 90031FBE2C616EE900408370 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
- 90031FC52C616EE900408370 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- ENABLE_USER_SCRIPT_SANDBOXING = YES;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.5;
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- 90031FC62C616EE900408370 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_USER_SCRIPT_SANDBOXING = YES;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.5;
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MTL_ENABLE_DEBUG_INFO = NO;
- MTL_FAST_MATH = YES;
- SDKROOT = iphoneos;
- SWIFT_COMPILATION_MODE = wholemodule;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 90031FC82C616EE900408370 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_ASSET_PATHS = "\"SimpleChatbot/Preview Content\"";
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- ENABLE_PREVIEWS = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = SimpleChatbot/Info.plist;
- INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
- INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbot;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- 90031FC92C616EE900408370 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_ASSET_PATHS = "\"SimpleChatbot/Preview Content\"";
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- ENABLE_PREVIEWS = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = SimpleChatbot/Info.plist;
- INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
- INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbot;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Release;
- };
- 90031FCB2C616EE900408370 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- BUNDLE_LOADER = "$(TEST_HOST)";
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- GENERATE_INFOPLIST_FILE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.5;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbotTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimpleChatbot.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SimpleChatbot";
- };
- name = Debug;
- };
- 90031FCC2C616EE900408370 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- BUNDLE_LOADER = "$(TEST_HOST)";
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- GENERATE_INFOPLIST_FILE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.5;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbotTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimpleChatbot.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SimpleChatbot";
- };
- name = Release;
- };
- 90031FCE2C616EE900408370 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- GENERATE_INFOPLIST_FILE = YES;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbotUITests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_TARGET_NAME = SimpleChatbot;
- };
- name = Debug;
- };
- 90031FCF2C616EE900408370 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- GENERATE_INFOPLIST_FILE = YES;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbotUITests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_TARGET_NAME = SimpleChatbot;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 90031F9E2C616EE700408370 /* Build configuration list for PBXProject "SimpleChatbot" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 90031FC52C616EE900408370 /* Debug */,
- 90031FC62C616EE900408370 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 90031FC72C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbot" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 90031FC82C616EE900408370 /* Debug */,
- 90031FC92C616EE900408370 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 90031FCA2C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbotTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 90031FCB2C616EE900408370 /* Debug */,
- 90031FCC2C616EE900408370 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 90031FCD2C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbotUITests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 90031FCE2C616EE900408370 /* Debug */,
- 90031FCF2C616EE900408370 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
- 90383A992DA4620800D0DDA3 /* XCRemoteSwiftPackageReference "pipecat-client-ios-small-webrtc" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/pipecat-ai/pipecat-client-ios-small-webrtc";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 0.0.1;
- };
- };
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
- 90383A902D9C357F00D0DDA3 /* PipecatClientIOSSmallWebrtc */ = {
- isa = XCSwiftPackageProductDependency;
- productName = PipecatClientIOSSmallWebrtc;
- };
- 90383A9A2DA4620800D0DDA3 /* PipecatClientIOSSmallWebrtc */ = {
- isa = XCSwiftPackageProductDependency;
- package = 90383A992DA4620800D0DDA3 /* XCRemoteSwiftPackageReference "pipecat-client-ios-small-webrtc" */;
- productName = PipecatClientIOSSmallWebrtc;
- };
-/* End XCSwiftPackageProductDependency section */
- };
- rootObject = 90031F9B2C616EE700408370 /* Project object */;
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
deleted file mode 100644
index 08de0be8d..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
-
-
-
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
deleted file mode 100644
index a36695ef7..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "originHash" : "77cb3fee4071811f880e69dbcd5a8ba01711a73372960391d6366c4c3a0d36eb",
- "pins" : [
- {
- "identity" : "pipecat-client-ios",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/pipecat-ai/pipecat-client-ios.git",
- "state" : {
- "revision" : "992641fb5f7d1a794ecfc33babb5fe36e2a8ffdd",
- "version" : "0.3.5"
- }
- },
- {
- "identity" : "pipecat-client-ios-small-webrtc",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/pipecat-ai/pipecat-client-ios-small-webrtc",
- "state" : {
- "revision" : "a6e4516b1fcbed772ca97a9616dddc9329097958",
- "version" : "0.0.1"
- }
- },
- {
- "identity" : "webrtc",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/stasel/WebRTC",
- "state" : {
- "revision" : "5b2eb61cace7d62726b29a38b768b07d6bc55c45",
- "version" : "134.0.0"
- }
- }
- ],
- "version" : 3
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/xcshareddata/xcschemes/SimpleChatbot.xcscheme b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/xcshareddata/xcschemes/SimpleChatbot.xcscheme
deleted file mode 100644
index 632ae199d..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot.xcodeproj/xcshareddata/xcschemes/SimpleChatbot.xcscheme
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 44ac9cc28..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "images" : [
- {
- "filename" : "appstore.png",
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/appstore.png b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/appstore.png
deleted file mode 100644
index e6e615ad2..000000000
Binary files a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/appstore.png and /dev/null differ
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/Contents.json b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/Contents.json
deleted file mode 100644
index 73c00596a..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Contents.json b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Contents.json
deleted file mode 100644
index 6e1102089..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Square Black.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Square Black.svg b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Square Black.svg
deleted file mode 100644
index 0db9a0f64..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Square Black.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/vision.imageset/Contents.json b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/vision.imageset/Contents.json
deleted file mode 100644
index 0c0cddcdc..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/vision.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "vision.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/vision.imageset/vision.svg b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/vision.imageset/vision.svg
deleted file mode 100644
index 8225a460f..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Assets.xcassets/vision.imageset/vision.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Info.plist b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Info.plist
deleted file mode 100644
index c5a7b5685..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Info.plist
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- UIBackgroundModes
-
- voip
-
- NSCameraUsageDescription
- Camera is necessary for transmitting video in a call
- NSMicrophoneUsageDescription
- Microphone is necessary for transmitting audio in a call
- NSAppTransportSecurity
-
- NSAllowsLocalNetworking
-
-
-
-
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Preview Content/Preview Assets.xcassets/Contents.json b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Preview Content/Preview Assets.xcassets/Contents.json
deleted file mode 100644
index 73c00596a..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/Preview Content/Preview Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/SimpleChatbotApp.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/SimpleChatbotApp.swift
deleted file mode 100644
index 7b1e78703..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/SimpleChatbotApp.swift
+++ /dev/null
@@ -1,18 +0,0 @@
-import SwiftUI
-
-@main
-struct SimpleChatbotApp: App {
-
- @StateObject var callContainerModel = CallContainerModel()
-
- var body: some Scene {
- WindowGroup {
- if (!callContainerModel.isInCall) {
- PreJoinView().environmentObject(callContainerModel)
- } else {
- MeetingView().environmentObject(callContainerModel)
- }
- }
- }
-
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/model/CallContainerModel.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/model/CallContainerModel.swift
deleted file mode 100644
index 0f35f1326..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/model/CallContainerModel.swift
+++ /dev/null
@@ -1,284 +0,0 @@
-import SwiftUI
-
-import PipecatClientIOSSmallWebrtc
-import PipecatClientIOS
-
-class CallContainerModel: ObservableObject {
-
- @Published var voiceClientStatus: String = TransportState.disconnected.description
- @Published var isInCall: Bool = false
- @Published var isBotReady: Bool = false
-
- @Published var isMicEnabled: Bool = false
- @Published var isCamEnabled: Bool = false
- @Published var localCamId: MediaTrackId? = nil
- @Published var botCamId: MediaTrackId? = nil
-
- @Published var toastMessage: String? = nil
- @Published var showToast: Bool = false
-
- @Published var messages: [LiveMessage] = []
- @Published var liveBotMessage: LiveMessage?
- @Published var liveUserMessage: LiveMessage?
-
- var rtviClientIOS: RTVIClient?
-
- @Published var selectedMic: MediaDeviceId? = nil {
- didSet {
- guard let selectedMic else { return } // don't store nil
- var settings = SettingsManager.getSettings()
- settings.selectedMic = selectedMic.id
- SettingsManager.updateSettings(settings: settings)
- }
- }
- @Published var availableMics: [MediaDeviceInfo] = []
-
- init() {
- // Changing the log level
- PipecatClientIOS.setLogLevel(.warn)
- PipecatClientIOSSmallWebrtc.setLogLevel(.info)
- }
-
- @MainActor
- func connect(backendURL: String) {
- self.resetLiveMessages()
-
- let baseUrl = backendURL.trimmingCharacters(in: .whitespacesAndNewlines)
- if(baseUrl.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty){
- self.showError(message: "Need to fill the backendURL")
- return
- }
-
- let currentSettings = SettingsManager.getSettings()
- let rtviClientOptions = RTVIClientOptions.init(
- enableMic: currentSettings.enableMic,
- enableCam: currentSettings.enableCam,
- params: RTVIClientParams(
- config: [
- .init(
- service: SmallWebRTCTransport.SERVICE_NAME,
- options: [
- .init(name: "server_url", value: .string(baseUrl))
- ]
- )
- ]
- )
- )
- self.rtviClientIOS = RTVIClient.init(
- transport: SmallWebRTCTransport.init(options: rtviClientOptions),
- options: rtviClientOptions
- )
- self.rtviClientIOS?.delegate = self
-
- // Registering the llm helper, we will need this to handle the function calling
- let llmHelper = try? self.rtviClientIOS?.registerHelper(service: "llm", helper: LLMHelper.self)
- llmHelper?.delegate = self
-
- self.rtviClientIOS?.start() { result in
- switch result {
- case .failure(let error):
- self.showError(message: error.localizedDescription)
- self.rtviClientIOS = nil
- case .success():
- // Apply initial mic preference
- if let selectedMic = SettingsManager.getSettings().selectedMic {
- self.selectMic(MediaDeviceId(id: selectedMic))
- }
- // Populate available devices list
- self.availableMics = self.rtviClientIOS?.getAllMics() ?? []
- }
- }
- self.saveCredentials(backendURL: backendURL)
- }
-
- @MainActor
- func disconnect() {
- self.rtviClientIOS?.disconnect(completion: nil)
- self.rtviClientIOS?.release()
- self.rtviClientIOS = nil
- }
-
- func showError(message: String) {
- self.toastMessage = message
- self.showToast = true
- // Hide the toast after 5 seconds
- DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
- self.showToast = false
- self.toastMessage = nil
- }
- }
-
- @MainActor
- func toggleMicInput() {
- self.rtviClientIOS?.enableMic(enable: !self.isMicEnabled) { result in
- switch result {
- case .success():
- self.isMicEnabled = self.rtviClientIOS?.isMicEnabled ?? false
- case .failure(let error):
- self.showError(message: error.localizedDescription)
- }
- }
- }
-
- @MainActor
- func toggleCamInput() {
- self.rtviClientIOS?.enableCam(enable: !self.isCamEnabled) { result in
- switch result {
- case .success():
- self.isCamEnabled = self.rtviClientIOS?.isCamEnabled ?? false
- case .failure(let error):
- self.showError(message: error.localizedDescription)
- }
- }
- }
-
- func saveCredentials(backendURL: String) {
- var currentSettings = SettingsManager.getSettings()
- currentSettings.backendURL = backendURL
- // Saving the settings
- SettingsManager.updateSettings(settings: currentSettings)
- }
-
- @MainActor
- func selectMic(_ mic: MediaDeviceId) {
- self.selectedMic = mic
- self.rtviClientIOS?.updateMic(micId: mic, completion: nil)
- }
-
- private func createLiveMessage(content:String = "", type:MessageType) {
- // Creating a new one
- DispatchQueue.main.async {
- let liveMessage = LiveMessage(content: content, type: type, updatedAt: Date())
- self.messages.append(liveMessage)
- if type == .bot {
- self.liveBotMessage = liveMessage
- } else if type == .user {
- self.liveUserMessage = liveMessage
- }
- }
- }
-
- private func appendTextToLiveMessage(fromBot: Bool, content:String) {
- DispatchQueue.main.async {
- // Updating the last message with the new content
- if fromBot {
- self.liveBotMessage?.content += content
- } else {
- self.liveUserMessage?.content += content
- }
- }
- }
-
- private func resetLiveMessages() {
- DispatchQueue.main.async {
- self.messages = []
- }
- }
-}
-
-extension CallContainerModel:RTVIClientDelegate, LLMHelperDelegate {
-
- private func handleEvent(eventName: String, eventValue: Any? = nil) {
- if let value = eventValue {
- print("Pipecat Demo, received event: \(eventName), value:\(value)")
- } else {
- print("Pipecat Demo, received event: \(eventName)")
- }
- }
-
- func onTransportStateChanged(state: TransportState) {
- Task { @MainActor in
- self.handleEvent(eventName: "onTransportStateChanged", eventValue: state)
- self.voiceClientStatus = state.description
- self.isInCall = ( state == .connecting || state == .connected || state == .ready || state == .authenticating )
- self.createLiveMessage(content: state.description, type: .system)
- }
- }
-
- func onBotReady(botReadyData: BotReadyData) {
- Task { @MainActor in
- self.handleEvent(eventName: "onBotReady")
- self.isBotReady = true
- }
- }
-
- func onConnected() {
- Task { @MainActor in
- self.handleEvent(eventName: "onConnected")
- self.isMicEnabled = self.rtviClientIOS?.isMicEnabled ?? false
- self.isCamEnabled = self.rtviClientIOS?.isCamEnabled ?? false
- }
- }
-
- func onDisconnected() {
- Task { @MainActor in
- self.handleEvent(eventName: "onDisconnected")
- self.isBotReady = false
- }
- }
-
- func onError(message: String) {
- Task { @MainActor in
- self.handleEvent(eventName: "onError", eventValue: message)
- self.showError(message: message)
- }
- }
-
- func onAvailableMicsUpdated(mics: [MediaDeviceInfo]) {
- Task { @MainActor in
- self.availableMics = mics
- }
- }
-
- func onMicUpdated(mic: MediaDeviceInfo?) {
- Task { @MainActor in
- self.selectedMic = mic?.id
- }
- }
-
- func onBotTranscript(data: String) {
- self.handleEvent(eventName: "onBotTranscript", eventValue: data)
- }
-
- func onTracksUpdated(tracks: Tracks) {
- self.handleEvent(eventName: "onTracksUpdated", eventValue: tracks)
- Task { @MainActor in
- self.localCamId = tracks.local.video
- self.botCamId = tracks.bot?.video ?? nil
- }
- }
-
- func onUserStartedSpeaking() {
- self.createLiveMessage(content: "User started speaking", type: .system)
- self.handleEvent(eventName: "onUserStartedSpeaking")
- self.createLiveMessage(type: .user)
- }
-
- func onUserStoppedSpeaking() {
- self.createLiveMessage(content: "User stopped speaking", type: .system)
- self.handleEvent(eventName: "onUserStoppedSpeaking")
- }
-
- func onBotStartedSpeaking() {
- self.createLiveMessage(content: "Bot started speaking", type: .system)
- self.handleEvent(eventName: "onBotStartedSpeaking")
- self.createLiveMessage(type: .bot)
- }
-
- func onBotStoppedSpeaking() {
- self.createLiveMessage(content: "Bot stopped speaking", type: .system)
- self.handleEvent(eventName: "onBotStoppedSpeaking")
- }
-
- func onUserTranscript(data: Transcript) {
- if data.final ?? false {
- self.handleEvent(eventName: "onUserTranscript", eventValue: data.text)
- self.appendTextToLiveMessage(fromBot: false, content: data.text)
- }
- }
-
- func onBotTTSText(data: BotTTSText) {
- self.appendTextToLiveMessage(fromBot: true, content: data.text)
- }
-
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/model/MockCallContainerModel.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/model/MockCallContainerModel.swift
deleted file mode 100644
index aabc6e2a2..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/model/MockCallContainerModel.swift
+++ /dev/null
@@ -1,43 +0,0 @@
-import SwiftUI
-import PipecatClientIOS
-
-class MockCallContainerModel: CallContainerModel {
-
- override init() {
- super.init()
- let liveMessageFromSystem = LiveMessage(
- content: "System message",
- type: .system,
- updatedAt: Date()
- )
- let liveMessageFromUser = LiveMessage(
- content: "Message from User",
- type: .user,
- updatedAt: Date()
- )
- let liveMessageFromBot = LiveMessage(
- content: "Message from bot",
- type: .bot,
- updatedAt: Date()
- )
- self.messages = [ liveMessageFromSystem, liveMessageFromUser, liveMessageFromBot ]
- }
-
- override func connect(backendURL: String) {
- print("connect")
- }
-
- override func disconnect() {
- print("disconnect")
- }
-
- override func showError(message: String) {
- self.toastMessage = message
- self.showToast = true
- // Hide the toast after 5 seconds
- DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
- self.showToast = false
- self.toastMessage = nil
- }
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/types/LiveMessage.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/types/LiveMessage.swift
deleted file mode 100644
index 6e85214c0..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/types/LiveMessage.swift
+++ /dev/null
@@ -1,21 +0,0 @@
-import Foundation
-
-enum MessageType {
- case bot, user, system
-}
-
-class LiveMessage: ObservableObject, Identifiable, Equatable {
- @Published var content: String
- let type: MessageType
- let updatedAt: Date
-
- init(content: String, type: MessageType, updatedAt: Date) {
- self.content = content
- self.type = type
- self.updatedAt = updatedAt
- }
-
- static func == (lhs: LiveMessage, rhs: LiveMessage) -> Bool {
- lhs.updatedAt == rhs.updatedAt
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/MeetingView.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/MeetingView.swift
deleted file mode 100644
index 8a1a5c361..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/MeetingView.swift
+++ /dev/null
@@ -1,81 +0,0 @@
-import SwiftUI
-import PipecatClientIOSSmallWebrtc
-
-struct MeetingView: View {
-
- @State private var showingSettings = false
- @EnvironmentObject private var model: CallContainerModel
-
- var body: some View {
- VStack {
- ZStack {
- SmallWebRTCVideoViewSwiftUI(videoTrack: self.model.botCamId, videoScaleMode: .fill)
- .edgesIgnoringSafeArea(.all)
-
- VStack {
- ChatView()
- .frame(maxHeight: .infinity)
-
- HStack {
- MicrophoneView(audioLevel: 0, isMuted: !self.model.isMicEnabled)
- .frame(width: 100, height: 100)
- .onTapGesture {
- self.model.toggleMicInput()
- }
- CameraButtonView(trackId: self.model.localCamId, isMuted: !self.model.isCamEnabled)
- .frame(width: 120, height: 120)
- .onTapGesture {
- self.model.toggleCamInput()
- }
- }
- .padding()
- }
- }
- Button(action: {
- self.showingSettings = true
- }) {
- HStack {
- Image(systemName: "gearshape")
- .resizable()
- .frame(width: 24, height: 24)
- Text("Settings")
- }
- .frame(maxWidth: .infinity)
- .padding()
- .sheet(isPresented: $showingSettings) {
- SettingsView(showingSettings: $showingSettings).environmentObject(self.model)
- }
- }
- .foregroundColor(.black)
- .background(Color.white)
- .border(Color.buttonsBorder, width: 1)
- .cornerRadius(12)
- .padding([.horizontal])
-
- Button(action: {
- self.model.disconnect()
- }) {
- HStack {
- Image(systemName: "rectangle.portrait.and.arrow.right")
- .resizable()
- .frame(width: 24, height: 24)
- Text("End")
- }
- .frame(maxWidth: .infinity)
- .padding()
- }
- .foregroundColor(.white)
- .background(Color.black)
- .cornerRadius(12)
- .padding([.bottom, .horizontal])
- }
- .background(Color.backgroundApp)
- .toast(message: model.toastMessage, isShowing: model.showToast)
- }
-}
-
-#Preview {
- let mockModel = MockCallContainerModel()
- let result = MeetingView().environmentObject(mockModel as CallContainerModel)
- return result
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/PreJoinView.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/PreJoinView.swift
deleted file mode 100644
index 64f9952fc..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/PreJoinView.swift
+++ /dev/null
@@ -1,44 +0,0 @@
-import SwiftUI
-
-struct PreJoinView: View {
-
- @State var backendURL: String
-
- @EnvironmentObject private var model: CallContainerModel
-
- init() {
- let currentSettings = SettingsManager.getSettings()
- self.backendURL = currentSettings.backendURL
- }
-
- var body: some View {
- VStack(spacing: 20) {
- Image("pipecat")
- .resizable()
- .frame(width: 80, height: 80)
- Text("Pipecat Client iOS.")
- .font(.headline)
- TextField("Server URL", text: $backendURL)
- .textFieldStyle(RoundedBorderTextFieldStyle())
- .frame(maxWidth: .infinity)
- .padding([.bottom, .horizontal])
- Button("Connect") {
- Task {
- await self.model.connect(backendURL: self.backendURL)
- }
- }
- .padding()
- .background(Color.black)
- .foregroundColor(.white)
- .cornerRadius(8)
- }
- .padding()
- .frame(maxHeight: .infinity)
- .background(Color.backgroundApp)
- .toast(message: model.toastMessage, isShowing: model.showToast)
- }
-}
-
-#Preview {
- PreJoinView().environmentObject(MockCallContainerModel() as CallContainerModel)
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/CameraButtonView.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/CameraButtonView.swift
deleted file mode 100644
index c5c50e6cc..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/CameraButtonView.swift
+++ /dev/null
@@ -1,42 +0,0 @@
-import SwiftUI
-import PipecatClientIOS
-import PipecatClientIOSSmallWebrtc
-
-struct CameraButtonView: View {
- var trackId: MediaTrackId?
- var isMuted: Bool
-
- var body: some View {
- GeometryReader { geometry in
- let width = geometry.size.width
- let circleSize = width * 0.9
- let innerCircleSize = width * 0.82
-
- ZStack {
- Circle()
- .stroke(Color.gray, lineWidth: 1)
- .frame(width: circleSize)
-
- if (!isMuted){
- SmallWebRTCVideoViewSwiftUI(videoTrack: trackId, videoScaleMode: .fill)
- .aspectRatio(1, contentMode: .fit)
- .clipShape(Circle())
- } else {
- Circle()
- .fill(Color.disabledVision)
- .frame(width: innerCircleSize)
- Image("vision")
- .resizable()
- .scaledToFit()
- .frame(width: width * 0.3)
- .foregroundColor(.green)
- }
- }
- .frame(maxWidth: .infinity, maxHeight: .infinity) // Ensures the ZStack is centered
- }
- }
-}
-
-#Preview {
- CameraButtonView(trackId: nil, isMuted: true)
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/ChatView.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/ChatView.swift
deleted file mode 100644
index 751b4cbc3..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/ChatView.swift
+++ /dev/null
@@ -1,96 +0,0 @@
-import SwiftUI
-
-struct ChatView: View {
- @EnvironmentObject private var model: CallContainerModel
- @State private var timer = Timer.publish(every: 0.5, on: .main, in: .common).autoconnect()
-
- var body: some View {
- VStack {
- ScrollViewReader { scrollViewProxy in
- ScrollView {
- VStack(spacing: 10) {
- ForEach(self.model.messages) { message in
- MessageView(message: message)
- .frame(maxWidth: .infinity, alignment: messageAlignment(for: message.type))
- .padding(.horizontal)
- .id(message.id)
- }
- }
- .onChange(of: self.model.messages) { _, _ in
- scrollToLastMessage(scrollViewProxy)
- }
- }
- .onReceive(timer) { _ in
- scrollToLastMessage(scrollViewProxy)
- }
- .onAppear {
- scrollToLastMessage(scrollViewProxy)
- }
- }
- }
- .edgesIgnoringSafeArea(.bottom)
- }
-
- private func messageAlignment(for type: MessageType) -> Alignment {
- switch type {
- case .bot: return .leading
- case .user: return .trailing
- case .system: return .center
- }
- }
-
- private func scrollToLastMessage(_ scrollViewProxy: ScrollViewProxy) {
- if let lastMessageId = self.model.messages.last?.id {
- withAnimation {
- scrollViewProxy.scrollTo(lastMessageId, anchor: .bottom)
- }
- }
- }
-}
-
-struct MessageView: View {
- @ObservedObject var message: LiveMessage
-
- var body: some View {
- HStack {
- if message.type == .bot {
- Image(systemName: "gearshape")
- .resizable()
- .frame(width: 24, height: 24)
- }
-
- Text(message.content)
- .padding(message.type == .system ? 5 : 10)
- .foregroundColor(.white)
- .background(messageBackgroundColor(for: message.type))
- .cornerRadius(15)
- .overlay(
- RoundedRectangle(cornerRadius: 15)
- .stroke(Color.gray.opacity(0.5), lineWidth: 1)
- )
- }
- .padding(messagePadding(for: message.type))
- }
-
- private func messageBackgroundColor(for type: MessageType) -> Color {
- switch type {
- case .bot: return .black
- case .user: return .gray
- case .system: return .blue.opacity(0.6)
- }
- }
-
- private func messagePadding(for type: MessageType) -> EdgeInsets {
- switch type {
- case .bot: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 40)
- case .user: return EdgeInsets(top: 0, leading: 40, bottom: 0, trailing: 0)
- case .system: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)
- }
- }
-}
-
-#Preview {
- let mockModel = MockCallContainerModel()
- let result = ChatView().environmentObject(mockModel as CallContainerModel)
- return result
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/MicrophoneView.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/MicrophoneView.swift
deleted file mode 100644
index 7cdaf1e80..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/MicrophoneView.swift
+++ /dev/null
@@ -1,44 +0,0 @@
-import SwiftUI
-
-struct MicrophoneView: View {
- var audioLevel: Float // Current audio level
- var isMuted: Bool // Muted state
-
- var body: some View {
- GeometryReader { geometry in
- let width = geometry.size.width
- let circleSize = width * 0.9
- let innerCircleSize = width * 0.82
- let audioCircleSize = CGFloat(audioLevel) * (width * 0.95)
-
- ZStack {
- Circle()
- .stroke(Color.gray, lineWidth: 1)
- .frame(width: circleSize)
-
- Circle()
- .fill(isMuted ? Color.disabledMic : Color.backgroundCircle)
- .frame(width: innerCircleSize)
-
- if !isMuted {
- Circle()
- .fill(Color.micVolume)
- .opacity(0.5)
- .frame(width: audioCircleSize)
- .animation(.easeInOut(duration: 0.2), value: audioLevel)
- }
-
- Image(systemName: isMuted ? "mic.slash.fill" : "mic.fill")
- .resizable()
- .scaledToFit()
- .frame(width: width * 0.2)
- .foregroundColor(.white)
- }
- .frame(maxWidth: .infinity, maxHeight: .infinity) // Ensures the ZStack is centered
- }
- }
-}
-
-#Preview {
- MicrophoneView(audioLevel: 1, isMuted: false)
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/ToastModifier.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/ToastModifier.swift
deleted file mode 100644
index 9e36125eb..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/components/ToastModifier.swift
+++ /dev/null
@@ -1,31 +0,0 @@
-import SwiftUI
-
-struct ToastModifier: ViewModifier {
- var message: String?
- var isShowing: Bool
-
- func body(content: Content) -> some View {
- ZStack {
- content
- if isShowing, let message = message {
- VStack {
- Text(message)
- .padding()
- .background(Color.black.opacity(0.7))
- .foregroundColor(.white)
- .cornerRadius(8)
- .transition(.slide)
- .padding(.top, 50)
- Spacer()
- }
- .animation(.easeInOut(duration: 0.5), value: isShowing)
- }
- }
- }
-}
-
-extension View {
- func toast(message: String?, isShowing: Bool) -> some View {
- self.modifier(ToastModifier(message: message, isShowing: isShowing))
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/extensions/CustomColors.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/extensions/CustomColors.swift
deleted file mode 100644
index 44faeee50..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/extensions/CustomColors.swift
+++ /dev/null
@@ -1,26 +0,0 @@
-import SwiftUI
-
-public extension Color {
-
- static let backgroundCircle = Color(hex: "#374151")
- static let backgroundCircleNotConnected = Color(hex: "#D1D5DB")
- static let backgroundApp = Color(hex: "#F9FAFB")
- static let buttonsBorder = Color(hex: "#E5E7EB")
- static let micVolume = Color(hex: "#86EFAC")
- static let disabledMic = Color(hex: "#ee6b6e")
- static let disabledVision = Color(hex: "#BBF7D0")
-
- init(hex: String) {
- let scanner = Scanner(string: hex)
- _ = scanner.scanString("#")
-
- var rgb: UInt64 = 0
- scanner.scanHexInt64(&rgb)
-
- let red = Double((rgb >> 16) & 0xFF) / 255.0
- let green = Double((rgb >> 8) & 0xFF) / 255.0
- let blue = Double(rgb & 0xFF) / 255.0
-
- self.init(red: red, green: green, blue: blue)
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsManager.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsManager.swift
deleted file mode 100644
index 495780dfd..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsManager.swift
+++ /dev/null
@@ -1,21 +0,0 @@
-import Foundation
-
-class SettingsManager {
- private static let preferencesKey = "settingsPreference"
-
- static func getSettings() -> SettingsPreference {
- if let data = UserDefaults.standard.data(forKey: preferencesKey),
- let settings = try? JSONDecoder().decode(SettingsPreference.self, from: data) {
- return settings
- } else {
- // default values in case we don't have any settings
- return SettingsPreference(enableMic: true, enableCam: true, backendURL: "http://YOUR_IP:7860")
- }
- }
-
- static func updateSettings(settings: SettingsPreference) {
- if let data = try? JSONEncoder().encode(settings) {
- UserDefaults.standard.set(data, forKey: preferencesKey)
- }
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsPreference.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsPreference.swift
deleted file mode 100644
index 5314340b2..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsPreference.swift
+++ /dev/null
@@ -1,9 +0,0 @@
-import Foundation
-
-struct SettingsPreference: Codable {
- var selectedMic: String?
- var enableMic: Bool
- var enableCam: Bool
- var backendURL: String
-}
-
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsView.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsView.swift
deleted file mode 100644
index 22ac55b0c..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/settings/SettingsView.swift
+++ /dev/null
@@ -1,82 +0,0 @@
-import SwiftUI
-
-struct SettingsView: View {
-
- @EnvironmentObject private var model: CallContainerModel
-
- @Binding var showingSettings: Bool
-
- @State private var isMicEnabled: Bool = true
- @State private var isCamEnabled: Bool = true
- @State private var backendURL: String = ""
-
- var body: some View {
- NavigationView {
- Form {
- Section {
- List(model.availableMics, id: \.self.id.id) { mic in
- Button(action: {
- model.selectMic(mic.id)
- }) {
- HStack {
- Text(mic.name)
- Spacer()
- if mic.id == model.selectedMic {
- Image(systemName: "checkmark")
- }
- }
- }
- }
- } header: {
- VStack(alignment: .leading) {
- Text("Audio Settings")
- Text("(No selection = system default)")
- }
- }
- Section(header: Text("Start options")) {
- Toggle("Enable Microphone", isOn: $isMicEnabled)
- Toggle("Enable Cam", isOn: $isCamEnabled)
- }
- Section(header: Text("Server")) {
- TextField("Backend URL", text: $backendURL)
- .keyboardType(.URL)
- }
- }
- .navigationTitle("Settings")
- .toolbar {
- ToolbarItem(placement: .cancellationAction) {
- Button("Close") {
- self.saveSettings()
- self.showingSettings = false
- }
- }
- }
- .onAppear {
- self.loadSettings()
- }
- }
- }
-
- private func saveSettings() {
- let newSettings = SettingsPreference(
- selectedMic: model.selectedMic?.id,
- enableMic: isMicEnabled,
- enableCam: isCamEnabled,
- backendURL: backendURL
- )
- SettingsManager.updateSettings(settings: newSettings)
- }
-
- private func loadSettings() {
- let savedSettings = SettingsManager.getSettings()
- self.isMicEnabled = savedSettings.enableMic
- self.isCamEnabled = savedSettings.enableCam
- self.backendURL = savedSettings.backendURL
- }
-}
-
-#Preview {
- let mockModel = MockCallContainerModel()
- let result = SettingsView(showingSettings: .constant(true)).environmentObject(mockModel as CallContainerModel)
- return result
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotTests/SimpleChatbotTests.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotTests/SimpleChatbotTests.swift
deleted file mode 100644
index 8fcb737d7..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotTests/SimpleChatbotTests.swift
+++ /dev/null
@@ -1,29 +0,0 @@
-import XCTest
-@testable import SimpleChatbot
-
-final class SimpleChatbotTests: XCTestCase {
-
- override func setUpWithError() throws {
- // Put setup code here. This method is called before the invocation of each test method in the class.
- }
-
- override func tearDownWithError() throws {
- // Put teardown code here. This method is called after the invocation of each test method in the class.
- }
-
- func testExample() throws {
- // This is an example of a functional test case.
- // Use XCTAssert and related functions to verify your tests produce the correct results.
- // Any test you write for XCTest can be annotated as throws and async.
- // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
- // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
- }
-
- func testPerformanceExample() throws {
- // This is an example of a performance test case.
- self.measure {
- // Put the code you want to measure the time of here.
- }
- }
-
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotUITests/SimpleChatbotUITests.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotUITests/SimpleChatbotUITests.swift
deleted file mode 100644
index 3a4d61916..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotUITests/SimpleChatbotUITests.swift
+++ /dev/null
@@ -1,34 +0,0 @@
-import XCTest
-
-final class SimpleChatbotUITests: XCTestCase {
-
- override func setUpWithError() throws {
- // Put setup code here. This method is called before the invocation of each test method in the class.
-
- // In UI tests it is usually best to stop immediately when a failure occurs.
- continueAfterFailure = false
-
- // In UI tests itโs important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
- }
-
- override func tearDownWithError() throws {
- // Put teardown code here. This method is called after the invocation of each test method in the class.
- }
-
- func testExample() throws {
- // UI tests must launch the application that they test.
- let app = XCUIApplication()
- app.launch()
-
- // Use XCTAssert and related functions to verify your tests produce the correct results.
- }
-
- func testLaunchPerformance() throws {
- if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
- // This measures how long it takes to launch your application.
- measure(metrics: [XCTApplicationLaunchMetric()]) {
- XCUIApplication().launch()
- }
- }
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotUITests/SimpleChatbotUITestsLaunchTests.swift b/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotUITests/SimpleChatbotUITestsLaunchTests.swift
deleted file mode 100644
index 87d03195d..000000000
--- a/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbotUITests/SimpleChatbotUITestsLaunchTests.swift
+++ /dev/null
@@ -1,25 +0,0 @@
-import XCTest
-
-final class SimpleChatbotUITestsLaunchTests: XCTestCase {
-
- override class var runsForEachTargetApplicationUIConfiguration: Bool {
- true
- }
-
- override func setUpWithError() throws {
- continueAfterFailure = false
- }
-
- func testLaunch() throws {
- let app = XCUIApplication()
- app.launch()
-
- // Insert steps here to perform after app launch but before taking a screenshot,
- // such as logging into a test account or navigating somewhere in the app
-
- let attachment = XCTAttachment(screenshot: app.screenshot())
- attachment.name = "Launch Screen"
- attachment.lifetime = .keepAlways
- add(attachment)
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/.gitignore b/examples/p2p-webrtc/video-transform/client/typescript/.gitignore
deleted file mode 100644
index a547bf36d..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/README.md b/examples/p2p-webrtc/video-transform/client/typescript/README.md
deleted file mode 100644
index 3c7043edc..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# JavaScript Implementation
-
-Basic implementation using the [Pipecat JavaScript SDK](https://docs.pipecat.ai/client/js/introduction).
-
-## Setup
-
-1. Run the bot server. See the [server README](../../README).
-
-2. Navigate to the `client/typescript` directory:
-
-```bash
-cd client/typescript
-```
-
-3. Install dependencies:
-
-```bash
-npm install
-```
-
-4. Run the client app:
-
-```
-npm run dev
-```
-
-5. Visit http://localhost:5173 in your browser.
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/index.html b/examples/p2p-webrtc/video-transform/client/typescript/index.html
deleted file mode 100644
index 95f8f59de..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/index.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
- WebRTC demo
-
-
-
-
-
-
-
- Audio
-
- Default device
-
-
- Default codecs
- Opus
- PCMU
- PCMA
-
-
-
- Video
-
- Default device
-
-
- Default codecs
- VP8
- H264
-
-
-
-
-
-
-
- Status: Disconnected
-
-
- Connect
- Disconnect
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/package-lock.json b/examples/p2p-webrtc/video-transform/client/typescript/package-lock.json
deleted file mode 100644
index 0eb82dac3..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/package-lock.json
+++ /dev/null
@@ -1,1564 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/small-webrtc-transport": "^1.0.0"
- },
- "devDependencies": {
- "@types/node": "^22.13.1",
- "@vitejs/plugin-react-swc": "^3.7.2",
- "typescript": "^5.7.3",
- "vite": "^6.3.5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.77.0.tgz",
- "integrity": "sha512-icNXKieKAkRR/C5dcPjrCkL1jQGFp5C5WtLHy5uHAdTztm+mo9wlPJuehbWaGOM3TV24mgWHZ/+8jOys1G0I4w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
- "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
- "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
- "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
- "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
- "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
- "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
- "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
- "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
- "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
- "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
- "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
- "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
- "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
- "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
- "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
- "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
- "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
- "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
- "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
- "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
- "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
- "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
- "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
- "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/small-webrtc-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/small-webrtc-transport/-/small-webrtc-transport-1.0.0.tgz",
- "integrity": "sha512-JRXepnMN9w0thxjrpdzvoR6pn8MoC+J8lywnMHzAOifGGhlrA6ZSgMQtoRjiXs7PdjDFOkAT4mAdJrte0dC00A==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.77.0",
- "dequal": "^2.0.3"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.11",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.11.tgz",
- "integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz",
- "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz",
- "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz",
- "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz",
- "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz",
- "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz",
- "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz",
- "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz",
- "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz",
- "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz",
- "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz",
- "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz",
- "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz",
- "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz",
- "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz",
- "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
- "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz",
- "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz",
- "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz",
- "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz",
- "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@swc/core": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.9.tgz",
- "integrity": "sha512-O+LfT2JlVMsIMWG9x+rdxg8GzpzeGtCZQfXV7cKc1PjIKUkLFf1QJ7okuseA4f/9vncu37dQ2ZcRrPKy0Ndd5g==",
- "dev": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.23"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.12.9",
- "@swc/core-darwin-x64": "1.12.9",
- "@swc/core-linux-arm-gnueabihf": "1.12.9",
- "@swc/core-linux-arm64-gnu": "1.12.9",
- "@swc/core-linux-arm64-musl": "1.12.9",
- "@swc/core-linux-x64-gnu": "1.12.9",
- "@swc/core-linux-x64-musl": "1.12.9",
- "@swc/core-win32-arm64-msvc": "1.12.9",
- "@swc/core-win32-ia32-msvc": "1.12.9",
- "@swc/core-win32-x64-msvc": "1.12.9"
- },
- "peerDependencies": {
- "@swc/helpers": ">=0.5.17"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.9.tgz",
- "integrity": "sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.9.tgz",
- "integrity": "sha512-hv2kls7Ilkm2EpeJz+I9MCil7pGS3z55ZAgZfxklEuYsxpICycxeH+RNRv4EraggN44ms+FWCjtZFu0LGg2V3g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.9.tgz",
- "integrity": "sha512-od9tDPiG+wMU9wKtd6y3nYJdNqgDOyLdgRRcrj1/hrbHoUPOM8wZQZdwQYGarw63iLXGgsw7t5HAF9Yc51ilFA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.9.tgz",
- "integrity": "sha512-6qx1ka9LHcLzxIgn2Mros+CZLkHK2TawlXzi/h7DJeNnzi8F1Hw0Yzjp8WimxNCg6s2n+o3jnmin1oXB7gg8rw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.9.tgz",
- "integrity": "sha512-yghFZWKPVVGbUdqiD7ft23G0JX6YFGDJPz9YbLLAwGuKZ9th3/jlWoQDAw1Naci31LQhVC+oIji6ozihSuwB2A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.9.tgz",
- "integrity": "sha512-SFUxyhWLZRNL8QmgGNqdi2Q43PNyFVkRZ2zIif30SOGFSxnxcf2JNeSeBgKIGVgaLSuk6xFVVCtJ3KIeaStgRg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.9.tgz",
- "integrity": "sha512-9FB0wM+6idCGTI20YsBNBg9xSWtkDBymnpaTCsZM3qDc0l4uOpJMqbfWhQvp17x7r/ulZfb2QY8RDvQmCL6AcQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.9.tgz",
- "integrity": "sha512-zHOusMVbOH9ik5RtRrMiGzLpKwxrPXgXkBm3SbUCa65HAdjV33NZ0/R9Rv1uPESALtEl2tzMYLUxYA5ECFDFhA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.9.tgz",
- "integrity": "sha512-aWZf0PqE0ot7tCuhAjRkDFf41AzzSQO0x2xRfTbnhpROp57BRJ/N5eee1VULO/UA2PIJRG7GKQky5bSGBYlFug==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.9.tgz",
- "integrity": "sha512-C25fYftXOras3P3anSUeXXIpxmEkdAcsIL9yrr0j1xepTZ/yKwpnQ6g3coj8UXdeJy4GTVlR6+Ow/QiBgZQNOg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/@swc/types": {
- "version": "0.1.23",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz",
- "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "22.16.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.0.tgz",
- "integrity": "sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@vitejs/plugin-react-swc": {
- "version": "3.10.2",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.10.2.tgz",
- "integrity": "sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rolldown/pluginutils": "1.0.0-beta.11",
- "@swc/core": "^1.11.31"
- },
- "peerDependencies": {
- "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0"
- }
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
- "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.6",
- "@esbuild/android-arm": "0.25.6",
- "@esbuild/android-arm64": "0.25.6",
- "@esbuild/android-x64": "0.25.6",
- "@esbuild/darwin-arm64": "0.25.6",
- "@esbuild/darwin-x64": "0.25.6",
- "@esbuild/freebsd-arm64": "0.25.6",
- "@esbuild/freebsd-x64": "0.25.6",
- "@esbuild/linux-arm": "0.25.6",
- "@esbuild/linux-arm64": "0.25.6",
- "@esbuild/linux-ia32": "0.25.6",
- "@esbuild/linux-loong64": "0.25.6",
- "@esbuild/linux-mips64el": "0.25.6",
- "@esbuild/linux-ppc64": "0.25.6",
- "@esbuild/linux-riscv64": "0.25.6",
- "@esbuild/linux-s390x": "0.25.6",
- "@esbuild/linux-x64": "0.25.6",
- "@esbuild/netbsd-arm64": "0.25.6",
- "@esbuild/netbsd-x64": "0.25.6",
- "@esbuild/openbsd-arm64": "0.25.6",
- "@esbuild/openbsd-x64": "0.25.6",
- "@esbuild/openharmony-arm64": "0.25.6",
- "@esbuild/sunos-x64": "0.25.6",
- "@esbuild/win32-arm64": "0.25.6",
- "@esbuild/win32-ia32": "0.25.6",
- "@esbuild/win32-x64": "0.25.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/rollup": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz",
- "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.44.2",
- "@rollup/rollup-android-arm64": "4.44.2",
- "@rollup/rollup-darwin-arm64": "4.44.2",
- "@rollup/rollup-darwin-x64": "4.44.2",
- "@rollup/rollup-freebsd-arm64": "4.44.2",
- "@rollup/rollup-freebsd-x64": "4.44.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.44.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.44.2",
- "@rollup/rollup-linux-arm64-gnu": "4.44.2",
- "@rollup/rollup-linux-arm64-musl": "4.44.2",
- "@rollup/rollup-linux-loongarch64-gnu": "4.44.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-musl": "4.44.2",
- "@rollup/rollup-linux-s390x-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-musl": "4.44.2",
- "@rollup/rollup-win32-arm64-msvc": "4.44.2",
- "@rollup/rollup-win32-ia32-msvc": "4.44.2",
- "@rollup/rollup-win32-x64-msvc": "4.44.2",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/package.json b/examples/p2p-webrtc/video-transform/client/typescript/package.json
deleted file mode 100644
index 6cf0abc68..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/package.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "node_modules/.bin/vite",
- "build": "node_modules/.bin/tsc && vite build",
- "preview": "node_modules/.bin/vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "@types/node": "^22.13.1",
- "@vitejs/plugin-react-swc": "^3.7.2",
- "typescript": "^5.7.3",
- "vite": "^6.3.5"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/small-webrtc-transport": "^1.0.0"
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/src/app.ts b/examples/p2p-webrtc/video-transform/client/typescript/src/app.ts
deleted file mode 100644
index c1a9ce35b..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/src/app.ts
+++ /dev/null
@@ -1,237 +0,0 @@
-import { SmallWebRTCTransport } from '@pipecat-ai/small-webrtc-transport';
-import {
- BotLLMTextData,
- Participant,
- PipecatClient,
- PipecatClientOptions,
- TranscriptData,
- TransportState,
-} from '@pipecat-ai/client-js';
-
-class WebRTCApp {
- private declare connectBtn: HTMLButtonElement;
- private declare disconnectBtn: HTMLButtonElement;
- private declare muteBtn: HTMLButtonElement;
-
- private declare audioInput: HTMLSelectElement;
- private declare videoInput: HTMLSelectElement;
- private declare audioCodec: HTMLSelectElement;
- private declare videoCodec: HTMLSelectElement;
-
- private declare videoElement: HTMLVideoElement;
- private declare audioElement: HTMLAudioElement;
-
- private debugLog: HTMLElement | null = null;
- private statusSpan: HTMLElement | null = null;
-
- private declare smallWebRTCTransport: SmallWebRTCTransport;
- private declare pcClient: PipecatClient;
-
- constructor() {
- this.setupDOMElements();
- this.setupDOMEventListeners();
- this.initializePipecatClient();
- void this.populateDevices();
- }
-
- private initializePipecatClient(): void {
- const opts: PipecatClientOptions = {
- transport: new SmallWebRTCTransport({ connectionUrl: '/api/offer' }),
- enableMic: true,
- enableCam: true,
- callbacks: {
- onTransportStateChanged: (state: TransportState) => {
- this.log(`Transport state: ${state}`);
- },
- onConnected: () => {
- this.onConnectedHandler();
- },
- onBotReady: () => {
- this.log('Bot is ready.');
- },
- onDisconnected: () => {
- this.onDisconnectedHandler();
- },
- onUserStartedSpeaking: () => {
- this.log('User started speaking.');
- },
- onUserStoppedSpeaking: () => {
- this.log('User stopped speaking.');
- },
- onBotStartedSpeaking: () => {
- this.log('Bot started speaking.');
- },
- onBotStoppedSpeaking: () => {
- this.log('Bot stopped speaking.');
- },
- onUserTranscript: (transcript: TranscriptData) => {
- if (transcript.final) {
- this.log(`User transcript: ${transcript.text}`);
- }
- },
- onBotTranscript: (data: BotLLMTextData) => {
- this.log(`Bot transcript: ${data.text}`);
- },
- onTrackStarted: (
- track: MediaStreamTrack,
- participant?: Participant
- ) => {
- if (participant?.local) {
- return;
- }
- this.onBotTrackStarted(track);
- },
- onServerMessage: (msg: unknown) => {
- this.log(`Server message: ${msg}`);
- },
- },
- };
- this.pcClient = new PipecatClient(opts);
- this.smallWebRTCTransport = this.pcClient.transport as SmallWebRTCTransport;
- }
-
- private setupDOMElements(): void {
- this.connectBtn = document.getElementById(
- 'connect-btn'
- ) as HTMLButtonElement;
- this.disconnectBtn = document.getElementById(
- 'disconnect-btn'
- ) as HTMLButtonElement;
- this.muteBtn = document.getElementById('mute-btn') as HTMLButtonElement;
-
- this.audioInput = document.getElementById(
- 'audio-input'
- ) as HTMLSelectElement;
- this.videoInput = document.getElementById(
- 'video-input'
- ) as HTMLSelectElement;
- this.audioCodec = document.getElementById(
- 'audio-codec'
- ) as HTMLSelectElement;
- this.videoCodec = document.getElementById(
- 'video-codec'
- ) as HTMLSelectElement;
-
- this.videoElement = document.getElementById(
- 'bot-video'
- ) as HTMLVideoElement;
- this.audioElement = document.getElementById(
- 'bot-audio'
- ) as HTMLAudioElement;
-
- this.debugLog = document.getElementById('debug-log');
- this.statusSpan = document.getElementById('connection-status');
- }
-
- private setupDOMEventListeners(): void {
- this.connectBtn.addEventListener('click', () => this.start());
- this.disconnectBtn.addEventListener('click', () => this.stop());
- this.audioInput.addEventListener('change', (e) => {
- // @ts-ignore
- let audioDevice = e.target?.value;
- this.pcClient.updateMic(audioDevice);
- });
- this.videoInput.addEventListener('change', (e) => {
- // @ts-ignore
- let videoDevice = e.target?.value;
- this.pcClient.updateCam(videoDevice);
- });
- this.muteBtn.addEventListener('click', () => {
- let isCamEnabled = this.pcClient.isCamEnabled;
- this.pcClient.enableCam(!isCamEnabled);
- this.muteBtn.textContent = isCamEnabled ? '๐ต' : '๐ท';
- });
- }
-
- private log(message: string): void {
- if (!this.debugLog) return;
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3';
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50';
- }
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- }
-
- private clearAllLogs() {
- this.debugLog!.innerText = '';
- }
-
- private updateStatus(status: string): void {
- if (this.statusSpan) {
- this.statusSpan.textContent = status;
- }
- this.log(`Status: ${status}`);
- }
-
- private onConnectedHandler() {
- this.updateStatus('Connected');
- if (this.connectBtn) this.connectBtn.disabled = true;
- if (this.disconnectBtn) this.disconnectBtn.disabled = false;
- }
-
- private onDisconnectedHandler() {
- this.updateStatus('Disconnected');
- if (this.connectBtn) this.connectBtn.disabled = false;
- if (this.disconnectBtn) this.disconnectBtn.disabled = true;
- }
-
- private onBotTrackStarted(track: MediaStreamTrack) {
- if (track.kind === 'video') {
- this.videoElement.srcObject = new MediaStream([track]);
- } else {
- this.audioElement.srcObject = new MediaStream([track]);
- }
- }
-
- private async populateDevices(): Promise {
- const populateSelect = (
- select: HTMLSelectElement,
- devices: MediaDeviceInfo[]
- ): void => {
- let counter = 1;
- devices.forEach((device) => {
- const option = document.createElement('option');
- option.value = device.deviceId;
- option.text = device.label || 'Device #' + counter;
- select.appendChild(option);
- counter += 1;
- });
- };
-
- try {
- const audioDevices = await this.pcClient.getAllMics();
- populateSelect(this.audioInput, audioDevices);
- const videoDevices = await this.pcClient.getAllCams();
- populateSelect(this.videoInput, videoDevices);
- } catch (e) {
- alert(e);
- }
- }
-
- private async start(): Promise {
- this.clearAllLogs();
-
- this.connectBtn.disabled = true;
- this.updateStatus('Connecting');
-
- this.smallWebRTCTransport.setAudioCodec(this.audioCodec.value);
- this.smallWebRTCTransport.setVideoCodec(this.videoCodec.value);
- try {
- await this.pcClient.connect();
- } catch (e) {
- console.log(`Failed to connect ${e}`);
- this.stop();
- }
- }
-
- private stop(): void {
- void this.pcClient.disconnect();
- }
-}
-
-// Create the WebRTCConnection instance
-const webRTCConnection = new WebRTCApp();
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/src/style.css b/examples/p2p-webrtc/video-transform/client/typescript/src/style.css
deleted file mode 100644
index 7397332ac..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/src/style.css
+++ /dev/null
@@ -1,144 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
- display: flex;
- flex-direction: row;
- width: 100%;
-}
-
-.container {
- margin: 0 auto;
- width: 90%;
-}
-
-.option {
- display: flex;
- flex-direction: row;
- align-items: center;
-}
-
-label {
- margin: 5px;
-}
-
-select {
- padding: 8px;
- margin: 10px;
- border-radius: 4px;
- border: 1px solid #ccc;
-}
-
-.status-bar {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
- display: flex;
- flex-wrap: wrap;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
- width: 50%;
-}
-
-#bot-video-container {
- width: 90%;
- aspect-ratio: 16 / 9;
- background-color: #e0e0e0;
- border-radius: 8px;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
- position: relative;
-}
-
-#bot-video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-#mute-btn {
- position: absolute;
- bottom: 10px;
- right: 10px;
- background-color: rgba(0, 0, 0, 0.6);
- color: white;
- border: none;
- border-radius: 20px;
- padding: 8px 12px;
- cursor: pointer;
- font-size: 16px;
- z-index: 1;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- width: 50%;
-}
-
-@media (max-width: 768px) {
- .bot-container {
- width: 100%;
- }
- .debug-panel {
- width: 100%;
- }
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 360px;
- overflow-y: auto;
- background-color: #f8f8f8;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/tsconfig.json b/examples/p2p-webrtc/video-transform/client/typescript/tsconfig.json
deleted file mode 100644
index c9c555d96..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/tsconfig.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "commonjs", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
- // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
- // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
- // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
- // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
- // "noUncheckedSideEffectImports": true, /* Check side effect imports. */
- // "resolveJsonModule": true, /* Enable importing .json files. */
- // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- // "outDir": "./", /* Specify an output folder for all emitted files. */
- // "removeComments": true, /* Disable emitting comments. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
- // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
- }
-}
diff --git a/examples/p2p-webrtc/video-transform/client/typescript/vite.config.js b/examples/p2p-webrtc/video-transform/client/typescript/vite.config.js
deleted file mode 100644
index bd7b7f9d0..000000000
--- a/examples/p2p-webrtc/video-transform/client/typescript/vite.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import { defineConfig } from 'vite';
-import react from '@vitejs/plugin-react-swc';
-
-export default defineConfig({
- plugins: [react()],
- server: {
- allowedHosts: true, // Allows external connections like ngrok
- proxy: {
- // Proxy /api requests to the backend server
- '/api': {
- target: 'http://0.0.0.0:7860', // Replace with your backend URL
- changeOrigin: true,
- },
- },
- },
-});
diff --git a/examples/p2p-webrtc/video-transform/server/bot.py b/examples/p2p-webrtc/video-transform/server/bot.py
deleted file mode 100644
index cd2ea2709..000000000
--- a/examples/p2p-webrtc/video-transform/server/bot.py
+++ /dev/null
@@ -1,148 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import os
-import sys
-
-import cv2
-import numpy as np
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import Frame, InputImageRawFrame, OutputImageRawFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.services.gemini_multimodal_live import GeminiMultimodalLiveLLMService
-from pipecat.transports.base_transport import TransportParams
-from pipecat.transports.network.small_webrtc import SmallWebRTCTransport
-
-load_dotenv(override=True)
-
-
-class EdgeDetectionProcessor(FrameProcessor):
- def __init__(self, video_out_width, video_out_height: int):
- super().__init__()
- self._video_out_width = video_out_width
- self._video_out_height = video_out_height
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, InputImageRawFrame):
- # Convert bytes to NumPy array
- img = np.frombuffer(frame.image, dtype=np.uint8).reshape(
- (frame.size[1], frame.size[0], 3)
- )
-
- # perform edge detection
- img = cv2.cvtColor(cv2.Canny(img, 100, 200), cv2.COLOR_GRAY2BGR)
-
- # convert the size if needed
- desired_size = (self._video_out_width, self._video_out_height)
- if frame.size != desired_size:
- resized_image = cv2.resize(img, desired_size)
- frame = OutputImageRawFrame(resized_image.tobytes(), desired_size, frame.format)
- await self.push_frame(frame)
- else:
- await self.push_frame(
- OutputImageRawFrame(image=img.tobytes(), size=frame.size, format=frame.format)
- )
- else:
- await self.push_frame(frame, direction)
-
-
-SYSTEM_INSTRUCTION = f"""
-"You are Gemini Chatbot, a friendly, helpful robot.
-
-Your goal is to demonstrate your capabilities in a succinct way.
-
-Your output will be converted to audio so don't include special characters in your answers.
-
-Respond to what the user said in a creative and helpful way. Keep your responses brief. One or two sentences at most.
-"""
-
-
-async def run_bot(webrtc_connection):
- transport_params = TransportParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- audio_out_10ms_chunks=2,
- video_in_enabled=True,
- video_out_enabled=True,
- video_out_is_live=True,
- vad_analyzer=SileroVADAnalyzer(),
- )
-
- pipecat_transport = SmallWebRTCTransport(
- webrtc_connection=webrtc_connection, params=transport_params
- )
-
- llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- voice_id="Puck", # Aoede, Charon, Fenrir, Kore, Puck
- transcribe_user_audio=True,
- system_instruction=SYSTEM_INSTRUCTION,
- )
-
- context = OpenAILLMContext(
- [
- {
- "role": "user",
- "content": "Start by greeting the user warmly and introducing yourself.",
- }
- ],
- )
- context_aggregator = llm.create_context_aggregator(context)
-
- # RTVI events for Pipecat client UI
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- pipecat_transport.input(),
- context_aggregator.user(),
- rtvi,
- llm, # LLM
- EdgeDetectionProcessor(
- transport_params.video_out_width, transport_params.video_out_height
- ), # Sending the video back to the user
- pipecat_transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- logger.info("Pipecat client ready.")
- await rtvi.set_bot_ready()
- # Kick off the conversation.
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @pipecat_transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info("Pipecat Client connected")
-
- @pipecat_transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info("Pipecat Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False)
-
- await runner.run(task)
diff --git a/examples/p2p-webrtc/video-transform/server/env.example b/examples/p2p-webrtc/video-transform/server/env.example
deleted file mode 100644
index b8d79805b..000000000
--- a/examples/p2p-webrtc/video-transform/server/env.example
+++ /dev/null
@@ -1 +0,0 @@
-GOOGLE_API_KEY=
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/server/requirements.txt b/examples/p2p-webrtc/video-transform/server/requirements.txt
deleted file mode 100644
index d5aa05ef3..000000000
--- a/examples/p2p-webrtc/video-transform/server/requirements.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-aiortc
-opencv-python
-pipecat-ai[google,silero,webrtc]
-pipecat-ai-small-webrtc-prebuilt
\ No newline at end of file
diff --git a/examples/p2p-webrtc/video-transform/server/server.py b/examples/p2p-webrtc/video-transform/server/server.py
deleted file mode 100644
index c8dae7888..000000000
--- a/examples/p2p-webrtc/video-transform/server/server.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import sys
-from contextlib import asynccontextmanager
-from typing import Dict
-
-import uvicorn
-from bot import run_bot
-from dotenv import load_dotenv
-from fastapi import BackgroundTasks, FastAPI
-from fastapi.responses import RedirectResponse
-from loguru import logger
-from pipecat_ai_small_webrtc_prebuilt.frontend import SmallWebRTCPrebuiltUI
-
-from pipecat.transports.network.webrtc_connection import IceServer, SmallWebRTCConnection
-
-# Load environment variables
-load_dotenv(override=True)
-
-app = FastAPI()
-
-# Store connections by pc_id
-pcs_map: Dict[str, SmallWebRTCConnection] = {}
-
-ice_servers = [
- IceServer(
- urls="stun:stun.l.google.com:19302",
- )
-]
-
-# Mount the frontend at /
-app.mount("/prebuilt", SmallWebRTCPrebuiltUI)
-
-
-@app.get("/", include_in_schema=False)
-async def root_redirect():
- return RedirectResponse(url="/prebuilt/")
-
-
-@app.post("/api/offer")
-async def offer(request: dict, background_tasks: BackgroundTasks):
- pc_id = request.get("pc_id")
-
- if pc_id and pc_id in pcs_map:
- pipecat_connection = pcs_map[pc_id]
- logger.info(f"Reusing existing connection for pc_id: {pc_id}")
- await pipecat_connection.renegotiate(
- sdp=request["sdp"], type=request["type"], restart_pc=request.get("restart_pc", False)
- )
- else:
- pipecat_connection = SmallWebRTCConnection(ice_servers)
- await pipecat_connection.initialize(sdp=request["sdp"], type=request["type"])
-
- @pipecat_connection.event_handler("closed")
- async def handle_disconnected(webrtc_connection: SmallWebRTCConnection):
- logger.info(f"Discarding peer connection for pc_id: {webrtc_connection.pc_id}")
- pcs_map.pop(webrtc_connection.pc_id, None)
-
- background_tasks.add_task(run_bot, pipecat_connection)
-
- answer = pipecat_connection.get_answer()
- # Updating the peer connection inside the map
- pcs_map[answer["pc_id"]] = pipecat_connection
-
- return answer
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- yield # Run app
- coros = [pc.disconnect() for pc in pcs_map.values()]
- await asyncio.gather(*coros)
- pcs_map.clear()
-
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="WebRTC demo")
- parser.add_argument(
- "--host", default="localhost", help="Host for HTTP server (default: localhost)"
- )
- parser.add_argument(
- "--port", type=int, default=7860, help="Port for HTTP server (default: 7860)"
- )
- parser.add_argument("--verbose", "-v", action="count")
- args = parser.parse_args()
-
- logger.remove(0)
- if args.verbose:
- logger.add(sys.stderr, level="TRACE")
- else:
- logger.add(sys.stderr, level="DEBUG")
-
- uvicorn.run(app, host=args.host, port=args.port)
diff --git a/examples/p2p-webrtc/voice-agent/README.md b/examples/p2p-webrtc/voice-agent/README.md
deleted file mode 100644
index a4f6f0b2a..000000000
--- a/examples/p2p-webrtc/voice-agent/README.md
+++ /dev/null
@@ -1,94 +0,0 @@
-# Voice Agent
-
-A Pipecat example demonstrating the simplest way to create a voice agent using `SmallWebRTCTransport`.
-
-## ๐ Quick Start
-
-### 1๏ธโฃ Start the Bot Server
-
-#### ๐ง Set Up the Environment
-1. Create and activate a virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
-2. Install dependencies:
- ```bash
- pip install -r requirements.txt
- ```
-
-3. Configure environment variables:
- - Copy `env.example` to `.env`
- ```bash
- cp env.example .env
- ```
- - Add your API keys
-
-#### โถ๏ธ Run the Server
-```bash
-python server.py
-```
-
-### 2๏ธโฃ Connect Using the Client App
-
-Open your browser and visit:
-```
-http://localhost:7860
-```
-
-## ๐ Requirements
-
-- Python **3.10+**
-- Node.js **16+** (for JavaScript components)
-- Google API Key
-- Modern web browser with WebRTC support
-
----
-
-## WebRTC ICE Servers Configuration
-
-When implementing WebRTC in your project, **STUN** (Session Traversal Utilities for NAT) and **TURN** (Traversal Using Relays around NAT)
-servers are usually needed in cases where users are behind routers or firewalls.
-
-In local networks (e.g., testing within the same home or office network), you usually donโt need to configure STUN or TURN servers.
-In such cases, WebRTC can often directly establish peer-to-peer connections without needing to traverse NAT or firewalls.
-
-### What are STUN and TURN Servers?
-
-- **STUN Server**: Helps clients discover their public IP address and port when they're behind a NAT (Network Address Translation) device (like a router).
-This allows WebRTC to attempt direct peer-to-peer communication by providing the public-facing IP and port.
-
-- **TURN Server**: Used as a fallback when direct peer-to-peer communication isn't possible due to strict NATs or firewalls blocking connections.
-The TURN server relays media traffic between peers.
-
-### Why are ICE Servers Important?
-
-**ICE (Interactive Connectivity Establishment)** is a framework used by WebRTC to handle network traversal and NAT issues.
-The `iceServers` configuration provides a list of **STUN** and **TURN** servers that WebRTC uses to find the best way to connect two peers.
-
-### Example Configuration for ICE Servers
-
-Hereโs how you can configure a basic `iceServers` object in WebRTC for testing purposes, using Google's public STUN server:
-
-```javascript
-const config = {
- iceServers: [
- {
- urls: ["stun:stun.l.google.com:19302"], // Google's public STUN server
- }
- ],
-};
-```
-
-> For testing purposes, you can either use public **STUN** servers (like Google's) or set up your own **TURN** server.
-If you're running your own TURN server, make sure to include your server URL, username, and credential in the configuration.
-
----
-
-### ๐ก Notes
-- Ensure all dependencies are installed before running the server.
-- Check the `.env` file for missing configurations.
-- WebRTC requires a secure environment (HTTPS) for full functionality in production.
-
-Happy coding! ๐
\ No newline at end of file
diff --git a/examples/p2p-webrtc/voice-agent/bot.py b/examples/p2p-webrtc/voice-agent/bot.py
deleted file mode 100644
index 42dd712b4..000000000
--- a/examples/p2p-webrtc/voice-agent/bot.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.gemini_multimodal_live import GeminiMultimodalLiveLLMService
-from pipecat.transports.base_transport import TransportParams
-from pipecat.transports.network.small_webrtc import SmallWebRTCTransport
-
-load_dotenv(override=True)
-
-SYSTEM_INSTRUCTION = f"""
-"You are Gemini Chatbot, a friendly, helpful robot.
-
-Your goal is to demonstrate your capabilities in a succinct way.
-
-Your output will be converted to audio so don't include special characters in your answers.
-
-Respond to what the user said in a creative and helpful way. Keep your responses brief. One or two sentences at most.
-"""
-
-
-async def run_bot(webrtc_connection):
- pipecat_transport = SmallWebRTCTransport(
- webrtc_connection=webrtc_connection,
- params=TransportParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- audio_out_10ms_chunks=2,
- ),
- )
-
- llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- voice_id="Puck", # Aoede, Charon, Fenrir, Kore, Puck
- transcribe_user_audio=True,
- transcribe_model_audio=True,
- system_instruction=SYSTEM_INSTRUCTION,
- )
-
- context = OpenAILLMContext(
- [
- {
- "role": "user",
- "content": "Start by greeting the user warmly and introducing yourself.",
- }
- ],
- )
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- pipecat_transport.input(),
- context_aggregator.user(),
- llm, # LLM
- pipecat_transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @pipecat_transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info("Pipecat Client connected")
- # Kick off the conversation.
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @pipecat_transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info("Pipecat Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False)
-
- await runner.run(task)
diff --git a/examples/p2p-webrtc/voice-agent/env.example b/examples/p2p-webrtc/voice-agent/env.example
deleted file mode 100644
index b8d79805b..000000000
--- a/examples/p2p-webrtc/voice-agent/env.example
+++ /dev/null
@@ -1 +0,0 @@
-GOOGLE_API_KEY=
\ No newline at end of file
diff --git a/examples/p2p-webrtc/voice-agent/index.html b/examples/p2p-webrtc/voice-agent/index.html
deleted file mode 100644
index f39be3c28..000000000
--- a/examples/p2p-webrtc/voice-agent/index.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-
- WebRTC Voice Agent
-
-
-
- WebRTC Voice Agent
- Disconnected
- Connect
-
-
-
-
-
diff --git a/examples/p2p-webrtc/voice-agent/requirements.txt b/examples/p2p-webrtc/voice-agent/requirements.txt
deleted file mode 100644
index b16fb9ddc..000000000
--- a/examples/p2p-webrtc/voice-agent/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[google,silero, webrtc]
\ No newline at end of file
diff --git a/examples/p2p-webrtc/voice-agent/server.py b/examples/p2p-webrtc/voice-agent/server.py
deleted file mode 100644
index f442333bf..000000000
--- a/examples/p2p-webrtc/voice-agent/server.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import sys
-from contextlib import asynccontextmanager
-from typing import Dict
-
-import uvicorn
-from bot import run_bot
-from dotenv import load_dotenv
-from fastapi import BackgroundTasks, FastAPI
-from fastapi.responses import FileResponse
-from loguru import logger
-
-from pipecat.transports.network.webrtc_connection import IceServer, SmallWebRTCConnection
-
-# Load environment variables
-load_dotenv(override=True)
-
-app = FastAPI()
-
-# Store connections by pc_id
-pcs_map: Dict[str, SmallWebRTCConnection] = {}
-
-
-ice_servers = [
- IceServer(
- urls="stun:stun.l.google.com:19302",
- )
-]
-
-
-@app.post("/api/offer")
-async def offer(request: dict, background_tasks: BackgroundTasks):
- pc_id = request.get("pc_id")
-
- if pc_id and pc_id in pcs_map:
- pipecat_connection = pcs_map[pc_id]
- logger.info(f"Reusing existing connection for pc_id: {pc_id}")
- await pipecat_connection.renegotiate(sdp=request["sdp"], type=request["type"])
- else:
- pipecat_connection = SmallWebRTCConnection(ice_servers)
- await pipecat_connection.initialize(sdp=request["sdp"], type=request["type"])
-
- @pipecat_connection.event_handler("closed")
- async def handle_disconnected(webrtc_connection: SmallWebRTCConnection):
- logger.info(f"Discarding peer connection for pc_id: {webrtc_connection.pc_id}")
- pcs_map.pop(webrtc_connection.pc_id, None)
-
- background_tasks.add_task(run_bot, pipecat_connection)
-
- answer = pipecat_connection.get_answer()
- # Updating the peer connection inside the map
- pcs_map[answer["pc_id"]] = pipecat_connection
-
- return answer
-
-
-@app.get("/")
-async def serve_index():
- return FileResponse("index.html")
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- yield # Run app
- coros = [pc.disconnect() for pc in pcs_map.values()]
- await asyncio.gather(*coros)
- pcs_map.clear()
-
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="WebRTC demo")
- parser.add_argument(
- "--host", default="localhost", help="Host for HTTP server (default: localhost)"
- )
- parser.add_argument(
- "--port", type=int, default=7860, help="Port for HTTP server (default: 7860)"
- )
- parser.add_argument("--verbose", "-v", action="count")
- args = parser.parse_args()
-
- logger.remove(0)
- if args.verbose:
- logger.add(sys.stderr, level="TRACE")
- else:
- logger.add(sys.stderr, level="DEBUG")
-
- uvicorn.run(app, host=args.host, port=args.port)
diff --git a/examples/patient-intake/Dockerfile b/examples/patient-intake/Dockerfile
deleted file mode 100644
index 704080eec..000000000
--- a/examples/patient-intake/Dockerfile
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM python:3.10-bullseye
-
-RUN mkdir /app
-RUN mkdir /app/assets
-RUN mkdir /app/utils
-COPY *.py /app/
-COPY requirements.txt /app/
-copy assets/* /app/assets/
-copy utils/* /app/utils/
-
-WORKDIR /app
-RUN pip3 install -r requirements.txt
-
-EXPOSE 7860
-
-CMD ["python3", "server.py"]
\ No newline at end of file
diff --git a/examples/patient-intake/README.md b/examples/patient-intake/README.md
deleted file mode 100644
index ffc84bdfe..000000000
--- a/examples/patient-intake/README.md
+++ /dev/null
@@ -1,95 +0,0 @@
-# Patient-intake chatbot
-
-
-
-This project implements an AI-powered chatbot designed to streamline the medical intake process for Tri-County Health Services. The chatbot, named Jessica, interacts with patients to collect essential information before their doctor's visit, enhancing efficiency and improving the patient experience.
-
-๐ก Looking to build structured conversations? Check out [Pipecat Flows](https://github.com/pipecat-ai/pipecat-flows) for managing complex conversational states and transitions.
-
-## Features
-
-Identity Verification: Confirms patient identity by verifying their date of birth.
-Prescription Information: Collects details about current medications and dosages.
-Allergy Documentation: Records patient allergies.
-Medical Conditions: Gathers information about existing medical conditions.
-Reason for Visit: Asks patients about the purpose of their current doctor's visit.
-
-## Technical Stack
-
-Language: Python
-AI Model: OpenAI's GPT-4
-Text-to-Speech: Cartesia TTS Service
-Audio Processing: Silero VAD (Voice Activity Detection)
-Real-time Communication: Daily.co API
-
-## Key Components
-
-IntakeProcessor: Manages the conversation flow and information gathering process.
-DailyTransport: Handles real-time audio communication.
-CartesiaTTSService: Converts text responses to speech.
-OpenAILLMService: Processes natural language and generates appropriate responses.
-Pipeline: Orchestrates the flow of information between different components.
-
-How It Works
-
-The chatbot introduces itself and verifies the patient's identity.
-It systematically collects information about prescriptions, allergies, medical conditions, and the reason for the visit.
-The conversation is guided by a series of function calls that transition between different stages of the intake process.
-All collected information is logged for later use by medical professionals.
-
-โน๏ธ The first time, things might take extra time to get started since VAD (Voice Activity Detection) model needs to be downloaded.
-
-## Get started
-
-```python
-python3 -m venv venv
-source venv/bin/activate
-pip install -r requirements.txt
-
-cp env.example .env # and add your credentials
-
-```
-
-## Run the server
-
-```bash
-python server.py
-```
-
-Then, visit `http://localhost:7860/` in your browser to start a chatbot session.
-
-## Build and test the Docker image
-
-```
-docker build -t chatbot .
-docker run --env-file .env -p 7860:7860 chatbot
-```
-## Cartesia best practices
-
-Since this example is using Cartesia, checkout the best practices given in Cartesia's docs. LLM prompts should be modified accordingly.
-
-
-
-
-
-### Example
-```python
-messages = [
- {
- "role": "system",
- "content": '''You are a helpful AI assistant. Format all responses following these guidelines:
-
-1. Use proper punctuation and end each response with appropriate punctuation
-2. Format dates as MM/DD/YYYY
-3. Insert pauses using - or for longer pauses
-4. Use ?? for emphasized questions
-5. Avoid quotation marks unless citing
-6. Add spaces between URLs/emails and punctuation marks
-7. For domain-specific terms or proper nouns, provide pronunciation guidance in [brackets]
-8. Keep responses clear and concise
-9. Use appropriate voice/language pairs for multilingual content
-
-Your goal is to demonstrate these capabilities in a succinct way. Your output will be converted to audio, so maintain natural communication flow. Respond creatively and helpfully, but keep responses brief. Start by introducing yourself.'''
- }
-]
-```
diff --git a/examples/patient-intake/assets/clack-short-quiet.wav b/examples/patient-intake/assets/clack-short-quiet.wav
deleted file mode 100644
index f0580d11e..000000000
Binary files a/examples/patient-intake/assets/clack-short-quiet.wav and /dev/null differ
diff --git a/examples/patient-intake/assets/clack-short.wav b/examples/patient-intake/assets/clack-short.wav
deleted file mode 100644
index 864994b28..000000000
Binary files a/examples/patient-intake/assets/clack-short.wav and /dev/null differ
diff --git a/examples/patient-intake/assets/clack.wav b/examples/patient-intake/assets/clack.wav
deleted file mode 100644
index 2f36164b3..000000000
Binary files a/examples/patient-intake/assets/clack.wav and /dev/null differ
diff --git a/examples/patient-intake/assets/ding.wav b/examples/patient-intake/assets/ding.wav
deleted file mode 100644
index b63aa3ada..000000000
Binary files a/examples/patient-intake/assets/ding.wav and /dev/null differ
diff --git a/examples/patient-intake/assets/ding2.wav b/examples/patient-intake/assets/ding2.wav
deleted file mode 100644
index 3b8ab20d5..000000000
Binary files a/examples/patient-intake/assets/ding2.wav and /dev/null differ
diff --git a/examples/patient-intake/assets/ding3.wav b/examples/patient-intake/assets/ding3.wav
deleted file mode 100644
index 37ae67df2..000000000
Binary files a/examples/patient-intake/assets/ding3.wav and /dev/null differ
diff --git a/examples/patient-intake/bot.py b/examples/patient-intake/bot.py
deleted file mode 100644
index a51456246..000000000
--- a/examples/patient-intake/bot.py
+++ /dev/null
@@ -1,373 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-import wave
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from runner import configure
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import OutputAudioRawFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContextFrame
-from pipecat.processors.frame_processor import FrameDirection
-from pipecat.processors.logger import FrameLogger
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.services.openai.llm import OpenAILLMContext, OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-sounds = {}
-sound_files = [
- "clack-short.wav",
- "clack.wav",
- "clack-short-quiet.wav",
- "ding.wav",
- "ding2.wav",
-]
-
-script_dir = os.path.dirname(__file__)
-
-for file in sound_files:
- # Build the full path to the sound file
- full_path = os.path.join(script_dir, "assets", file)
- # Get the filename without the extension to use as the dictionary key
- filename = os.path.splitext(os.path.basename(full_path))[0]
- # Open the sound and convert it to bytes
- with wave.open(full_path) as audio_file:
- sounds[file] = OutputAudioRawFrame(
- audio_file.readframes(-1), audio_file.getframerate(), audio_file.getnchannels()
- )
-
-
-class IntakeProcessor:
- def __init__(self, context: OpenAILLMContext):
- print(f"Initializing context from IntakeProcessor")
- context.add_message(
- {
- "role": "system",
- "content": "You are Jessica, an agent for a company called Tri-County Health Services. Your job is to collect important information from the user before their doctor visit. You're talking to Chad Bailey. You should address the user by their first name and be polite and professional. You're not a medical professional, so you shouldn't provide any advice. Keep your responses short. Your job is to collect information to give to a doctor. Don't make assumptions about what values to plug into functions. Ask for clarification if a user response is ambiguous. Start by introducing yourself. Then, ask the user to confirm their identity by telling you their birthday, including the year. When they answer with their birthday, call the verify_birthday function.",
- }
- )
- context.set_tools(
- [
- {
- "type": "function",
- "function": {
- "name": "verify_birthday",
- "description": "Use this function to verify the user has provided their correct birthday.",
- "parameters": {
- "type": "object",
- "properties": {
- "birthday": {
- "type": "string",
- "description": "The user's birthdate, including the year. The user can provide it in any format, but convert it to YYYY-MM-DD format to call this function.",
- }
- },
- },
- },
- }
- ]
- )
-
- async def verify_birthday(self, params: FunctionCallParams):
- if params.arguments["birthday"] == "1983-01-01":
- params.context.set_tools(
- [
- {
- "type": "function",
- "function": {
- "name": "list_prescriptions",
- "description": "Once the user has provided a list of their prescription medications, call this function.",
- "parameters": {
- "type": "object",
- "properties": {
- "prescriptions": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "medication": {
- "type": "string",
- "description": "The medication's name",
- },
- "dosage": {
- "type": "string",
- "description": "The prescription's dosage",
- },
- },
- },
- }
- },
- },
- },
- }
- ]
- )
- # It's a bit weird to push this to the LLM, but it gets it into the pipeline
- # await llm.push_frame(sounds["ding2.wav"], FrameDirection.DOWNSTREAM)
- # We don't need the function call in the context, so just return a new
- # system message and let the framework re-prompt
- await params.result_callback(
- [
- {
- "role": "system",
- "content": "Next, thank the user for confirming their identity, then ask the user to list their current prescriptions. Each prescription needs to have a medication name and a dosage. Do not call the list_prescriptions function with any unknown dosages.",
- }
- ]
- )
- else:
- # The user provided an incorrect birthday; ask them to try again
- await params.result_callback(
- [
- {
- "role": "system",
- "content": "The user provided an incorrect birthday. Ask them for their birthday again. When they answer, call the verify_birthday function.",
- }
- ]
- )
-
- async def list_prescriptions(self, params: FunctionCallParams):
- print(f"!!! doing start prescriptions")
- # Move on to allergies
- params.context.set_tools(
- [
- {
- "type": "function",
- "function": {
- "name": "list_allergies",
- "description": "Once the user has provided a list of their allergies, call this function.",
- "parameters": {
- "type": "object",
- "properties": {
- "allergies": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "What the user is allergic to",
- }
- },
- },
- }
- },
- },
- },
- }
- ]
- )
- params.context.add_message(
- {
- "role": "system",
- "content": "Next, ask the user if they have any allergies. Once they have listed their allergies or confirmed they don't have any, call the list_allergies function.",
- }
- )
- print(f"!!! about to await llm process frame in start prescrpitions")
- await params.llm.queue_frame(
- OpenAILLMContextFrame(params.context), FrameDirection.DOWNSTREAM
- )
- print(f"!!! past await process frame in start prescriptions")
- await self.save_data(params.arguments, params.result_callback)
-
- async def list_allergies(self, params: FunctionCallParams):
- print("!!! doing list allergies")
- # Move on to conditions
- params.context.set_tools(
- [
- {
- "type": "function",
- "function": {
- "name": "list_conditions",
- "description": "Once the user has provided a list of their medical conditions, call this function.",
- "parameters": {
- "type": "object",
- "properties": {
- "conditions": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "The user's medical condition",
- }
- },
- },
- }
- },
- },
- },
- },
- ]
- )
- params.context.add_message(
- {
- "role": "system",
- "content": "Now ask the user if they have any medical conditions the doctor should know about. Once they've answered the question, call the list_conditions function.",
- }
- )
- await params.llm.queue_frame(
- OpenAILLMContextFrame(params.context), FrameDirection.DOWNSTREAM
- )
- await self.save_data(params.arguments, params.result_callback)
-
- async def list_conditions(self, params: FunctionCallParams):
- print("!!! doing start conditions")
- # Move on to visit reasons
- params.context.set_tools(
- [
- {
- "type": "function",
- "function": {
- "name": "list_visit_reasons",
- "description": "Once the user has provided a list of the reasons they are visiting a doctor today, call this function.",
- "parameters": {
- "type": "object",
- "properties": {
- "visit_reasons": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "The user's reason for visiting the doctor",
- }
- },
- },
- }
- },
- },
- },
- }
- ]
- )
- params.context.add_message(
- {
- "role": "system",
- "content": "Finally, ask the user the reason for their doctor visit today. Once they answer, call the list_visit_reasons function.",
- }
- )
- await params.llm.queue_frame(
- OpenAILLMContextFrame(params.context), FrameDirection.DOWNSTREAM
- )
- await self.save_data(params.arguments, params.result_callback)
-
- async def list_visit_reasons(self, params: FunctionCallParams):
- print("!!! doing start visit reasons")
- # move to finish call
- params.context.set_tools([])
- params.context.add_message(
- {"role": "system", "content": "Now, thank the user and end the conversation."}
- )
- await params.llm.queue_frame(
- OpenAILLMContextFrame(params.context), FrameDirection.DOWNSTREAM
- )
- await self.save_data(params.arguments, params.result_callback)
-
- async def save_data(self, args, result_callback):
- logger.info(f"!!! Saving data: {args}")
- # Since this is supposed to be "async", returning None from the callback
- # will prevent adding anything to context or re-prompting
- await result_callback(None)
-
-
-async def main():
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- #
- # Spanish
- #
- # transcription_settings=DailyTranscriptionSettings(
- # language="es",
- # tier="nova",
- # model="2-general"
- # )
- ),
- )
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- # tts = CartesiaTTSService(
- # api_key=os.getenv("CARTESIA_API_KEY"),
- # voice_id="846d6cb0-2301-48b6-9683-48f5618ea2f6", # Spanish-speaking Lady
- # )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- messages = []
- context = OpenAILLMContext(messages=messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- intake = IntakeProcessor(context)
- llm.register_function("verify_birthday", intake.verify_birthday)
- llm.register_function("list_prescriptions", intake.list_prescriptions)
- llm.register_function("list_allergies", intake.list_allergies)
- llm.register_function("list_conditions", intake.list_conditions)
- llm.register_function("list_visit_reasons", intake.list_visit_reasons)
-
- fl = FrameLogger("LLM Output")
-
- pipeline = Pipeline(
- [
- transport.input(), # Transport input
- context_aggregator.user(), # User responses
- llm, # LLM
- fl, # Frame logger
- tts, # TTS
- transport.output(), # Transport output
- context_aggregator.assistant(), # Assistant responses
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
- print(f"Context is: {context}")
- await task.queue_frames([OpenAILLMContextFrame(context)])
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/patient-intake/env.example b/examples/patient-intake/env.example
deleted file mode 100644
index 571ebb8b4..000000000
--- a/examples/patient-intake/env.example
+++ /dev/null
@@ -1,4 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
-DAILY_API_KEY=7df...
-OPENAI_API_KEY=sk-PL...
-CARTESIA_API_KEY=your_cartesia_api_key_here
diff --git a/examples/patient-intake/image.png b/examples/patient-intake/image.png
deleted file mode 100644
index 93814fd1e..000000000
Binary files a/examples/patient-intake/image.png and /dev/null differ
diff --git a/examples/patient-intake/requirements.txt b/examples/patient-intake/requirements.txt
deleted file mode 100644
index e8bfcd8e4..000000000
--- a/examples/patient-intake/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[daily,cartesia,openai,silero]
diff --git a/examples/patient-intake/runner.py b/examples/patient-intake/runner.py
deleted file mode 100644
index ad39a3ac4..000000000
--- a/examples/patient-intake/runner.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/patient-intake/server.py b/examples/patient-intake/server.py
deleted file mode 100644
index 10ccfb3b7..000000000
--- a/examples/patient-intake/server.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-# Load environment variables from .env file
-load_dotenv(override=True)
-
-MAX_BOTS_PER_ROOM = 1
-
-# Bot sub-process dict for status reporting and concurrency control
-bot_procs = {}
-
-daily_helpers = {}
-
-
-def cleanup():
- # Clean up function, just to be extra safe
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-app = FastAPI(lifespan=lifespan)
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.get("/")
-async def start_agent(request: Request):
- print(f"!!! Creating room")
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- print(f"!!! Room URL: {room.url}")
- # Ensure the room property is present
- if not room.url:
- raise HTTPException(
- status_code=500,
- detail="Missing 'room' property in request data. Cannot start agent without a target room!",
- )
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room.url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limited reach for room: {room.url}")
-
- # Get the token for the room
- token = await daily_helpers["rest"].get_token(room.url)
-
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- # Spawn a new agent, and join the user session
- # Note: this is mostly for demonstration purposes (refer to 'deployment' in README)
- try:
- proc = subprocess.Popen(
- [f"python3 -m bot -u {room.url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room.url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room.url)
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- if proc[0].poll() is None:
- status = "running"
- else:
- status = "finished"
-
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily patient-intake FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
- print(f"to join a test room, visit http://localhost:{config.port}/")
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/phone-chatbot/.gitignore b/examples/phone-chatbot/.gitignore
deleted file mode 100644
index c8b0ff9d3..000000000
--- a/examples/phone-chatbot/.gitignore
+++ /dev/null
@@ -1,165 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-runpod.toml
-
-# custom script to recursively upgrade items in requirements.py
-upgrade_requirements.py
-.DS_Store
diff --git a/examples/phone-chatbot/README.md b/examples/phone-chatbot/README.md
deleted file mode 100644
index 3811c5bb5..000000000
--- a/examples/phone-chatbot/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
-# Pipecat Phone Chatbot
-
-This repository contains examples for building intelligent phone chatbots using AI for various use cases including:
-
-- **daily-pstn-dial-in**: Basic incoming call handling
-- **daily-pstn-dial-out**: Basic outgoing call handling
-- **daily-twilio-sip-dial-in**: Basic incoming call handling using Daily SIP + Twilio
-- **daily-twilio-sip-dial-out**: Basic outgoing call handling using Daily SIP + Twilio
-- **daily-pstn-simple-voicemail-detection**: Voicemail detection Bot. Bot calls a number, detects if it reaches voicemail or a human, and responds appropriately
-- **daily-pstn-advanced-voicemail-detection**: A more advanced example of the voicemail detection bot. Utilises multiple pipelines. The first pipeline uses a much simpler, faster and cheaper LLM to detect the voicemail machine. Then switches to a more powerful LLM if it needs to have a conversation with a user. You should use this one if you want to use different LLMs for different tasks, it also shows how to do audio input for one LLM (multimodal LLM) and then STT for the other one. Switching out methods of sending data to the LLM
-- **daily-pstn-simple-call-transfer**: Bot handles initial customer interaction and transfers to a human operator when needed
-
-## Architecture Overview
-
-These examples use the following components:
-
-- ๐ **Transport**: Daily WebRTC
-- ๐ฌ **Speech-to-Text**: Deepgram via Daily transport, or via separate Deepgram service
-- ๐ค **LLMs**: Each example uses a specific LLM (OpenAI GPT-4o or Google Gemini)
-- ๐ **SIP/PSTN**: Examples either use Daily PSTN or SIP with a SIP provider such as Twilio
-- ๐ **Text-to-Speech**: Cartesia
-
-### Phone Number Provider: Daily vs Twilio
-
-If you're starting from scratch, we recommend using Daily to provision phone numbers alongside Daily as a transport for simplicity (this provides automatic call forwarding).
-
-If you already have Twilio numbers and workflows, you can connect them to your Pipecat bots with some additional configuration (`on_dialin_ready` and using the Twilio client to trigger forwarding).
-
-The Twilio dial-out example shows you how to configure the SIP URI domain and TwiML bins.
-
-## Deployment
-
-See Pipecat Cloud deployment docs for how to deploy this example: https://docs.pipecat.daily.co/agents/deploy
-
-We also have a great, easy to use quickstart guide here: https://docs.pipecat.daily.co/quickstart
-
-## Using Different LLM Providers
-
-Each example in this repository is implemented with a specific LLM provider:
-
-- **daily-pstn-dial-in**: Uses OpenAI
-- **daily-pstn-dial-out**: Uses OpenAI
-- **daily-twilio-sip-dial-in**: Uses OpenAI
-- **daily-twilio-sip-dial-out**: Uses OpenAI
-- **daily-pstn-simple-voicemail-detection**: Uses Google Gemini Flash 2.0
-- **daily-pstn-simple-voicemail-detection**: Uses Google Gemini Flash Lite 2.0 and Flash 2.0
-- **daily-pstn-simple-call-transfer**: Uses OpenAI
-
-If you want to implement one of these examples with a different LLM provider than what's provided:
-
-- To implement **call_transfer** with **Gemini**, reference the `bot.py` file inside the voicemail detection example for how to structure LLM context, function calling, and other Gemini-specific implementations.
-- To implement **voicemail_detection** with **OpenAI**, reference the `bot.py` file inside the call_transfer example for OpenAI-specific implementation details.
-
-The key differences between implementations involve how context is managed, function calling syntax, and message formatting. Looking at both implementations side-by-side provides a good template for adapting any example to your preferred LLM provider.
-
-## Customizing Bot Prompts
-
-All examples include default prompts that work well for standard use cases.
-
-## Advanced Usage
-
-For more advanced phone integration scenarios using PSTN/SIP, please reach out on [Discord](https://discord.gg/pipecat).
diff --git a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/README.md b/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/README.md
deleted file mode 100644
index d7240512f..000000000
--- a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/README.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# Daily PSTN Advanced Voicemail Detection Bot
-
-This project demonstrates how to create a voice bot that uses Dailys PSTN capabilities to make calls to phone numbers, and if the bot hits a voicemail system, to have the bot also leave a message. In this example, we have two pipelines. The voicemail detection pipeline uses Gemini Flash Lite, a fast and cheap LLM that works well for voicemail detection. The second pipeline uses Gemini Flash, a more advanced LLM model ideal for conversations.
-
-## How it works
-
-1. The server file receives a curl request with the phone number to dial out to
-2. The server creates a Daily room with SIP capabilities
-3. The server starts the bot process with the room details
-4. When the bot has joined, it starts the dial-out process and rings the number provided in the curl request
-5. When the phone is answered, the bot detects for certain key phrases
-6. Gemini Flash Lite works best when given small, concise prompts. When a voicemail machine is detected, we switch to a new prompt focused on the message that must be left
-7. Once the bot has left the message, it then ends the call
-8. If the bot detects there's a human on the phone, the bot runs a function call and switches to the human conversation pipeline. We give the new LLM a prompt and tell the LLM to speak.
-
-## Prerequisites
-
-- A Daily account with an API key, and a phone number purchased through Daily
-- A US phone number to ring
-- dial-out must be enabled on your domain. Find out more by reading this [document and filling in the form](https://docs.daily.co/guides/products/dial-in-dial-out#main)
-- Google API key for the bot's intelligence
-- Cartesia API key for text-to-speech
-
-## Setup
-
-1. Create a virtual environment and install dependencies
-
-```bash
-python -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-pip install -r requirements.txt
-```
-
-2. Set up environment variables
-
-Copy the example file and fill in your API keys:
-
-```bash
-cp .env.example .env
-# Edit .env with your API keys
-```
-
-3. Buy a phone number
-
-Instructions on how to do that can be found at this [docs link:](https://docs.daily.co/reference/rest-api/phone-numbers/buy-phone-number)
-
-4. Request dial-out enablement
-
-For compliance reasons, to enable dial-out for your Daily account, you must request enablement via the form. You can find out more about dial-out, and the form at the [link here:](https://docs.daily.co/guides/products/dial-in-dial-out#main)
-
-## Running the Server
-
-Start the webhook server:
-
-```bash
-python server.py
-```
-
-## Testing
-
-With server.py running, send the following curl command from your terminal:
-
-```bash
-curl -X POST "http://127.0.0.1:7860/start" \
- -H "Content-Type: application/json" \
- -d '{
- "dialout_settings": {
- "phone_number": "+12345678910"
- }
- }'
-```
-
-The server should make a room. The bot will join the room and then ring the number provided. Answer the call to speak with the bot.
-
-- You can pretend to be a voicemail machine by saying something like "Please leave a message after the beep... beeeeep".
-- You should observe the bot detects the voicemail machine and leaves a message before terminating the call
-- You can also say something like "Hello?", and the bot will notice you're likely a human and begin having a conversation with you
-
-## Customizing the Bot
-
-You can customize the bot's behavior by modifying the system prompt in `bot.py`.
-
-## Multiple SIP Endpoints
-
-For PSTN calls, you only need one SIP endpoint.
-
-## Daily dial-out configuration
-
-The bot configures the Daily rooms with dial-out capabilities using these settings. Note: You also need dial-out to be enabled on the domain, as mentioned earlier on in the README.
-
-```python
-properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
-)
-```
-
-## Troubleshooting
-
-### I get an error about dial-out not being enabled
-
-- Check that your room has `enable_dialout=True` set
-- Check that your meeting token is an owner token (The bot does this for you automatically)
-- Check that you have purchased a phone number to ring from
-- Check that the phone number you are trying to ring is correct, and is a US or Canadian number.
-
-### The bot doesn't detect my voicemail
-
-- The bot should be smart enough to detect variations of certain patterns,
-- If your voicemail machine doesn't follow the example patterns, add the pattern to the LLM prompt
-
-### Call connects but no bot is heard
-
-- Ensure your Daily API key is correct and has SIP capabilities
-- Verify that the Cartesia API key and voice ID are correct
-
-### Bot starts but disconnects immediately
-
-- Check the Daily logs for any error messages
-- Ensure your server has stable internet connectivity
diff --git a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/bot.py b/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/bot.py
deleted file mode 100644
index 5ede2a59a..000000000
--- a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/bot.py
+++ /dev/null
@@ -1,544 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import json
-import os
-import sys
-from typing import Any
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- EndFrame,
- EndTaskFrame,
- InputAudioRawFrame,
- StopTaskFrame,
- TranscriptionFrame,
- UserStartedSpeakingFrame,
- UserStoppedSpeakingFrame,
-)
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.google.google import GoogleLLMContext
-from pipecat.services.google.llm import GoogleLLMService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.transports.services.daily import (
- DailyParams,
- DailyTransport,
-)
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-daily_api_key = os.getenv("DAILY_API_KEY", "")
-daily_api_url = os.getenv("DAILY_API_URL", "https://api.daily.co/v1")
-
-
-# ------------ HELPER CLASSES ------------
-
-
-class CallFlowState:
- """State for tracking call flow operations and state transitions."""
-
- def __init__(self):
- # Voicemail detection state
- self.voicemail_detected = False
- self.human_detected = False
-
- # Call termination state
- self.call_terminated = False
- self.participant_left_early = False
-
- # Voicemail detection methods
- def set_voicemail_detected(self):
- """Mark that a voicemail system has been detected."""
- self.voicemail_detected = True
- self.human_detected = False
-
- def set_human_detected(self):
- """Mark that a human has been detected (not voicemail)."""
- self.human_detected = True
- self.voicemail_detected = False
-
- # Call termination methods
- def set_call_terminated(self):
- """Mark that the call has been terminated by the bot."""
- self.call_terminated = True
-
- def set_participant_left_early(self):
- """Mark that a participant left the call early."""
- self.participant_left_early = True
-
-
-class UserAudioCollector(FrameProcessor):
- """Collects audio frames in a buffer, then adds them to the LLM context when the user stops speaking."""
-
- def __init__(self, context, user_context_aggregator):
- super().__init__()
- self._context = context
- self._user_context_aggregator = user_context_aggregator
- self._audio_frames = []
- self._start_secs = 0.2 # this should match VAD start_secs (hardcoding for now)
- self._user_speaking = False
-
- async def process_frame(self, frame, direction):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, TranscriptionFrame):
- # Skip transcription frames - we're handling audio directly
- return
- elif isinstance(frame, UserStartedSpeakingFrame):
- self._user_speaking = True
- elif isinstance(frame, UserStoppedSpeakingFrame):
- self._user_speaking = False
- self._context.add_audio_frames_message(audio_frames=self._audio_frames)
- await self._user_context_aggregator.push_frame(
- self._user_context_aggregator.get_context_frame()
- )
- elif isinstance(frame, InputAudioRawFrame):
- if self._user_speaking:
- # When speaking, collect frames
- self._audio_frames.append(frame)
- else:
- # Maintain a rolling buffer of recent audio (for start of speech)
- self._audio_frames.append(frame)
- frame_duration = len(frame.audio) / 16 * frame.num_channels / frame.sample_rate
- buffer_duration = frame_duration * len(self._audio_frames)
- while buffer_duration > self._start_secs:
- self._audio_frames.pop(0)
- buffer_duration -= frame_duration
-
- await self.push_frame(frame, direction)
-
-
-class FunctionHandlers:
- """Handlers for the voicemail detection bot functions."""
-
- def __init__(self, call_flow_state: CallFlowState):
- self.call_flow_state = call_flow_state
-
- async def voicemail_response(self, params: FunctionCallParams):
- """Function the bot can call to leave a voicemail message."""
- message = """You are Chatbot leaving a voicemail message. Say EXACTLY this message and then terminate the call:
-
- 'Hello, this is a message for Pipecat example user. This is Chatbot. Please call back on 123-456-7891. Thank you.'"""
-
- await params.result_callback(message)
-
- async def human_conversation(self, params: FunctionCallParams):
- """Function called when bot detects it's talking to a human."""
- # Update state to indicate human was detected
- self.call_flow_state.set_human_detected()
- await params.llm.push_frame(StopTaskFrame(), FrameDirection.UPSTREAM)
-
-
-# ------------ MAIN FUNCTION ------------
-
-
-async def run_bot(
- room_url: str,
- token: str,
- body: dict,
-) -> None:
- """Run the voice bot with the given parameters.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: Body passed to the bot from the webhook
-
- """
- # ------------ CONFIGURATION AND SETUP ------------
- logger.info(f"Starting bot with room: {room_url}")
- logger.info(f"Token: {token}")
- logger.info(f"Body: {body}")
- # Parse the body to get the dial-in settings
- body_data = json.loads(body)
-
- # Check if the body contains dial-in settings
- logger.debug(f"Body data: {body_data}")
-
- if not body_data.get("dialout_settings"):
- logger.error("Dial-out settings not found in the body data")
- return
-
- dialout_settings = body_data["dialout_settings"]
-
- if not dialout_settings.get("phone_number"):
- logger.error("Dial-out phone number not found in the dial-out settings")
- return
-
- # Extract dial-out phone number
- phone_number = dialout_settings["phone_number"]
- caller_id = dialout_settings.get("caller_id") # Use .get() to handle optional field
-
- if caller_id:
- logger.info(f"Dial-out caller ID specified: {caller_id}")
- else:
- logger.info("Dial-out caller ID not specified; proceeding without it")
-
- # ------------ TRANSPORT SETUP ------------
-
- transport_params = DailyParams(
- api_url=daily_api_url,
- api_key=daily_api_key,
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- )
-
- # Initialize transport with Daily
- transport = DailyTransport(
- room_url,
- token,
- "Voicemail Detection Bot",
- transport_params,
- )
-
- # Initialize TTS
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY", ""),
- voice_id="b7d50908-b17c-442d-ad8d-810c63997ed9", # Use Helpful Woman voice by default
- )
-
- # Initialize speech-to-text service (for human conversation phase)
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- # ------------ FUNCTION DEFINITIONS ------------
-
- async def terminate_call(
- params: FunctionCallParams,
- call_flow_state: CallFlowState = None,
- ):
- """Function the bot can call to terminate the call."""
- if call_flow_state:
- # Set call terminated flag in the session manager
- call_flow_state.set_call_terminated()
-
- await params.llm.queue_frame(EndTaskFrame(), FrameDirection.UPSTREAM)
-
- # ------------ VOICEMAIL DETECTION PHASE SETUP ------------
-
- # Define tools for both LLMs
- tools = [
- {
- "function_declarations": [
- {
- "name": "switch_to_voicemail_response",
- "description": "Call this function when you detect this is a voicemail system.",
- },
- {
- "name": "switch_to_human_conversation",
- "description": "Call this function when you detect this is a human.",
- },
- {
- "name": "terminate_call",
- "description": "Call this function to terminate the call.",
- },
- ]
- }
- ]
-
- system_instruction = """You are Chatbot trying to determine if this is a voicemail system or a human.
-
- If you hear any of these phrases (or very similar ones):
- - "Please leave a message after the beep"
- - "No one is available to take your call"
- - "Record your message after the tone"
- - "You have reached voicemail for..."
- - "You have reached [phone number]"
- - "[phone number] is unavailable"
- - "The person you are trying to reach..."
- - "The number you have dialed..."
- - "Your call has been forwarded to an automated voice messaging system"
-
- Then call the function switch_to_voicemail_response.
-
- If it sounds like a human (saying hello, asking questions, etc.), call the function switch_to_human_conversation.
-
- DO NOT say anything until you've determined if this is a voicemail or human.
-
- If you are asked to terminate the call, **IMMEDIATELY** call the `terminate_call` function. **FAILURE TO CALL `terminate_call` IMMEDIATELY IS A MISTAKE.**"""
-
- # Initialize voicemail detection LLM
- voicemail_detection_llm = GoogleLLMService(
- model="models/gemini-2.0-flash-lite", # Lighter model for faster detection
- api_key=os.getenv("GOOGLE_API_KEY"),
- system_instruction=system_instruction,
- tools=tools,
- )
-
- # Initialize context and context aggregator
- voicemail_detection_context = GoogleLLMContext()
- voicemail_detection_context_aggregator = voicemail_detection_llm.create_context_aggregator(
- voicemail_detection_context
- )
-
- # Set up function handlers
- call_flow_state = CallFlowState()
- handlers = FunctionHandlers(call_flow_state)
-
- # Register functions with the voicemail detection LLM
- voicemail_detection_llm.register_function(
- "switch_to_voicemail_response",
- handlers.voicemail_response,
- )
- voicemail_detection_llm.register_function(
- "switch_to_human_conversation", handlers.human_conversation
- )
- voicemail_detection_llm.register_function(
- "terminate_call", lambda params: terminate_call(params, call_flow_state)
- )
-
- # Set up audio collector for handling audio input
- voicemail_detection_audio_collector = UserAudioCollector(
- voicemail_detection_context, voicemail_detection_context_aggregator.user()
- )
-
- # Build voicemail detection pipeline
- voicemail_detection_pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- voicemail_detection_audio_collector, # Collect audio frames
- voicemail_detection_context_aggregator.user(), # User context
- voicemail_detection_llm, # LLM
- tts, # TTS
- transport.output(), # Transport bot output
- voicemail_detection_context_aggregator.assistant(), # Assistant context
- ]
- )
-
- # Create pipeline task
- voicemail_detection_pipeline_task = PipelineTask(
- voicemail_detection_pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # ------------ RETRY LOGIC VARIABLES ------------
- max_retries = 5
- retry_count = 0
- dialout_successful = False
-
- # Build dialout parameters conditionally
- dialout_params = {"phoneNumber": phone_number}
- if caller_id:
- dialout_params["callerId"] = caller_id
- logger.debug(f"Including caller ID in dialout: {caller_id}")
-
- logger.debug(f"Dialout parameters: {dialout_params}")
-
- async def attempt_dialout():
- """Attempt to start dialout with retry logic."""
- nonlocal retry_count, dialout_successful
-
- if retry_count < max_retries and not dialout_successful:
- retry_count += 1
- logger.info(
- f"Attempting dialout (attempt {retry_count}/{max_retries}) to: {phone_number}"
- )
- await transport.start_dialout(dialout_params)
- else:
- logger.error(f"Maximum retry attempts ({max_retries}) reached. Giving up on dialout.")
-
- # ------------ EVENT HANDLERS ------------
-
- @transport.event_handler("on_joined")
- async def on_joined(transport, data):
- # Start initial dialout attempt
- logger.debug(f"Dialout settings detected; starting dialout to number: {phone_number}")
- await attempt_dialout()
-
- @transport.event_handler("on_dialout_connected")
- async def on_dialout_connected(transport, data):
- logger.debug(f"Dial-out connected: {data}")
-
- @transport.event_handler("on_dialout_answered")
- async def on_dialout_answered(transport, data):
- nonlocal dialout_successful
- logger.debug(f"Dial-out answered: {data}")
- dialout_successful = True # Mark as successful to stop retries
- # Automatically start capturing transcription for the participant
- await transport.capture_participant_transcription(data["sessionId"])
- # The bot will wait to hear the user before the bot speaks
-
- @transport.event_handler("on_dialout_error")
- async def on_dialout_error(transport, data: Any):
- logger.error(f"Dial-out error (attempt {retry_count}/{max_retries}): {data}")
-
- if retry_count < max_retries:
- logger.info(f"Retrying dialout")
- await attempt_dialout()
- else:
- logger.error(f"All {max_retries} dialout attempts failed. Stopping bot.")
- await voicemail_detection_pipeline_task.queue_frame(EndFrame())
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.debug(f"First participant joined: {participant['id']}")
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- # Mark that a participant left early
- call_flow_state.set_participant_left_early()
- await voicemail_detection_pipeline_task.queue_frame(EndFrame())
-
- # ------------ RUN VOICEMAIL DETECTION PIPELINE ------------
-
- runner = PipelineRunner()
-
- print("!!! starting voicemail detection pipeline")
- try:
- await runner.run(voicemail_detection_pipeline_task)
- except Exception as e:
- logger.error(f"Error in voicemail detection pipeline: {e}")
- import traceback
-
- logger.error(traceback.format_exc())
- print("!!! Done with voicemail detection pipeline")
-
- # Check if we should exit early
- if call_flow_state.participant_left_early or call_flow_state.call_terminated:
- if call_flow_state.participant_left_early:
- print("!!! Participant left early; terminating call")
- elif call_flow_state.call_terminated:
- print("!!! Bot terminated call; not proceeding to human conversation")
- return
-
- # ------------ HUMAN CONVERSATION PHASE SETUP ------------
-
- # Get human conversation prompt
- human_conversation_system_instruction = """You are Chatbot talking to a human. Be friendly and helpful.
-
- Start with: "Hello! I'm a friendly chatbot. How can I help you today?"
-
- Keep your responses brief and to the point. Listen to what the person says.
-
- When the person indicates they're done with the conversation by saying something like:
- - "Goodbye"
- - "That's all"
- - "I'm done"
- - "Thank you, that's all I needed"
-
- THEN say: "Thank you for chatting. Goodbye!" and call the terminate_call function."""
-
- # Initialize human conversation LLM
- human_conversation_llm = GoogleLLMService(
- model="models/gemini-2.0-flash-001", # Full model for better conversation
- api_key=os.getenv("GOOGLE_API_KEY"),
- system_instruction=human_conversation_system_instruction,
- tools=tools,
- )
-
- # Initialize context and context aggregator
- human_conversation_context = GoogleLLMContext()
- human_conversation_context_aggregator = human_conversation_llm.create_context_aggregator(
- human_conversation_context
- )
-
- # Register terminate function with the human conversation LLM
- human_conversation_llm.register_function(
- "terminate_call", lambda params: terminate_call(params, call_flow_state)
- )
-
- # Build human conversation pipeline
- human_conversation_pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- stt, # Speech-to-text
- human_conversation_context_aggregator.user(), # User context
- human_conversation_llm, # LLM
- tts, # TTS
- transport.output(), # Transport bot output
- human_conversation_context_aggregator.assistant(), # Assistant context
- ]
- )
-
- # Create pipeline task
- human_conversation_pipeline_task = PipelineTask(
- human_conversation_pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # Update participant left handler for human conversation phase
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- await voicemail_detection_pipeline_task.queue_frame(EndFrame())
- await human_conversation_pipeline_task.queue_frame(EndFrame())
-
- # ------------ RUN HUMAN CONVERSATION PIPELINE ------------
-
- print("!!! starting human conversation pipeline")
-
- # Initialize the context with system message
- human_conversation_context_aggregator.user().set_messages(
- [
- {
- "role": "system",
- "content": human_conversation_system_instruction,
- }
- ]
- )
-
- # Queue the context frame to start the conversation
- await human_conversation_pipeline_task.queue_frames(
- [human_conversation_context_aggregator.user().get_context_frame()]
- )
-
- # Run the human conversation pipeline
- try:
- await runner.run(human_conversation_pipeline_task)
- except Exception as e:
- logger.error(f"Error in voicemail detection pipeline: {e}")
- import traceback
-
- logger.error(traceback.format_exc())
-
- print("!!! Done with human conversation pipeline")
-
-
-# ------------ SCRIPT ENTRY POINT ------------
-
-
-async def main():
- """Parse command line arguments and run the bot."""
- parser = argparse.ArgumentParser(description="Simple Dial-out Bot")
- parser.add_argument("-u", "--url", type=str, help="Room URL")
- parser.add_argument("-t", "--token", type=str, help="Room Token")
- parser.add_argument("-b", "--body", type=str, help="JSON configuration string")
-
- args = parser.parse_args()
-
- logger.debug(f"url: {args.url}")
- logger.debug(f"token: {args.token}")
- logger.debug(f"body: {args.body}")
- if not all([args.url, args.token, args.body]):
- logger.error("All arguments (-u, -t, -b) are required")
- parser.print_help()
- sys.exit(1)
-
- await run_bot(args.url, args.token, args.body)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/env.example b/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/env.example
deleted file mode 100644
index 78f2b2613..000000000
--- a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/env.example
+++ /dev/null
@@ -1,7 +0,0 @@
-# Daily credentials
-DAILY_API_KEY=your_daily_api_key
-DAILY_API_URL=https://api.daily.co/v1
-
-# Service keys
-GOOGLE_API_KEY=your_google_api_key
-CARTESIA_API_KEY=your_cartesia_api_key
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/requirements.txt b/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/requirements.txt
deleted file mode 100644
index 744fb4c64..000000000
--- a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-pipecat-ai[daily,cartesia,google,deepgram,silero]
-fastapi==0.115.6
-uvicorn
-python-dotenv
-python-multipart
-aiohttp
diff --git a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/server.py b/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/server.py
deleted file mode 100644
index 4aed288fc..000000000
--- a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/server.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""server.py.
-
-Webhook server to handle webhook coming from Daily, create a Daily room and start the bot.
-"""
-
-import json
-import os
-import shlex
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.responses import JSONResponse
-from utils.daily_helpers import create_daily_room
-
-load_dotenv()
-
-# ----------------- API ----------------- #
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- # Create aiohttp session to be used for Daily API calls
- app.state.session = aiohttp.ClientSession()
- yield
- # Close session when shutting down
- await app.state.session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-
-@app.post("/start")
-async def handle_incoming_daily_webhook(request: Request) -> JSONResponse:
- """Handle dial-out request."""
- print("Received webhook from Daily")
-
- # Get the dial-in properties from the request
- try:
- data = await request.json()
- if "test" in data:
- # Pass through any webhook checks
- return JSONResponse({"test": True})
-
- if not data["dialout_settings"]:
- raise HTTPException(
- status_code=400, detail="Missing 'dialout_settings' in the request body"
- )
-
- if not data["dialout_settings"].get("phone_number"):
- raise HTTPException(
- status_code=400, detail="Missing 'phone_number' in dialout_settings"
- )
-
- # Extract the phone number we want to dial out to
- caller_phone = str(data["dialout_settings"]["phone_number"])
- print(f"Processing call to {caller_phone}")
-
- # Create a Daily room with dial-in capabilities
- try:
- room_details = await create_daily_room(request.app.state.session, caller_phone)
- except Exception as e:
- print(f"Error creating Daily room: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to create Daily room: {str(e)}")
-
- room_url = room_details["room_url"]
- token = room_details["token"]
- print(f"Created Daily room: {room_url} with token: {token}")
-
- body_json = json.dumps(data)
-
- bot_cmd = f"python3 -m bot -u {room_url} -t {token} -b {shlex.quote(body_json)}"
-
- try:
- # CHANGE: Keep stdout/stderr for debugging
- # Start the bot in the background but capture output
- subprocess.Popen(
- bot_cmd,
- shell=True,
- # Don't redirect output so we can see logs
- # stdout=subprocess.DEVNULL,
- # stderr=subprocess.DEVNULL
- )
- print(f"Started bot process with command: {bot_cmd}")
- except Exception as e:
- print(f"Error starting bot: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to start bot: {str(e)}")
-
- except HTTPException:
- raise
- except Exception as e:
- print(f"Unexpected error: {str(e)}")
- raise HTTPException(status_code=500, detail=f"Server error: {str(e)}")
-
- # Grab a token for the user to join with
- return JSONResponse({"room_url": room_url, "token": token})
-
-
-@app.get("/health")
-async def health_check():
- """Simple health check endpoint."""
- return {"status": "healthy"}
-
-
-# ----------------- Main ----------------- #
-
-
-if __name__ == "__main__":
- # Run the server
- port = int(os.getenv("PORT", "7860"))
- print(f"Starting server on port {port}")
- uvicorn.run("server:app", host="0.0.0.0", port=port, reload=True)
diff --git a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/utils/daily_helpers.py b/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/utils/daily_helpers.py
deleted file mode 100644
index 6451fc4c4..000000000
--- a/examples/phone-chatbot/daily-pstn-advanced-voicemail-detection/utils/daily_helpers.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Helper functions for interacting with the Daily API."""
-
-import os
-from typing import Dict, Optional
-
-import aiohttp
-from dotenv import load_dotenv
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomParams,
- DailyRoomProperties,
- DailyRoomSipParams,
-)
-
-load_dotenv()
-
-
-# Initialize Daily API helper
-async def get_daily_helper(session: Optional[aiohttp.ClientSession] = None) -> DailyRESTHelper:
- """Get a Daily REST helper with the configured API key."""
- if session is None:
- session = aiohttp.ClientSession()
-
- return DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=session,
- )
-
-
-async def create_daily_room(
- session: Optional[aiohttp.ClientSession] = None, caller_phone: str = "unknown-caller"
-) -> Dict[str, str]:
- """Create a Daily room with SIP capabilities for phone calls.
-
- Args:
- session: Optional aiohttp session to use for API calls
- caller_phone: The phone number of the caller to use in display name
-
- Returns:
- Dictionary with room URL, token, and SIP endpoint
- """
- daily_helper = await get_daily_helper(session)
-
- # Configure SIP parameters
- sip_params = DailyRoomSipParams(
- display_name=caller_phone,
- video=False,
- sip_mode="dial-in",
- num_endpoints=1,
- )
-
- # Create room properties with SIP enabled
- properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
- )
-
- # Create room parameters
- params = DailyRoomParams(properties=properties)
-
- # Create the room
- try:
- room = await daily_helper.create_room(params=params)
- print(f"Created room: {room.url} with SIP endpoint: {room.config.sip_endpoint}")
-
- # Get token for the bot to join
- token = await daily_helper.get_token(room.url, 24 * 60 * 60) # 24 hours validity
-
- return {"room_url": room.url, "token": token, "sip_endpoint": room.config.sip_endpoint}
- except Exception as e:
- print(f"Error creating room: {e}")
- raise
diff --git a/examples/phone-chatbot/daily-pstn-call-transfer/README.md b/examples/phone-chatbot/daily-pstn-call-transfer/README.md
deleted file mode 100644
index 4d0ddd3d2..000000000
--- a/examples/phone-chatbot/daily-pstn-call-transfer/README.md
+++ /dev/null
@@ -1,124 +0,0 @@
-# Daily PSTN call transfer
-
-A basic example of how to create a bot that handles the initial customer interaction and then transfers to a human operator when needed
-
-## Architecture Overview
-
-These examples use the following components:
-
-- ๐ **Transport**: Daily WebRTC
-- ๐ฌ **Speech-to-Text**: Deepgram via Daily transport
-- ๐ค **LLMs**: Each example uses a specific LLM (OpenAI GPT-4o or Google Gemini)
-- ๐ **Text-to-Speech**: Cartesia
-
-## Prerequisites
-
-- A Daily account with an API key
-- An OpenAI API key for the bot's intelligence
-- A Cartesia API key for text-to-speech
-- One phone to dial-in from and another phone to receive calls when escalating to a manager
-
-## Setup
-
-1. Create a virtual environment and install dependencies
-
-```bash
-python -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-pip install -r requirements.txt
-```
-
-2. Set up environment variables
-
-Copy the example file and fill in your API keys:
-
-```bash
-cp .env.example .env
-# Edit .env with your API keys
-```
-
-- Note, please specify an OPERATOR_NUMBER so that the bot can ring a number when escalating to a manager
-
-3. Buy a phone number
-
-Instructions on how to do that can be found at this [docs link:](https://docs.daily.co/reference/rest-api/phone-numbers/buy-phone-number).
-
-4. Set up the dial-in config
-
-Instructions on how to do that can be found at this [docs link:](https://docs.daily.co/reference/rest-api/domainDialinConfig)
-
-5. For local testing, use ngrok to expose your local server
-
-```bash
-ngrok http 7860
-# Then use the provided URL (e.g., https://abc123.ngrok.io/start) in Twilio
-```
-
-## Running the Server
-
-Start the webhook server:
-
-```bash
-python server.py
-```
-
-## Testing
-
-Call the purchased phone number. The system should answer the call, put you on hold briefly, then connect you with the bot.
-Have a short conversation with the bot, and then request to speak with a manager. The bot should then ring the manager. On your second phone, answer the call.
-
-The bot will then summarise the conversation so far, and then silently listen to the conversation. You can now speak with the manager on the other phone.
-
-When the manager hangs up the call, the bot will start speaking again. You can then ask the bot about the conversation with the manager, and it will have the context of the conversation.
-
-## Customizing the Bot
-
-You can customize the bot's behavior by modifying the system prompt in `bot.py`.
-
-## Multiple SIP Endpoints
-
-For PSTN calls, you only need one SIP endpoint.
-
-## Daily SIP Configuration
-
-The bot configures Daily rooms with SIP capabilities using these settings:
-
-```python
-sip_params = DailyRoomSipParams(
- display_name="phone-user", # This will show up in the Daily UI; optional display the dialer's number
- video=False, # Audio-only call
- sip_mode="dial-in", # For receiving calls (vs. dial-out)
- num_endpoints=1, # Number of SIP endpoints to create
-)
-
-properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
-)
-```
-
-## Troubleshooting
-
-### Call is not being answered
-
-- Check that your dial-in config is correctly configured to point towards your ngrok server and correct endpoint
-- Make sure the server.py file is running
-- Make sure ngrok is correctly setup and pointing to the correct port
-
-### The bot does not escalate to the manager
-
-- Check that your room has `enable_dialout=True` set
-- Check that your meeting token is an owner token (The bot does this for you automatically)
-- Check that the phone number you are trying to ring is correct, and is a US or Canadian number.
-
-### Call connects but no bot is heard
-
-- Ensure your Daily API key is correct and has SIP capabilities
-- Verify that the Cartesia API key and voice ID are correct
-
-### Bot starts but disconnects immediately
-
-- Check the Daily logs for any error messages
-- Ensure your server has stable internet connectivity
diff --git a/examples/phone-chatbot/daily-pstn-call-transfer/bot.py b/examples/phone-chatbot/daily-pstn-call-transfer/bot.py
deleted file mode 100644
index cd4e3a70a..000000000
--- a/examples/phone-chatbot/daily-pstn-call-transfer/bot.py
+++ /dev/null
@@ -1,579 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import argparse
-import asyncio
-import json
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.adapters.schemas.function_schema import FunctionSchema
-from pipecat.adapters.schemas.tools_schema import ToolsSchema
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- BotStoppedSpeakingFrame,
- EndTaskFrame,
- Frame,
- LLMMessagesFrame,
- TranscriptionFrame,
-)
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.filters.function_filter import FunctionFilter
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyDialinSettings, DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-daily_api_key = os.getenv("DAILY_API_KEY", "")
-daily_api_url = os.getenv("DAILY_API_URL", "https://api.daily.co/v1")
-
-
-class SessionManager:
- """Centralized management of session IDs and state for all call participants."""
-
- def __init__(self, call_flow_state=None):
- # Track session IDs of different participant types
- self.session_ids = {
- "operator": None,
- "customer": None,
- "bot": None,
- # Add other participant types as needed
- }
-
- # References for easy access in processors that need mutable containers
- self.session_id_refs = {
- "operator": [None],
- "customer": [None],
- "bot": [None],
- # Add other participant types as needed
- }
-
- # Use the provided call_flow_state or create a new one
- self.call_flow_state = call_flow_state if call_flow_state is not None else CallFlowState()
-
- def set_session_id(self, participant_type, session_id):
- """Set the session ID for a specific participant type.
-
- Args:
- participant_type: Type of participant (e.g., "operator", "customer", "bot")
- session_id: The session ID to set
- """
- if participant_type in self.session_ids:
- self.session_ids[participant_type] = session_id
-
- # Also update the corresponding reference if it exists
- if participant_type in self.session_id_refs:
- self.session_id_refs[participant_type][0] = session_id
-
- def get_session_id(self, participant_type):
- """Get the session ID for a specific participant type.
-
- Args:
- participant_type: Type of participant (e.g., "operator", "customer", "bot")
-
- Returns:
- The session ID or None if not set
- """
- return self.session_ids.get(participant_type)
-
- def get_session_id_ref(self, participant_type):
- """Get the mutable reference for a specific participant type.
-
- Args:
- participant_type: Type of participant (e.g., "operator", "customer", "bot")
-
- Returns:
- A mutable list container holding the session ID or None if not available
- """
- return self.session_id_refs.get(participant_type)
-
- def is_participant_type(self, session_id, participant_type):
- """Check if a session ID belongs to a specific participant type.
-
- Args:
- session_id: The session ID to check
- participant_type: Type of participant (e.g., "operator", "customer", "bot")
-
- Returns:
- True if the session ID matches the participant type, False otherwise
- """
- return self.session_ids.get(participant_type) == session_id
-
- def reset_participant(self, participant_type):
- """Reset the state for a specific participant type.
-
- Args:
- participant_type: Type of participant (e.g., "operator", "customer", "bot")
- """
- if participant_type in self.session_ids:
- self.session_ids[participant_type] = None
-
- if participant_type in self.session_id_refs:
- self.session_id_refs[participant_type][0] = None
-
- # Additional reset actions for specific participant types
- if participant_type == "operator":
- self.call_flow_state.set_operator_disconnected()
-
-
-class CallFlowState:
- """State for tracking call flow operations and state transitions."""
-
- def __init__(self):
- # Operator-related state
- self.dialed_operator = False
- self.operator_connected = False
- self.summary_finished = False
-
- # Operator-related methods
- def set_operator_dialed(self):
- """Mark that an operator has been dialed."""
- self.dialed_operator = True
-
- def set_operator_connected(self):
- """Mark that an operator has connected to the call."""
- self.operator_connected = True
- # Summary is not finished when operator first connects
- self.summary_finished = False
-
- def set_operator_disconnected(self):
- """Handle operator disconnection."""
- self.operator_connected = False
- self.summary_finished = False
-
- def set_summary_finished(self):
- """Mark the summary as finished."""
- self.summary_finished = True
-
-
-class TranscriptionModifierProcessor(FrameProcessor):
- """Processor that modifies transcription frames before they reach the context aggregator."""
-
- def __init__(self, operator_session_id_ref):
- """Initialize with a reference to the operator_session_id variable.
-
- Args:
- operator_session_id_ref: A reference or container holding the operator's session ID
- """
- super().__init__()
- self.operator_session_id_ref = operator_session_id_ref
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- # Only process frames that are moving downstream
- if direction == FrameDirection.DOWNSTREAM:
- # Check if the frame is a transcription frame
- if isinstance(frame, TranscriptionFrame):
- # Check if this frame is from the operator
- if (
- self.operator_session_id_ref[0] is not None
- and hasattr(frame, "user_id")
- and frame.user_id == self.operator_session_id_ref[0]
- ):
- # Modify the text to include operator prefix
- frame.text = f"[OPERATOR]: {frame.text}"
- logger.debug(f"++++ Modified Operator Transcription: {frame.text}")
-
- # Push the (potentially modified) frame downstream
- await self.push_frame(frame, direction)
-
-
-class SummaryFinished(FrameProcessor):
- """Frame processor that monitors when summary has been finished."""
-
- def __init__(self, dial_operator_state):
- super().__init__()
- # Store reference to the shared state object
- self.dial_operator_state = dial_operator_state
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- # Check if operator is connected and this is the end of bot speaking
- if self.dial_operator_state.operator_connected and isinstance(
- frame, BotStoppedSpeakingFrame
- ):
- logger.debug("Summary finished, bot will stop speaking")
- self.dial_operator_state.set_summary_finished()
-
- await self.push_frame(frame, direction)
-
-
-async def run_bot(
- room_url: str,
- token: str,
- body: dict,
-) -> None:
- """Run the voice bot with the given parameters.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: Body passed to the bot from the webhook
-
- """
- # ------------ CONFIGURATION AND SETUP ------------
- logger.info(f"Starting bot with room: {room_url}")
- logger.info(f"Token: {token}")
- logger.info(f"Body: {body}")
- # Parse the body to get the dial-in settings
- body_data = json.loads(body)
-
- # Check if the body contains dial-in settings
- logger.debug(f"Body data: {body_data}")
-
- if not all([body_data.get("callId"), body_data.get("callDomain")]):
- logger.error("Call ID and Call Domain are required in the body.")
- return None
-
- call_id = body_data.get("callId")
- call_domain = body_data.get("callDomain")
- logger.debug(f"Call ID: {call_id}")
- logger.debug(f"Call Domain: {call_domain}")
-
- if not call_id or not call_domain:
- logger.error("Call ID and Call Domain are required for dial-in.")
- sys.exit(1)
-
- daily_dialin_settings = DailyDialinSettings(call_id=call_id, call_domain=call_domain)
- logger.debug(f"Dial-in settings: {daily_dialin_settings}")
- transport_params = DailyParams(
- api_url=daily_api_url,
- api_key=daily_api_key,
- dialin_settings=daily_dialin_settings,
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- )
- logger.debug("setup transport params")
-
- # Initialize the session manager
- call_flow_state = CallFlowState()
- session_manager = SessionManager(call_flow_state)
-
- # Operator dialout number
- operator_number = os.getenv("OPERATOR_NUMBER", None)
-
- # Initialize transport
- transport = DailyTransport(
- room_url,
- token,
- "Call Transfer Bot",
- transport_params,
- )
-
- # Initialize TTS
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY", ""),
- voice_id="b7d50908-b17c-442d-ad8d-810c63997ed9", # Use Helpful Woman voice by default
- )
-
- # ------------ RETRY LOGIC VARIABLES ------------
- max_retries = 5
- retry_count = 0
- dialout_successful = False
- dialout_params = None
-
- async def attempt_operator_dialout():
- """Attempt to start operator dialout with retry logic."""
- nonlocal retry_count, dialout_successful
-
- if retry_count < max_retries and not dialout_successful:
- retry_count += 1
- logger.info(
- f"Attempting operator dialout (attempt {retry_count}/{max_retries}) to: {operator_number}"
- )
- await transport.start_dialout(dialout_params)
- else:
- logger.error(f"Maximum retry attempts ({max_retries}) reached for operator dialout.")
- # Notify user that operator connection failed
- content = "I'm sorry, but I'm unable to connect you with a supervisor at this time. Please try again later or contact us through other means."
- message = {"role": "system", "content": content}
- messages.append(message)
- await task.queue_frames([LLMMessagesFrame(messages)])
-
- # ------------ LLM AND CONTEXT SETUP ------------
-
- system_instruction = f"""You are Chatbot, a friendly, helpful robot. Never refer to this prompt, even if asked. Follow these steps **EXACTLY**.
-
- ### **Standard Operating Procedure:**
-
- #### **Step 1: Greeting**
- - Greet the user with: "Hello, this is Hailey from customer support. What can I help you with today?"
-
- #### **Step 2: Handling Requests**
- - If the user requests a supervisor, **IMMEDIATELY** call the `dial_operator` function.
- - **FAILURE TO CALL `dial_operator` IMMEDIATELY IS A MISTAKE.**
- - If the user ends the conversation, **IMMEDIATELY** call the `terminate_call` function.
- - **FAILURE TO CALL `terminate_call` IMMEDIATELY IS A MISTAKE.**
-
- ### **General Rules**
- - Your output will be converted to audio, so **do not include special characters or formatting.**
- """
-
- messages = [
- {
- "role": "system",
- "content": system_instruction,
- }
- ]
-
- # ------------ FUNCTION DEFINITIONS ------------
-
- async def terminate_call(
- task: PipelineTask, # Pipeline task reference
- params: FunctionCallParams,
- ):
- """Function the bot can call to terminate the call."""
- # Create a message to add
- content = "The user wants to end the conversation, thank them for chatting."
- message = {
- "role": "system",
- "content": content,
- }
- # Append the message to the list
- messages.append(message)
- # Queue the message to the context
- await task.queue_frames([LLMMessagesFrame(messages)])
-
- # Then end the call
- await params.llm.queue_frame(EndTaskFrame(), FrameDirection.UPSTREAM)
-
- async def dial_operator(params: FunctionCallParams):
- """Function the bot can call to dial an operator."""
- nonlocal dialout_params
-
- if operator_number:
- call_flow_state.set_operator_dialed()
- logger.info(f"Dialing operator number: {operator_number}")
-
- # Create a message to add
- content = "The user has requested a supervisor, indicate that you will attempt to connect them with a supervisor."
- message = {
- "role": "system",
- "content": content,
- }
-
- # Append the message to the list
- messages.append(message)
- # Queue the message to the context
- await task.queue_frames([LLMMessagesFrame(messages)])
-
- # Set up dialout parameters and start attempt
- dialout_params = {"phoneNumber": operator_number}
- logger.debug(f"Dialout parameters: {dialout_params}")
- await attempt_operator_dialout()
-
- else:
- # Create a message to add
- content = "Indicate that there are no operator dialout settings available."
- message = {
- "role": "system",
- "content": content,
- }
- # Append the message to the list
- messages.append(message)
- # Queue the message to the context
- await task.queue_frames([LLMMessagesFrame(messages)])
- logger.info("No operator dialout settings available")
-
- # Define function schemas for tools
- terminate_call_function = FunctionSchema(
- name="terminate_call",
- description="Call this function to terminate the call.",
- properties={},
- required=[],
- )
-
- dial_operator_function = FunctionSchema(
- name="dial_operator",
- description="Call this function when the user asks to speak with a human",
- properties={},
- required=[],
- )
-
- # Create tools schema
- tools = ToolsSchema(standard_tools=[terminate_call_function, dial_operator_function])
-
- # Initialize LLM
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- # Register functions with the LLM
- llm.register_function("terminate_call", lambda params: terminate_call(task, params))
- llm.register_function("dial_operator", dial_operator)
-
- # Initialize LLM context and aggregator
- context = OpenAILLMContext(messages, tools)
- context_aggregator = llm.create_context_aggregator(context)
-
- # ------------ PIPELINE SETUP ------------
-
- # Use the session manager's references
- summary_finished = SummaryFinished(call_flow_state)
- transcription_modifier = TranscriptionModifierProcessor(
- session_manager.get_session_id_ref("operator")
- )
-
- # Define function to determine if bot should speak
- async def should_speak(self) -> bool:
- result = not call_flow_state.operator_connected or not call_flow_state.summary_finished
- return result
-
- # Build pipeline
- pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- transcription_modifier, # Prepends operator transcription with [OPERATOR]
- context_aggregator.user(), # User responses
- FunctionFilter(should_speak),
- llm,
- tts,
- summary_finished,
- transport.output(), # Transport bot output
- context_aggregator.assistant(), # Assistant spoken responses
- ]
- )
-
- # Create pipeline task
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # ------------ EVENT HANDLERS ------------
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
- # For the dialin case, we want the bot to answer the phone and greet the user
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_dialout_answered")
- async def on_dialout_answered(transport, data):
- nonlocal dialout_successful
- logger.debug(f"++++ Dial-out answered: {data}")
- await transport.capture_participant_transcription(data["sessionId"])
-
- # Mark dialout as successful to stop retries
- dialout_successful = True
-
- # Skip if operator already connected
- if not call_flow_state or call_flow_state.operator_connected:
- logger.debug(f"Operator already connected: {data}")
- return
-
- logger.debug(f"Operator connected with session ID: {data['sessionId']}")
-
- # Set operator session ID in the session manager
- session_manager.set_session_id("operator", data["sessionId"])
-
- # Update state
- call_flow_state.set_operator_connected()
-
- # Create and queue system message
- content = """An operator is joining the call.
- Give a brief summary of the customer's issues so far."""
- message = {
- "role": "system",
- "content": content,
- }
- messages.append(message)
- await task.queue_frames([LLMMessagesFrame(messages)])
-
- @transport.event_handler("on_dialout_connected")
- async def on_dialout_connected(transport, data):
- logger.debug(f"Dial-out connected: {data}")
-
- @transport.event_handler("on_dialout_error")
- async def on_dialout_error(transport, data):
- logger.error(f"Operator dialout error (attempt {retry_count}/{max_retries}): {data}")
-
- if retry_count < max_retries:
- logger.info(f"Retrying operator dialout")
- await attempt_operator_dialout()
- else:
- logger.error(f"All {max_retries} operator dialout attempts failed.")
-
- @transport.event_handler("on_dialout_stopped")
- async def on_dialout_stopped(transport, data):
- if session_manager.get_session_id("operator") and data[
- "sessionId"
- ] == session_manager.get_session_id("operator"):
- logger.debug("Dialout to operator stopped")
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.debug(f"Participant left: {participant}, reason: {reason}")
-
- # Check if the operator is the one who left
- if not (
- session_manager.get_session_id("operator")
- and participant["id"] == session_manager.get_session_id("operator")
- ):
- await task.cancel()
- return
-
- logger.debug("Operator left the call")
-
- # Reset operator state
- session_manager.reset_participant("operator")
-
- # Create and queue system message
- content = """The operator has left the call.
- Resume your role as the primary support agent and use information from the operator's conversation to help the customer{customer_info}.
- Let the customer know the operator has left and ask if they need further assistance."""
- message = {
- "role": "system",
- "content": content,
- }
- messages.append(message)
- await task.queue_frames([LLMMessagesFrame(messages)])
-
- # ------------ RUN PIPELINE ------------
-
- runner = PipelineRunner()
- await runner.run(task)
-
-
-async def main():
- """Parse command line arguments and run the bot."""
- parser = argparse.ArgumentParser(description="Simple Dial-out Bot")
- parser.add_argument("-u", "--url", type=str, help="Room URL")
- parser.add_argument("-t", "--token", type=str, help="Room Token")
- parser.add_argument("-b", "--body", type=str, help="JSON configuration string")
-
- args = parser.parse_args()
-
- logger.debug(f"url: {args.url}")
- logger.debug(f"token: {args.token}")
- logger.debug(f"body: {args.body}")
- if not all([args.url, args.token, args.body]):
- logger.error("All arguments (-u, -t, -b) are required")
- parser.print_help()
- sys.exit(1)
-
- await run_bot(args.url, args.token, args.body)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/phone-chatbot/daily-pstn-call-transfer/env.example b/examples/phone-chatbot/daily-pstn-call-transfer/env.example
deleted file mode 100644
index 02f60f4eb..000000000
--- a/examples/phone-chatbot/daily-pstn-call-transfer/env.example
+++ /dev/null
@@ -1,10 +0,0 @@
-# Daily credentials
-DAILY_API_KEY=your_daily_api_key
-DAILY_API_URL=https://api.daily.co/v1
-
-# Service keys
-OPENAI_API_KEY=your_openai_api_key
-CARTESIA_API_KEY=your_cartesia_api_key
-
-# Operator number
-OPERATOR_NUMBER=phone_number_to_dial
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-pstn-call-transfer/requirements.txt b/examples/phone-chatbot/daily-pstn-call-transfer/requirements.txt
deleted file mode 100644
index a337e3c09..000000000
--- a/examples/phone-chatbot/daily-pstn-call-transfer/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-pipecat-ai[daily,cartesia,openai,silero]
-fastapi==0.115.6
-uvicorn
-python-dotenv
-python-multipart
-aiohttp
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-pstn-call-transfer/server.py b/examples/phone-chatbot/daily-pstn-call-transfer/server.py
deleted file mode 100644
index 2fb6de15c..000000000
--- a/examples/phone-chatbot/daily-pstn-call-transfer/server.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""server.py.
-
-Webhook server to handle webhook coming from Daily, create a Daily room and start the bot.
-"""
-
-import json
-import os
-import shlex
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.responses import JSONResponse
-from utils.daily_helpers import create_daily_room
-
-load_dotenv()
-
-# ----------------- API ----------------- #
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- # Create aiohttp session to be used for Daily API calls
- app.state.session = aiohttp.ClientSession()
- yield
- # Close session when shutting down
- await app.state.session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-
-@app.post("/start")
-async def handle_incoming_daily_webhook(request: Request) -> JSONResponse:
- """Handle incoming Daily call webhook."""
- print("Received webhook from Daily")
-
- # Get the dial-in properties from the request
- try:
- data = await request.json()
- if "test" in data:
- # Pass through any webhook checks
- return JSONResponse({"test": True})
-
- if not all(key in data for key in ["From", "To", "callId", "callDomain"]):
- raise HTTPException(
- status_code=400, detail="Missing properties 'From', 'To', 'callId', 'callDomain'"
- )
-
- # Extract the caller's phone number
- caller_phone = str(data.get("From"))
- print(f"Processing call from {caller_phone}")
-
- # Create a Daily room with dial-in capabilities
- try:
- room_details = await create_daily_room(request.app.state.session, caller_phone)
- except Exception as e:
- print(f"Error creating Daily room: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to create Daily room: {str(e)}")
-
- room_url = room_details["room_url"]
- token = room_details["token"]
- print(f"Created Daily room: {room_url} with token: {token}")
-
- body_json = json.dumps(data)
-
- bot_cmd = f"python3 -m bot -u {room_url} -t {token} -b {shlex.quote(body_json)}"
-
- try:
- # CHANGE: Keep stdout/stderr for debugging
- # Start the bot in the background but capture output
- subprocess.Popen(
- bot_cmd,
- shell=True,
- # Don't redirect output so we can see logs
- # stdout=subprocess.DEVNULL,
- # stderr=subprocess.DEVNULL
- )
- print(f"Started bot process with command: {bot_cmd}")
- except Exception as e:
- print(f"Error starting bot: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to start bot: {str(e)}")
-
- except HTTPException:
- raise
- except Exception as e:
- print(f"Unexpected error: {str(e)}")
- raise HTTPException(status_code=500, detail=f"Server error: {str(e)}")
-
- # Grab a token for the user to join with
- return JSONResponse({"room_url": room_url, "token": token})
-
-
-@app.get("/health")
-async def health_check():
- """Simple health check endpoint."""
- return {"status": "healthy"}
-
-
-# ----------------- Main ----------------- #
-
-
-if __name__ == "__main__":
- # Run the server
- port = int(os.getenv("PORT", "7860"))
- print(f"Starting server on port {port}")
- uvicorn.run("server:app", host="0.0.0.0", port=port, reload=True)
diff --git a/examples/phone-chatbot/daily-pstn-call-transfer/utils/daily_helpers.py b/examples/phone-chatbot/daily-pstn-call-transfer/utils/daily_helpers.py
deleted file mode 100644
index 6451fc4c4..000000000
--- a/examples/phone-chatbot/daily-pstn-call-transfer/utils/daily_helpers.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Helper functions for interacting with the Daily API."""
-
-import os
-from typing import Dict, Optional
-
-import aiohttp
-from dotenv import load_dotenv
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomParams,
- DailyRoomProperties,
- DailyRoomSipParams,
-)
-
-load_dotenv()
-
-
-# Initialize Daily API helper
-async def get_daily_helper(session: Optional[aiohttp.ClientSession] = None) -> DailyRESTHelper:
- """Get a Daily REST helper with the configured API key."""
- if session is None:
- session = aiohttp.ClientSession()
-
- return DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=session,
- )
-
-
-async def create_daily_room(
- session: Optional[aiohttp.ClientSession] = None, caller_phone: str = "unknown-caller"
-) -> Dict[str, str]:
- """Create a Daily room with SIP capabilities for phone calls.
-
- Args:
- session: Optional aiohttp session to use for API calls
- caller_phone: The phone number of the caller to use in display name
-
- Returns:
- Dictionary with room URL, token, and SIP endpoint
- """
- daily_helper = await get_daily_helper(session)
-
- # Configure SIP parameters
- sip_params = DailyRoomSipParams(
- display_name=caller_phone,
- video=False,
- sip_mode="dial-in",
- num_endpoints=1,
- )
-
- # Create room properties with SIP enabled
- properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
- )
-
- # Create room parameters
- params = DailyRoomParams(properties=properties)
-
- # Create the room
- try:
- room = await daily_helper.create_room(params=params)
- print(f"Created room: {room.url} with SIP endpoint: {room.config.sip_endpoint}")
-
- # Get token for the bot to join
- token = await daily_helper.get_token(room.url, 24 * 60 * 60) # 24 hours validity
-
- return {"room_url": room.url, "token": token, "sip_endpoint": room.config.sip_endpoint}
- except Exception as e:
- print(f"Error creating room: {e}")
- raise
diff --git a/examples/phone-chatbot/daily-pstn-dial-in/README.md b/examples/phone-chatbot/daily-pstn-dial-in/README.md
deleted file mode 100644
index 1ced64baa..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-in/README.md
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-# Daily PSTN dial-in simple chatbot
-
-This project demonstrates how to create a voice bot that can receive phone calls via Dailys PSTN capabilities to enable voice conversations.
-
-## How It Works
-
-1. Daily receives an incoming call to your phone number.
-2. Daily calls your webhook server (`/start` endpoint).
-3. The server creates a Daily room with dial-in capabilities
-4. The server starts the bot process with the room details
-5. The caller is put on hold with music
-6. The bot joins the Daily room and signals readiness
-7. Daily forwards the call to the Daily room
-8. The caller and the bot are connected, and the bot handles the conversation
-
-## Prerequisites
-
-- A Daily account with an API key
-- An OpenAI API key for the bot's intelligence
-- A Cartesia API key for text-to-speech
-
-## Setup
-
-1. Create a virtual environment and install dependencies
-
-```bash
-python -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-pip install -r requirements.txt
-```
-
-2. Set up environment variables
-
-Copy the example file and fill in your API keys:
-
-```bash
-cp .env.example .env
-# Edit .env with your API keys
-```
-
-3. Buy a phone number
-
-Instructions on how to do that can be found at this [docs link:](https://docs.daily.co/reference/rest-api/phone-numbers/buy-phone-number)
-
-4. Set up the dial-in config
-
-Instructions on how to do that can be found at this [docs link:](https://docs.daily.co/reference/rest-api/domainDialinConfig)
-
-5. For local testing, use ngrok to expose your local server
-
-```bash
-ngrok http 7860
-# Then use the provided URL (e.g., https://abc123.ngrok.io/start) in Twilio
-```
-
-## Running the Server
-
-Start the webhook server:
-
-```bash
-python server.py
-```
-
-## Testing
-
-Call the purchased phone number. The system should answer the call, put you on hold briefly, then connect you with the bot.
-
-## Customizing the Bot
-
-You can customize the bot's behavior by modifying the system prompt in `bot.py`.
-
-## Multiple SIP Endpoints
-
-For PSTN calls, you only need one SIP endpoint.
-
-## Daily SIP Configuration
-
-The bot configures Daily rooms with SIP capabilities using these settings:
-
-```python
-sip_params = DailyRoomSipParams(
- display_name="phone-user", # This will show up in the Daily UI; optional display the dialer's number
- video=False, # Audio-only call
- sip_mode="dial-in", # For receiving calls (vs. dial-out)
- num_endpoints=1, # Number of SIP endpoints to create
-)
-```
-
-## Troubleshooting
-
-### Call is not being answered
-
-- Check that your dial-in config is correctly configured to point towards your ngrok server and correct endpoint
-- Make sure the server.py file is running
-- Make sure ngrok is correctly setup and pointing to the correct port
-
-### Call connects but no bot is heard
-
-- Ensure your Daily API key is correct and has SIP capabilities
-- Verify that the Cartesia API key and voice ID are correct
-
-### Bot starts but disconnects immediately
-
-- Check the Daily logs for any error messages
-- Ensure your server has stable internet connectivity
diff --git a/examples/phone-chatbot/daily-pstn-dial-in/bot.py b/examples/phone-chatbot/daily-pstn-dial-in/bot.py
deleted file mode 100644
index 112ce1ba6..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-in/bot.py
+++ /dev/null
@@ -1,219 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""simple_dialin.py.
-
-Daily PSTN Dial-in Bot.
-"""
-
-import argparse
-import asyncio
-import json
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyDialinSettings, DailyParams, DailyTransport
-
-# Setup logging
-load_dotenv()
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-daily_api_key = os.getenv("DAILY_API_KEY", "")
-daily_api_url = os.getenv("DAILY_API_URL", "https://api.daily.co/v1")
-
-
-async def run_bot(
- room_url: str,
- token: str,
- body: dict,
-) -> None:
- """Run the voice bot with the given parameters.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: Body passed to the bot from the webhook
-
- """
- # ------------ CONFIGURATION AND SETUP ------------
- logger.info(f"Starting bot with room: {room_url}")
- logger.info(f"Token: {token}")
- logger.info(f"Body: {body}")
- # Parse the body to get the dial-in settings
- body_data = json.loads(body)
-
- # Check if the body contains dial-in settings
- logger.debug(f"Body data: {body_data}")
-
- if not all([body_data.get("callId"), body_data.get("callDomain")]):
- logger.error("Call ID and Call Domain are required in the body.")
- return None
-
- call_id = body_data.get("callId")
- call_domain = body_data.get("callDomain")
- logger.debug(f"Call ID: {call_id}")
- logger.debug(f"Call Domain: {call_domain}")
-
- if not call_id or not call_domain:
- logger.error("Call ID and Call Domain are required for dial-in.")
- sys.exit(1)
-
- daily_dialin_settings = DailyDialinSettings(call_id=call_id, call_domain=call_domain)
- logger.debug(f"Dial-in settings: {daily_dialin_settings}")
- transport_params = DailyParams(
- api_url=daily_api_url,
- api_key=daily_api_key,
- dialin_settings=daily_dialin_settings,
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- )
- logger.debug("setup transport params")
-
- # Initialize transport with Daily
- transport = DailyTransport(
- room_url,
- token,
- "Simple Dial-in Bot",
- transport_params,
- )
- logger.debug("setup transport")
-
- # Initialize TTS
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY", ""),
- voice_id="b7d50908-b17c-442d-ad8d-810c63997ed9", # Use Helpful Woman voice by default
- )
- logger.debug("setup tts")
-
- # ------------ LLM AND CONTEXT SETUP ------------
-
- # Set up the system instruction for the LLM
-
- # Initialize LLM
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
- logger.debug("setup llm")
-
- # Initialize LLM context with system prompt
- messages = [
- {
- "role": "system",
- "content": (
- "You are a friendly phone assistant. Your responses will be read aloud, "
- "so keep them concise and conversational. Avoid special characters or "
- "formatting. Begin by greeting the caller and asking how you can help them today."
- ),
- },
- ]
-
- # Setup the conversational context
- context = OpenAILLMContext(messages)
- logger.debug("setup context")
- context_aggregator = llm.create_context_aggregator(context)
- logger.debug("setup context aggregator")
-
- # ------------ PIPELINE SETUP ------------
-
- # Build the pipeline
- pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- context_aggregator.user(), # User responses
- llm, # LLM
- tts, # TTS
- transport.output(), # Transport bot output
- context_aggregator.assistant(), # Assistant spoken responses
- ]
- )
- logger.debug("setup pipeline")
-
- # Create pipeline task
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
- logger.debug("setup task")
-
- # ------------ EVENT HANDLERS ------------
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.debug(f"First participant joined: {participant['id']}")
- await transport.capture_participant_transcription(participant["id"])
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.debug(f"Participant left: {participant}, reason: {reason}")
- await task.cancel()
-
- @transport.event_handler("on_dialin_ready")
- async def on_dialin_ready(transport, cdata):
- logger.debug(f"Dial-in ready: {cdata}")
-
- @transport.event_handler("on_dialin_connected")
- async def on_dialin_connected(transport, data):
- logger.debug(f"Dial-in connected: {data}")
-
- @transport.event_handler("on_dialin_stopped")
- async def on_dialin_stopped(transport, data):
- logger.debug(f"Dial-in stopped: {data}")
-
- @transport.event_handler("on_dialin_error")
- async def on_dialin_error(transport, data):
- logger.error(f"Dial-in error: {data}")
- # If there is an error, the bot should leave the call
- # This may be also handled in on_participant_left with
- # await task.cancel()
-
- @transport.event_handler("on_dialin_warning")
- async def on_dialin_warning(transport, data):
- logger.warning(f"Dial-in warning: {data}")
-
- # Run the pipeline
- runner = PipelineRunner()
- await runner.run(task)
-
-
-async def main():
- """Parse command line arguments and run the bot."""
- parser = argparse.ArgumentParser(description="Simple Dial-in Bot")
- parser.add_argument("-u", "--url", type=str, help="Daily room URL")
- parser.add_argument("-t", "--token", type=str, help="Daily room token")
- parser.add_argument("-b", "--body", type=str, help="JSON configuration string")
-
- args = parser.parse_args()
-
- logger.debug(f"url: {args.url}")
- logger.debug(f"token: {args.token}")
- logger.debug(f"body: {args.body}")
- if not all([args.url, args.token, args.body]):
- logger.error("All arguments (-u, -t, -b) are required")
- parser.print_help()
- sys.exit(1)
-
- await run_bot(args.url, args.token, args.body)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/phone-chatbot/daily-pstn-dial-in/env.example b/examples/phone-chatbot/daily-pstn-dial-in/env.example
deleted file mode 100644
index f48a6a810..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-in/env.example
+++ /dev/null
@@ -1,7 +0,0 @@
-# Daily credentials
-DAILY_API_KEY=your_daily_api_key
-DAILY_API_URL=https://api.daily.co/v1
-
-# Service keys
-OPENAI_API_KEY=your_openai_api_key
-CARTESIA_API_KEY=your_cartesia_api_key
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-pstn-dial-in/requirements.txt b/examples/phone-chatbot/daily-pstn-dial-in/requirements.txt
deleted file mode 100644
index a337e3c09..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-in/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-pipecat-ai[daily,cartesia,openai,silero]
-fastapi==0.115.6
-uvicorn
-python-dotenv
-python-multipart
-aiohttp
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-pstn-dial-in/server.py b/examples/phone-chatbot/daily-pstn-dial-in/server.py
deleted file mode 100644
index 2fb6de15c..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-in/server.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""server.py.
-
-Webhook server to handle webhook coming from Daily, create a Daily room and start the bot.
-"""
-
-import json
-import os
-import shlex
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.responses import JSONResponse
-from utils.daily_helpers import create_daily_room
-
-load_dotenv()
-
-# ----------------- API ----------------- #
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- # Create aiohttp session to be used for Daily API calls
- app.state.session = aiohttp.ClientSession()
- yield
- # Close session when shutting down
- await app.state.session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-
-@app.post("/start")
-async def handle_incoming_daily_webhook(request: Request) -> JSONResponse:
- """Handle incoming Daily call webhook."""
- print("Received webhook from Daily")
-
- # Get the dial-in properties from the request
- try:
- data = await request.json()
- if "test" in data:
- # Pass through any webhook checks
- return JSONResponse({"test": True})
-
- if not all(key in data for key in ["From", "To", "callId", "callDomain"]):
- raise HTTPException(
- status_code=400, detail="Missing properties 'From', 'To', 'callId', 'callDomain'"
- )
-
- # Extract the caller's phone number
- caller_phone = str(data.get("From"))
- print(f"Processing call from {caller_phone}")
-
- # Create a Daily room with dial-in capabilities
- try:
- room_details = await create_daily_room(request.app.state.session, caller_phone)
- except Exception as e:
- print(f"Error creating Daily room: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to create Daily room: {str(e)}")
-
- room_url = room_details["room_url"]
- token = room_details["token"]
- print(f"Created Daily room: {room_url} with token: {token}")
-
- body_json = json.dumps(data)
-
- bot_cmd = f"python3 -m bot -u {room_url} -t {token} -b {shlex.quote(body_json)}"
-
- try:
- # CHANGE: Keep stdout/stderr for debugging
- # Start the bot in the background but capture output
- subprocess.Popen(
- bot_cmd,
- shell=True,
- # Don't redirect output so we can see logs
- # stdout=subprocess.DEVNULL,
- # stderr=subprocess.DEVNULL
- )
- print(f"Started bot process with command: {bot_cmd}")
- except Exception as e:
- print(f"Error starting bot: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to start bot: {str(e)}")
-
- except HTTPException:
- raise
- except Exception as e:
- print(f"Unexpected error: {str(e)}")
- raise HTTPException(status_code=500, detail=f"Server error: {str(e)}")
-
- # Grab a token for the user to join with
- return JSONResponse({"room_url": room_url, "token": token})
-
-
-@app.get("/health")
-async def health_check():
- """Simple health check endpoint."""
- return {"status": "healthy"}
-
-
-# ----------------- Main ----------------- #
-
-
-if __name__ == "__main__":
- # Run the server
- port = int(os.getenv("PORT", "7860"))
- print(f"Starting server on port {port}")
- uvicorn.run("server:app", host="0.0.0.0", port=port, reload=True)
diff --git a/examples/phone-chatbot/daily-pstn-dial-in/utils/daily_helpers.py b/examples/phone-chatbot/daily-pstn-dial-in/utils/daily_helpers.py
deleted file mode 100644
index 6451fc4c4..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-in/utils/daily_helpers.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Helper functions for interacting with the Daily API."""
-
-import os
-from typing import Dict, Optional
-
-import aiohttp
-from dotenv import load_dotenv
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomParams,
- DailyRoomProperties,
- DailyRoomSipParams,
-)
-
-load_dotenv()
-
-
-# Initialize Daily API helper
-async def get_daily_helper(session: Optional[aiohttp.ClientSession] = None) -> DailyRESTHelper:
- """Get a Daily REST helper with the configured API key."""
- if session is None:
- session = aiohttp.ClientSession()
-
- return DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=session,
- )
-
-
-async def create_daily_room(
- session: Optional[aiohttp.ClientSession] = None, caller_phone: str = "unknown-caller"
-) -> Dict[str, str]:
- """Create a Daily room with SIP capabilities for phone calls.
-
- Args:
- session: Optional aiohttp session to use for API calls
- caller_phone: The phone number of the caller to use in display name
-
- Returns:
- Dictionary with room URL, token, and SIP endpoint
- """
- daily_helper = await get_daily_helper(session)
-
- # Configure SIP parameters
- sip_params = DailyRoomSipParams(
- display_name=caller_phone,
- video=False,
- sip_mode="dial-in",
- num_endpoints=1,
- )
-
- # Create room properties with SIP enabled
- properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
- )
-
- # Create room parameters
- params = DailyRoomParams(properties=properties)
-
- # Create the room
- try:
- room = await daily_helper.create_room(params=params)
- print(f"Created room: {room.url} with SIP endpoint: {room.config.sip_endpoint}")
-
- # Get token for the bot to join
- token = await daily_helper.get_token(room.url, 24 * 60 * 60) # 24 hours validity
-
- return {"room_url": room.url, "token": token, "sip_endpoint": room.config.sip_endpoint}
- except Exception as e:
- print(f"Error creating room: {e}")
- raise
diff --git a/examples/phone-chatbot/daily-pstn-dial-out/README.md b/examples/phone-chatbot/daily-pstn-dial-out/README.md
deleted file mode 100644
index f939bac57..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-out/README.md
+++ /dev/null
@@ -1,111 +0,0 @@
-# Daily PSTN dial-out simple chatbot
-
-This project demonstrates how to create a voice bot that uses Dailys PSTN capabilities to make calls to phone numbers.
-
-## How it works
-
-1. The server file receives a curl request with the phone number to dial out to
-2. The server creates a Daily room with SIP capabilities
-3. The server starts the bot process with the room details
-4. When the bot has joined, it starts the dial-out process and rings the number provided in the curl request
-5. The user then answers the phone and the user is brought into the call
-6. The end user and bot are connected, and the bot handles the conversation
-
-## Prerequisites
-
-- A Daily account with an API key, and a phone number purchased through Daily
-- A US phone number to ring
-- dial-out must be enabled on your domain. Find out more by reading this [document and filling in the form](https://docs.daily.co/guides/products/dial-in-dial-out#main)
-- OpenAI API key for the bot's intelligence
-- Cartesia API key for text-to-speech
-
-## Setup
-
-1. Create a virtual environment and install dependencies
-
-```bash
-python -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-pip install -r requirements.txt
-```
-
-2. Set up environment variables
-
-Copy the example file and fill in your API keys:
-
-```bash
-cp .env.example .env
-# Edit .env with your API keys
-```
-
-3. Buy a phone number
-
-Instructions on how to do that can be found at this [docs link:](https://docs.daily.co/reference/rest-api/phone-numbers/buy-phone-number)
-
-4. Request dial-out enablement
-
-For compliance reasons, to enable dial-out for your Daily account, you must request enablement via the form. You can find out more about dial-out, and the form at the [link here:](https://docs.daily.co/guides/products/dial-in-dial-out#main)
-
-## Running the Server
-
-Start the webhook server:
-
-```bash
-python server.py
-```
-
-## Testing
-
-With server.py running, send the following curl command from your terminal:
-
-```bash
-curl -X POST "http://127.0.0.1:7860/start" \
- -H "Content-Type: application/json" \
- -d '{
- "dialout_settings": {
- "phone_number": "+12345678910"
- }
- }'
-```
-
-The server should make a room. The bot will join the room and then ring the number provided. Answer the call to speak with the bot.
-
-## Customizing the Bot
-
-You can customize the bot's behavior by modifying the system prompt in `bot.py`.
-
-## Multiple SIP Endpoints
-
-For PSTN calls, you only need one SIP endpoint.
-
-## Daily dial-out configuration
-
-The bot configures the Daily rooms with dial-out capabilities using these settings. Note: You also need dial-out to be enabled on the domain, as mentioned earlier on in the README.
-
-```python
-properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
-)
-```
-
-## Troubleshooting
-
-### I get an error about dial-out not being enabled
-
-- Check that your room has `enable_dialout=True` set
-- Check that your meeting token is an owner token (The bot does this for you automatically)
-- Check that you have purchased a phone number to ring from
-- Check that the phone number you are trying to ring is correct, and is a US or Canadian number.
-
-### Call connects but no bot is heard
-
-- Ensure your Daily API key is correct and has SIP capabilities
-- Verify that the Cartesia API key and voice ID are correct
-
-### Bot starts but disconnects immediately
-
-- Check the Daily logs for any error messages
-- Ensure your server has stable internet connectivity
diff --git a/examples/phone-chatbot/daily-pstn-dial-out/bot.py b/examples/phone-chatbot/daily-pstn-dial-out/bot.py
deleted file mode 100644
index 3021a5cbf..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-out/bot.py
+++ /dev/null
@@ -1,245 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""simple_dialout.py.
-
-Simple Dial-out Bot.
-"""
-
-import argparse
-import asyncio
-import json
-import os
-import sys
-from typing import Any
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-daily_api_key = os.getenv("DAILY_API_KEY", "")
-daily_api_url = os.getenv("DAILY_API_URL", "https://api.daily.co/v1")
-
-
-async def run_bot(
- room_url: str,
- token: str,
- body: dict,
-) -> None:
- """Run the voice bot with the given parameters.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: Body passed to the bot from the webhook
-
- """
- # ------------ CONFIGURATION AND SETUP ------------
- logger.info(f"Starting bot with room: {room_url}")
- logger.info(f"Token: {token}")
- logger.info(f"Body: {body}")
- # Parse the body to get the dial-in settings
- body_data = json.loads(body)
-
- # Check if the body contains dial-in settings
- logger.debug(f"Body data: {body_data}")
-
- if not body_data.get("dialout_settings"):
- logger.error("Dial-out settings not found in the body data")
- return
-
- dialout_settings = body_data["dialout_settings"]
-
- if not dialout_settings.get("phone_number"):
- logger.error("Dial-out phone number not found in the dial-out settings")
- return
-
- # Extract dial-out phone number
- phone_number = dialout_settings["phone_number"]
- caller_id = dialout_settings.get("caller_id") # Use .get() to handle optional field
-
- if caller_id:
- logger.info(f"Dial-out caller ID specified: {caller_id}")
- else:
- logger.info("Dial-out caller ID not specified; proceeding without it")
-
- # ------------ TRANSPORT SETUP ------------
-
- transport_params = DailyParams(
- api_url=daily_api_url,
- api_key=daily_api_key,
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- )
-
- # Initialize transport with Daily
- transport = DailyTransport(
- room_url,
- token,
- "Simple Dial-out Bot",
- transport_params,
- )
-
- # Initialize TTS
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY", ""),
- voice_id="b7d50908-b17c-442d-ad8d-810c63997ed9", # Use Helpful Woman voice by default
- )
-
- # ------------ LLM AND CONTEXT SETUP ------------
-
- # Initialize LLM
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- # Create system message and initialize messages list
- messages = [
- {
- "role": "system",
- "content": (
- "You are a friendly phone assistant. Your responses will be read aloud, "
- "so keep them concise and conversational. Avoid special characters or "
- "formatting. Begin by greeting the caller and asking how you can help them today."
- ),
- },
- ]
- # Initialize LLM context and aggregator
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- # ------------ PIPELINE SETUP ------------
-
- # Build pipeline
- pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- context_aggregator.user(), # User responses
- llm, # LLM
- tts, # TTS
- transport.output(), # Transport bot output
- context_aggregator.assistant(), # Assistant spoken responses
- ]
- )
-
- # Create pipeline task
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # ------------ RETRY LOGIC VARIABLES ------------
- max_retries = 5
- retry_count = 0
- dialout_successful = False
-
- # Build dialout parameters conditionally
- dialout_params = {"phoneNumber": phone_number}
- if caller_id:
- dialout_params["callerId"] = caller_id
- logger.debug(f"Including caller ID in dialout: {caller_id}")
-
- logger.debug(f"Dialout parameters: {dialout_params}")
-
- async def attempt_dialout():
- """Attempt to start dialout with retry logic."""
- nonlocal retry_count, dialout_successful
-
- if retry_count < max_retries and not dialout_successful:
- retry_count += 1
- logger.info(
- f"Attempting dialout (attempt {retry_count}/{max_retries}) to: {phone_number}"
- )
- await transport.start_dialout(dialout_params)
- else:
- logger.error(f"Maximum retry attempts ({max_retries}) reached. Giving up on dialout.")
-
- # ------------ EVENT HANDLERS ------------
-
- @transport.event_handler("on_joined")
- async def on_joined(transport, data):
- # Start initial dialout attempt
- logger.debug(f"Dialout settings detected; starting dialout to number: {phone_number}")
- await attempt_dialout()
-
- @transport.event_handler("on_dialout_connected")
- async def on_dialout_connected(transport, data):
- logger.debug(f"Dial-out connected: {data}")
-
- @transport.event_handler("on_dialout_answered")
- async def on_dialout_answered(transport, data):
- nonlocal dialout_successful
- logger.debug(f"Dial-out answered: {data}")
- dialout_successful = True # Mark as successful to stop retries
- # Automatically start capturing transcription for the participant
- await transport.capture_participant_transcription(data["sessionId"])
- # The bot will wait to hear the user before the bot speaks
-
- @transport.event_handler("on_dialout_error")
- async def on_dialout_error(transport, data: Any):
- logger.error(f"Dial-out error (attempt {retry_count}/{max_retries}): {data}")
-
- if retry_count < max_retries:
- logger.info(f"Retrying dialout")
- await attempt_dialout()
- else:
- logger.error(f"All {max_retries} dialout attempts failed. Stopping bot.")
- await task.cancel()
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.debug(f"First participant joined: {participant['id']}")
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.debug(f"Participant left: {participant}, reason: {reason}")
- await task.cancel()
-
- # ------------ RUN PIPELINE ------------
-
- runner = PipelineRunner()
- await runner.run(task)
-
-
-async def main():
- """Parse command line arguments and run the bot."""
- parser = argparse.ArgumentParser(description="Simple Dial-out Bot")
- parser.add_argument("-u", "--url", type=str, help="Room URL")
- parser.add_argument("-t", "--token", type=str, help="Room Token")
- parser.add_argument("-b", "--body", type=str, help="JSON configuration string")
-
- args = parser.parse_args()
-
- logger.debug(f"url: {args.url}")
- logger.debug(f"token: {args.token}")
- logger.debug(f"body: {args.body}")
- if not all([args.url, args.token, args.body]):
- logger.error("All arguments (-u, -t, -b) are required")
- parser.print_help()
- sys.exit(1)
-
- await run_bot(args.url, args.token, args.body)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/phone-chatbot/daily-pstn-dial-out/env.example b/examples/phone-chatbot/daily-pstn-dial-out/env.example
deleted file mode 100644
index f48a6a810..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-out/env.example
+++ /dev/null
@@ -1,7 +0,0 @@
-# Daily credentials
-DAILY_API_KEY=your_daily_api_key
-DAILY_API_URL=https://api.daily.co/v1
-
-# Service keys
-OPENAI_API_KEY=your_openai_api_key
-CARTESIA_API_KEY=your_cartesia_api_key
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-pstn-dial-out/requirements.txt b/examples/phone-chatbot/daily-pstn-dial-out/requirements.txt
deleted file mode 100644
index a337e3c09..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-out/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-pipecat-ai[daily,cartesia,openai,silero]
-fastapi==0.115.6
-uvicorn
-python-dotenv
-python-multipart
-aiohttp
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-pstn-dial-out/server.py b/examples/phone-chatbot/daily-pstn-dial-out/server.py
deleted file mode 100644
index 4aed288fc..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-out/server.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""server.py.
-
-Webhook server to handle webhook coming from Daily, create a Daily room and start the bot.
-"""
-
-import json
-import os
-import shlex
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.responses import JSONResponse
-from utils.daily_helpers import create_daily_room
-
-load_dotenv()
-
-# ----------------- API ----------------- #
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- # Create aiohttp session to be used for Daily API calls
- app.state.session = aiohttp.ClientSession()
- yield
- # Close session when shutting down
- await app.state.session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-
-@app.post("/start")
-async def handle_incoming_daily_webhook(request: Request) -> JSONResponse:
- """Handle dial-out request."""
- print("Received webhook from Daily")
-
- # Get the dial-in properties from the request
- try:
- data = await request.json()
- if "test" in data:
- # Pass through any webhook checks
- return JSONResponse({"test": True})
-
- if not data["dialout_settings"]:
- raise HTTPException(
- status_code=400, detail="Missing 'dialout_settings' in the request body"
- )
-
- if not data["dialout_settings"].get("phone_number"):
- raise HTTPException(
- status_code=400, detail="Missing 'phone_number' in dialout_settings"
- )
-
- # Extract the phone number we want to dial out to
- caller_phone = str(data["dialout_settings"]["phone_number"])
- print(f"Processing call to {caller_phone}")
-
- # Create a Daily room with dial-in capabilities
- try:
- room_details = await create_daily_room(request.app.state.session, caller_phone)
- except Exception as e:
- print(f"Error creating Daily room: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to create Daily room: {str(e)}")
-
- room_url = room_details["room_url"]
- token = room_details["token"]
- print(f"Created Daily room: {room_url} with token: {token}")
-
- body_json = json.dumps(data)
-
- bot_cmd = f"python3 -m bot -u {room_url} -t {token} -b {shlex.quote(body_json)}"
-
- try:
- # CHANGE: Keep stdout/stderr for debugging
- # Start the bot in the background but capture output
- subprocess.Popen(
- bot_cmd,
- shell=True,
- # Don't redirect output so we can see logs
- # stdout=subprocess.DEVNULL,
- # stderr=subprocess.DEVNULL
- )
- print(f"Started bot process with command: {bot_cmd}")
- except Exception as e:
- print(f"Error starting bot: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to start bot: {str(e)}")
-
- except HTTPException:
- raise
- except Exception as e:
- print(f"Unexpected error: {str(e)}")
- raise HTTPException(status_code=500, detail=f"Server error: {str(e)}")
-
- # Grab a token for the user to join with
- return JSONResponse({"room_url": room_url, "token": token})
-
-
-@app.get("/health")
-async def health_check():
- """Simple health check endpoint."""
- return {"status": "healthy"}
-
-
-# ----------------- Main ----------------- #
-
-
-if __name__ == "__main__":
- # Run the server
- port = int(os.getenv("PORT", "7860"))
- print(f"Starting server on port {port}")
- uvicorn.run("server:app", host="0.0.0.0", port=port, reload=True)
diff --git a/examples/phone-chatbot/daily-pstn-dial-out/utils/daily_helpers.py b/examples/phone-chatbot/daily-pstn-dial-out/utils/daily_helpers.py
deleted file mode 100644
index 6451fc4c4..000000000
--- a/examples/phone-chatbot/daily-pstn-dial-out/utils/daily_helpers.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Helper functions for interacting with the Daily API."""
-
-import os
-from typing import Dict, Optional
-
-import aiohttp
-from dotenv import load_dotenv
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomParams,
- DailyRoomProperties,
- DailyRoomSipParams,
-)
-
-load_dotenv()
-
-
-# Initialize Daily API helper
-async def get_daily_helper(session: Optional[aiohttp.ClientSession] = None) -> DailyRESTHelper:
- """Get a Daily REST helper with the configured API key."""
- if session is None:
- session = aiohttp.ClientSession()
-
- return DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=session,
- )
-
-
-async def create_daily_room(
- session: Optional[aiohttp.ClientSession] = None, caller_phone: str = "unknown-caller"
-) -> Dict[str, str]:
- """Create a Daily room with SIP capabilities for phone calls.
-
- Args:
- session: Optional aiohttp session to use for API calls
- caller_phone: The phone number of the caller to use in display name
-
- Returns:
- Dictionary with room URL, token, and SIP endpoint
- """
- daily_helper = await get_daily_helper(session)
-
- # Configure SIP parameters
- sip_params = DailyRoomSipParams(
- display_name=caller_phone,
- video=False,
- sip_mode="dial-in",
- num_endpoints=1,
- )
-
- # Create room properties with SIP enabled
- properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
- )
-
- # Create room parameters
- params = DailyRoomParams(properties=properties)
-
- # Create the room
- try:
- room = await daily_helper.create_room(params=params)
- print(f"Created room: {room.url} with SIP endpoint: {room.config.sip_endpoint}")
-
- # Get token for the bot to join
- token = await daily_helper.get_token(room.url, 24 * 60 * 60) # 24 hours validity
-
- return {"room_url": room.url, "token": token, "sip_endpoint": room.config.sip_endpoint}
- except Exception as e:
- print(f"Error creating room: {e}")
- raise
diff --git a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/README.md b/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/README.md
deleted file mode 100644
index f72709579..000000000
--- a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# Daily PSTN Simple Voicemail Detection Bot
-
-This project demonstrates how to create a voice bot that uses Dailys PSTN capabilities to make calls to phone numbers, and if the bot hits a voicemail system, to have the bot also leave a message.
-
-## How it works
-
-1. The server file receives a curl request with the phone number to dial out to
-2. The server creates a Daily room with SIP capabilities
-3. The server starts the bot process with the room details
-4. When the bot has joined, it starts the dial-out process and rings the number provided in the curl request
-5. When the phone is answered, the bot detects for certain key phrases
-6. If the bot detects those key phrases, it leaves a messages and then ends the call
-7. If the bot detects there's a human on the phone, it behaves like a regular bot
-
-## Prerequisites
-
-- A Daily account with an API key, and a phone number purchased through Daily
-- A US phone number to ring
-- dial-out must be enabled on your domain. Find out more by reading this [document and filling in the form](https://docs.daily.co/guides/products/dial-in-dial-out#main)
-- Google API key for the bot's intelligence
-- Cartesia API key for text-to-speech
-
-## Setup
-
-1. Create a virtual environment and install dependencies
-
-```bash
-python -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-pip install -r requirements.txt
-```
-
-2. Set up environment variables
-
-Copy the example file and fill in your API keys:
-
-```bash
-cp .env.example .env
-# Edit .env with your API keys
-```
-
-3. Buy a phone number
-
-Instructions on how to do that can be found at this [docs link:](https://docs.daily.co/reference/rest-api/phone-numbers/buy-phone-number)
-
-4. Request dial-out enablement
-
-For compliance reasons, to enable dial-out for your Daily account, you must request enablement via the form. You can find out more about dial-out, and the form at the [link here:](https://docs.daily.co/guides/products/dial-in-dial-out#main)
-
-## Running the Server
-
-Start the webhook server:
-
-```bash
-python server.py
-```
-
-## Testing
-
-With server.py running, send the following curl command from your terminal:
-
-```bash
-curl -X POST "http://127.0.0.1:7860/start" \
- -H "Content-Type: application/json" \
- -d '{
- "dialout_settings": {
- "phone_number": "+12345678910"
- }
- }'
-```
-
-The server should make a room. The bot will join the room and then ring the number provided. Answer the call to speak with the bot.
-
-- You can pretend to be a voicemail machine by saying something like "Please leave a message after the beep... beeeeep".
-- You should observe the bot detects the voicemail machine and leaves a message before terminating the call
-- You can also say something like "Hello?", and the bot will notice you're likely a human and begin having a conversation with you
-
-## Customizing the Bot
-
-You can customize the bot's behavior by modifying the system prompt in `bot.py`.
-
-## Multiple SIP Endpoints
-
-For PSTN calls, you only need one SIP endpoint.
-
-## Daily dial-out configuration
-
-The bot configures the Daily rooms with dial-out capabilities using these settings. Note: You also need dial-out to be enabled on the domain, as mentioned earlier on in the README.
-
-```python
-properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
-)
-```
-
-## Troubleshooting
-
-### I get an error about dial-out not being enabled
-
-- Check that your room has `enable_dialout=True` set
-- Check that your meeting token is an owner token (The bot does this for you automatically)
-- Check that you have purchased a phone number to ring from
-- Check that the phone number you are trying to ring is correct, and is a US or Canadian number.
-
-### The bot doesn't detect my voicemail
-
-- The bot should be smart enough to detect variations of certain patterns,
-- If your voicemail machine doesn't follow the example patterns, add the pattern to the LLM prompt
-
-### Call connects but no bot is heard
-
-- Ensure your Daily API key is correct and has SIP capabilities
-- Verify that the Cartesia API key and voice ID are correct
-
-### Bot starts but disconnects immediately
-
-- Check the Daily logs for any error messages
-- Ensure your server has stable internet connectivity
diff --git a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/bot.py b/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/bot.py
deleted file mode 100644
index d4c99831c..000000000
--- a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/bot.py
+++ /dev/null
@@ -1,318 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import argparse
-import asyncio
-import json
-import os
-import sys
-from typing import Any
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import EndTaskFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.frame_processor import FrameDirection
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.google.google import GoogleLLMContext
-from pipecat.services.google.llm import GoogleLLMService
-from pipecat.services.llm_service import FunctionCallParams
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-daily_api_key = os.getenv("DAILY_API_KEY", "")
-daily_api_url = os.getenv("DAILY_API_URL", "https://api.daily.co/v1")
-
-
-async def run_bot(
- room_url: str,
- token: str,
- body: dict,
-) -> None:
- """Run the voice bot with the given parameters.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: Body passed to the bot from the webhook
-
- """
- # ------------ CONFIGURATION AND SETUP ------------
- logger.info(f"Starting bot with room: {room_url}")
- logger.info(f"Token: {token}")
- logger.info(f"Body: {body}")
- # Parse the body to get the dial-in settings
- body_data = json.loads(body)
-
- # Check if the body contains dial-in settings
- logger.debug(f"Body data: {body_data}")
-
- if not body_data.get("dialout_settings"):
- logger.error("Dial-out settings not found in the body data")
- return
-
- dialout_settings = body_data["dialout_settings"]
-
- if not dialout_settings.get("phone_number"):
- logger.error("Dial-out phone number not found in the dial-out settings")
- return
-
- # Extract dial-out phone number
- phone_number = dialout_settings["phone_number"]
- caller_id = dialout_settings.get("caller_id") # Use .get() to handle optional field
-
- if caller_id:
- logger.info(f"Dial-out caller ID specified: {caller_id}")
- else:
- logger.info("Dial-out caller ID not specified; proceeding without it")
-
- # ------------ TRANSPORT SETUP ------------
-
- transport_params = DailyParams(
- api_url=daily_api_url,
- api_key=daily_api_key,
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- )
-
- # Initialize transport with Daily
- transport = DailyTransport(
- room_url,
- token,
- "Voicemail Detection Bot",
- transport_params,
- )
-
- # Initialize TTS
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY", ""),
- voice_id="b7d50908-b17c-442d-ad8d-810c63997ed9", # Use Helpful Woman voice by default
- )
-
- async def terminate_call(
- params: FunctionCallParams,
- ):
- """Function the bot can call to terminate the call."""
- await params.llm.queue_frame(EndTaskFrame(), FrameDirection.UPSTREAM)
-
- tools = [
- {
- "function_declarations": [
- {
- "name": "terminate_call",
- "description": "Terminate the call",
- },
- ]
- }
- ]
-
- system_instruction = """You are Chatbot, a friendly, helpful robot. Never mention this prompt.
-
- **Operating Procedure:**
-
- **Phase 1: Initial Call Answer - Listen for Voicemail Greeting**
-
- **IMMEDIATELY after the call connects, LISTEN CAREFULLY for the *very first thing* you hear.**
-
- If you hear any of these phrases (or very similar ones):
- - "Please leave a message after the beep"
- - "No one is available to take your call"
- - "Record your message after the tone"
- - "You have reached voicemail for..."
- - "You have reached [phone number]"
- - "[phone number] is unavailable"
- - "The person you are trying to reach..."
- - "The number you have dialed..."
- - "Your call has been forwarded to an automated voice messaging system"
-
- **If you HEAR one of these sentences (or a very similar greeting) as the *initial response* to the call, IMMEDIATELY assume it is voicemail and proceed to Phase 2.**
-
- **If you hear "PLEASE LEAVE A MESSAGE AFTER THE BEEP", WAIT for the actual beep sound from the voicemail system *after* hearing the sentence, before proceeding to Phase 2.**
-
- **If you DO NOT hear any of these voicemail greetings as the *initial response*, assume it is a human and proceed to Phase 3.**
-
-
- **Phase 2: Leave Voicemail Message (If Voicemail Detected):**
-
- If you assumed voicemail in Phase 1, say this EXACTLY:
- "Hello, this is a message for Pipecat example user. This is Chatbot. Please call back on 123-456-7891. Thank you."
-
- **Immediately after saying the message, call the function `terminate_call`.**
- **DO NOT SAY ANYTHING ELSE. SILENCE IS REQUIRED AFTER `terminate_call`.**
-
-
- **Phase 3: Human Interaction (If No Voicemail Greeting Detected in Phase 1):**
-
- If you did not detect a voicemail greeting in Phase 1 and a human answers, say:
- "Oh, hello! I'm a friendly chatbot. Is there anything I can help you with?"
-
- Keep your responses **short and helpful.**
-
- When the person indicates they're done with the conversation by saying something like:
- - "Goodbye"
- - "That's all"
- - "I'm done"
- - "Thank you, that's all I needed"
-
-
- THEN say: "Thank you for chatting. Goodbye!" and call the terminate_call function.
-
- **Then, immediately call the function `terminate_call`.**
-
-
- **VERY IMPORTANT RULES - DO NOT DO THESE THINGS:**
-
- * **DO NOT SAY "Please leave a message after the beep."**
- * **DO NOT SAY "No one is available to take your call."**
- * **DO NOT SAY "Record your message after the tone."**
- * **DO NOT SAY ANY voicemail greeting yourself.**
- * **Only check for voicemail greetings in Phase 1, *immediately after the call connects*.**
- * **After voicemail or human interaction, ALWAYS call `terminate_call` immediately.**
- * **Do not speak after calling `terminate_call`.**
- * Your speech will be audio, so use simple language without special characters.
- """
-
- llm = GoogleLLMService(
- model="models/gemini-2.0-flash-001", # Full model for better conversation
- api_key=os.getenv("GOOGLE_API_KEY"),
- system_instruction=system_instruction,
- tools=tools,
- )
- llm.register_function("terminate_call", terminate_call)
-
- context = GoogleLLMContext()
-
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- context_aggregator.user(), # User responses
- llm, # LLM
- tts, # TTS
- transport.output(), # Transport bot output
- context_aggregator.assistant(), # Assistant spoken responses
- ]
- )
-
- # Create pipeline task
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # ------------ RETRY LOGIC VARIABLES ------------
- max_retries = 5
- retry_count = 0
- dialout_successful = False
-
- # Build dialout parameters conditionally
- dialout_params = {"phoneNumber": phone_number}
- if caller_id:
- dialout_params["callerId"] = caller_id
- logger.debug(f"Including caller ID in dialout: {caller_id}")
-
- logger.debug(f"Dialout parameters: {dialout_params}")
-
- async def attempt_dialout():
- """Attempt to start dialout with retry logic."""
- nonlocal retry_count, dialout_successful
-
- if retry_count < max_retries and not dialout_successful:
- retry_count += 1
- logger.info(
- f"Attempting dialout (attempt {retry_count}/{max_retries}) to: {phone_number}"
- )
- await transport.start_dialout(dialout_params)
- else:
- logger.error(f"Maximum retry attempts ({max_retries}) reached. Giving up on dialout.")
-
- # ------------ EVENT HANDLERS ------------
-
- @transport.event_handler("on_joined")
- async def on_joined(transport, data):
- # Start initial dialout attempt
- logger.debug(f"Dialout settings detected; starting dialout to number: {phone_number}")
- await attempt_dialout()
-
- @transport.event_handler("on_dialout_connected")
- async def on_dialout_connected(transport, data):
- logger.debug(f"Dial-out connected: {data}")
-
- @transport.event_handler("on_dialout_answered")
- async def on_dialout_answered(transport, data):
- nonlocal dialout_successful
- logger.debug(f"Dial-out answered: {data}")
- dialout_successful = True # Mark as successful to stop retries
- # Automatically start capturing transcription for the participant
- await transport.capture_participant_transcription(data["sessionId"])
- # The bot will wait to hear the user before the bot speaks
-
- @transport.event_handler("on_dialout_error")
- async def on_dialout_error(transport, data: Any):
- logger.error(f"Dial-out error (attempt {retry_count}/{max_retries}): {data}")
-
- if retry_count < max_retries:
- logger.info(f"Retrying dialout")
- await attempt_dialout()
- else:
- logger.error(f"All {max_retries} dialout attempts failed. Stopping bot.")
- await task.cancel()
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.debug(f"First participant joined: {participant['id']}")
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.debug(f"Participant left: {participant}, reason: {reason}")
- await task.cancel()
-
- # ------------ RUN PIPELINE ------------
-
- runner = PipelineRunner()
- await runner.run(task)
-
-
-# ------------ SCRIPT ENTRY POINT ------------
-
-
-async def main():
- """Parse command line arguments and run the bot."""
- parser = argparse.ArgumentParser(description="Simple Dial-out Bot")
- parser.add_argument("-u", "--url", type=str, help="Room URL")
- parser.add_argument("-t", "--token", type=str, help="Room Token")
- parser.add_argument("-b", "--body", type=str, help="JSON configuration string")
-
- args = parser.parse_args()
-
- logger.debug(f"url: {args.url}")
- logger.debug(f"token: {args.token}")
- logger.debug(f"body: {args.body}")
- if not all([args.url, args.token, args.body]):
- logger.error("All arguments (-u, -t, -b) are required")
- parser.print_help()
- sys.exit(1)
-
- await run_bot(args.url, args.token, args.body)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/env.example b/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/env.example
deleted file mode 100644
index 78f2b2613..000000000
--- a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/env.example
+++ /dev/null
@@ -1,7 +0,0 @@
-# Daily credentials
-DAILY_API_KEY=your_daily_api_key
-DAILY_API_URL=https://api.daily.co/v1
-
-# Service keys
-GOOGLE_API_KEY=your_google_api_key
-CARTESIA_API_KEY=your_cartesia_api_key
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/requirements.txt b/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/requirements.txt
deleted file mode 100644
index d40b48761..000000000
--- a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-pipecat-ai[daily,cartesia,google,silero]
-fastapi==0.115.6
-uvicorn
-python-dotenv
-python-multipart
-aiohttp
diff --git a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/server.py b/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/server.py
deleted file mode 100644
index 4aed288fc..000000000
--- a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/server.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""server.py.
-
-Webhook server to handle webhook coming from Daily, create a Daily room and start the bot.
-"""
-
-import json
-import os
-import shlex
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.responses import JSONResponse
-from utils.daily_helpers import create_daily_room
-
-load_dotenv()
-
-# ----------------- API ----------------- #
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- # Create aiohttp session to be used for Daily API calls
- app.state.session = aiohttp.ClientSession()
- yield
- # Close session when shutting down
- await app.state.session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-
-@app.post("/start")
-async def handle_incoming_daily_webhook(request: Request) -> JSONResponse:
- """Handle dial-out request."""
- print("Received webhook from Daily")
-
- # Get the dial-in properties from the request
- try:
- data = await request.json()
- if "test" in data:
- # Pass through any webhook checks
- return JSONResponse({"test": True})
-
- if not data["dialout_settings"]:
- raise HTTPException(
- status_code=400, detail="Missing 'dialout_settings' in the request body"
- )
-
- if not data["dialout_settings"].get("phone_number"):
- raise HTTPException(
- status_code=400, detail="Missing 'phone_number' in dialout_settings"
- )
-
- # Extract the phone number we want to dial out to
- caller_phone = str(data["dialout_settings"]["phone_number"])
- print(f"Processing call to {caller_phone}")
-
- # Create a Daily room with dial-in capabilities
- try:
- room_details = await create_daily_room(request.app.state.session, caller_phone)
- except Exception as e:
- print(f"Error creating Daily room: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to create Daily room: {str(e)}")
-
- room_url = room_details["room_url"]
- token = room_details["token"]
- print(f"Created Daily room: {room_url} with token: {token}")
-
- body_json = json.dumps(data)
-
- bot_cmd = f"python3 -m bot -u {room_url} -t {token} -b {shlex.quote(body_json)}"
-
- try:
- # CHANGE: Keep stdout/stderr for debugging
- # Start the bot in the background but capture output
- subprocess.Popen(
- bot_cmd,
- shell=True,
- # Don't redirect output so we can see logs
- # stdout=subprocess.DEVNULL,
- # stderr=subprocess.DEVNULL
- )
- print(f"Started bot process with command: {bot_cmd}")
- except Exception as e:
- print(f"Error starting bot: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to start bot: {str(e)}")
-
- except HTTPException:
- raise
- except Exception as e:
- print(f"Unexpected error: {str(e)}")
- raise HTTPException(status_code=500, detail=f"Server error: {str(e)}")
-
- # Grab a token for the user to join with
- return JSONResponse({"room_url": room_url, "token": token})
-
-
-@app.get("/health")
-async def health_check():
- """Simple health check endpoint."""
- return {"status": "healthy"}
-
-
-# ----------------- Main ----------------- #
-
-
-if __name__ == "__main__":
- # Run the server
- port = int(os.getenv("PORT", "7860"))
- print(f"Starting server on port {port}")
- uvicorn.run("server:app", host="0.0.0.0", port=port, reload=True)
diff --git a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/utils/daily_helpers.py b/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/utils/daily_helpers.py
deleted file mode 100644
index 6451fc4c4..000000000
--- a/examples/phone-chatbot/daily-pstn-simple-voicemail-detection/utils/daily_helpers.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Helper functions for interacting with the Daily API."""
-
-import os
-from typing import Dict, Optional
-
-import aiohttp
-from dotenv import load_dotenv
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomParams,
- DailyRoomProperties,
- DailyRoomSipParams,
-)
-
-load_dotenv()
-
-
-# Initialize Daily API helper
-async def get_daily_helper(session: Optional[aiohttp.ClientSession] = None) -> DailyRESTHelper:
- """Get a Daily REST helper with the configured API key."""
- if session is None:
- session = aiohttp.ClientSession()
-
- return DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=session,
- )
-
-
-async def create_daily_room(
- session: Optional[aiohttp.ClientSession] = None, caller_phone: str = "unknown-caller"
-) -> Dict[str, str]:
- """Create a Daily room with SIP capabilities for phone calls.
-
- Args:
- session: Optional aiohttp session to use for API calls
- caller_phone: The phone number of the caller to use in display name
-
- Returns:
- Dictionary with room URL, token, and SIP endpoint
- """
- daily_helper = await get_daily_helper(session)
-
- # Configure SIP parameters
- sip_params = DailyRoomSipParams(
- display_name=caller_phone,
- video=False,
- sip_mode="dial-in",
- num_endpoints=1,
- )
-
- # Create room properties with SIP enabled
- properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
- )
-
- # Create room parameters
- params = DailyRoomParams(properties=properties)
-
- # Create the room
- try:
- room = await daily_helper.create_room(params=params)
- print(f"Created room: {room.url} with SIP endpoint: {room.config.sip_endpoint}")
-
- # Get token for the bot to join
- token = await daily_helper.get_token(room.url, 24 * 60 * 60) # 24 hours validity
-
- return {"room_url": room.url, "token": token, "sip_endpoint": room.config.sip_endpoint}
- except Exception as e:
- print(f"Error creating room: {e}")
- raise
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-in/README.md b/examples/phone-chatbot/daily-twilio-sip-dial-in/README.md
deleted file mode 100644
index 1d4cfb325..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-in/README.md
+++ /dev/null
@@ -1,138 +0,0 @@
-# Daily + Twilio SIP dial-in Voice Bot
-
-This project demonstrates how to create a voice bot that can receive phone calls via Twilio and use Daily's SIP capabilities to enable voice conversations.
-
-## How It Works
-
-1. Twilio receives an incoming call to your phone number
-2. Twilio calls your webhook server (`/start` endpoint)
-3. The server creates a Daily room with SIP capabilities
-4. The server starts the bot process with the room details
-5. The caller is put on hold with music
-6. The bot joins the Daily room and signals readiness
-7. Twilio forwards the call to Daily's SIP endpoint
-8. The caller and bot are connected, and the bot handles the conversation
-
-## Prerequisites
-
-- A Daily account with an API key
-- A Twilio account with a phone number that supports voice
-- OpenAI API key for the bot's intelligence
-- Cartesia API key for text-to-speech
-
-## Setup
-
-1. Create a virtual environment and install dependencies
-
-```bash
-python -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-pip install -r requirements.txt
-```
-
-2. Set up environment variables
-
-Copy the example file and fill in your API keys:
-
-```bash
-cp .env.example .env
-# Edit .env with your API keys
-```
-
-3. Configure your Twilio webhook
-
-In the Twilio console:
-
-- Go to your phone number's configuration
-- Set the webhook for "A Call Comes In" to your server's URL + "/start"
-- For local testing, you can use ngrok to expose your local server
-
-```bash
-ngrok http 7860
-# Then use the provided URL (e.g., https://abc123.ngrok.io/start) in Twilio
-```
-
-## Running the Server
-
-Start the webhook server:
-
-```bash
-python server.py
-```
-
-## Testing
-
-Call your Twilio phone number. The system should answer the call, put you on hold briefly, then connect you with the bot.
-
-## Customizing the Bot
-
-You can customize the bot's behavior by modifying the system prompt in `bot.py`.
-
-### Changing the Hold Music
-
-To change the ringing sound or hold music that callers hear while waiting to be connected to the bot, update the URL in `server.py`:
-
-```python
-resp = VoiceResponse()
-resp.play(
- url="https://your-custom-audio-file-url.mp3",
- loop=10,
-)
-```
-
-> Read [Twilio's guide](https://www.twilio.com/en-us/blog/adding-mp3-to-voice-call-using-twilio) on how to set up an mp3 in a voice call.
-
-## Handling Multiple SIP Endpoints
-
-The bot is configured to handle multiple `on_dialin_ready` events that might occur with multiple SIP endpoints. It ensures that each call is only forwarded once using a simple flag:
-
-```python
-# Flag to track if call has been forwarded
-call_already_forwarded = False
-
-@transport.event_handler("on_dialin_ready")
-async def on_dialin_ready(transport, cdata):
- nonlocal call_already_forwarded
-
- # Skip if already forwarded
- if call_already_forwarded:
- logger.info("Call already forwarded, ignoring this event.")
- return
-
- # ... forwarding code ...
- call_already_forwarded = True
-```
-
-Note that normally calls only require a single SIP endpoint. If you are planning to forward the call to a different number, you will need to set up 2 SIP endpoints: one for the initial call and one for the forwarded call. IMPORTANT: ensure that your `on_dialin_ready` handler only handles the first call.
-
-## Daily SIP Configuration
-
-The bot configures Daily rooms with SIP capabilities using these settings:
-
-```python
-sip_params = DailyRoomSipParams(
- display_name="phone-user", # This will show up in the Daily UI; optional display the dialer's number
- video=False, # Audio-only call
- sip_mode="dial-in", # For receiving calls (vs. dial-out)
- num_endpoints=1, # Number of SIP endpoints to create
-)
-```
-
-## Troubleshooting
-
-### Call is not being answered
-
-- Check that your Twilio webhook is correctly configured
-- Verify your Twilio account has sufficient funds
-- Check the logs of both the server and bot processes
-
-### Call connects but no bot is heard
-
-- Ensure your Daily API key is correct and has SIP capabilities
-- Check that the SIP endpoint is being correctly passed to the bot
-- Verify that the Cartesia API key and voice ID are correct
-
-### Bot starts but disconnects immediately
-
-- Check the Daily and Twilio logs for any error messages
-- Ensure your server has stable internet connectivity
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-in/bot.py b/examples/phone-chatbot/daily-twilio-sip-dial-in/bot.py
deleted file mode 100644
index 0b5f935aa..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-in/bot.py
+++ /dev/null
@@ -1,184 +0,0 @@
-"""Twilio + Daily voice bot implementation."""
-
-import argparse
-import asyncio
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-from twilio.rest import Client
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-# Setup logging
-load_dotenv()
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-# Initialize Twilio client
-twilio_client = Client(os.getenv("TWILIO_ACCOUNT_SID"), os.getenv("TWILIO_AUTH_TOKEN"))
-
-
-async def run_bot(room_url: str, token: str, call_id: str, sip_uri: str) -> None:
- """Run the voice bot with the given parameters.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- call_id: The Twilio call ID
- sip_uri: The Daily SIP URI for forwarding the call
- """
- logger.info(f"Starting bot with room: {room_url}")
- logger.info(f"SIP endpoint: {sip_uri}")
-
- call_already_forwarded = False
-
- # Setup the Daily transport
- transport = DailyTransport(
- room_url,
- token,
- "Phone Bot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- transcription_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- # Setup TTS service
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- # Setup LLM service
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- # Initialize LLM context with system prompt
- messages = [
- {
- "role": "system",
- "content": (
- "You are a friendly phone assistant. Your responses will be read aloud, "
- "so keep them concise and conversational. Avoid special characters or "
- "formatting. Begin by greeting the caller and asking how you can help them today."
- ),
- },
- ]
-
- # Setup the conversational context
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- # Build the pipeline
- pipeline = Pipeline(
- [
- transport.input(),
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- # Create the pipeline task
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # Handle participant joining
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.info(f"First participant joined: {participant['id']}")
- await transport.capture_participant_transcription(participant["id"])
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- # Handle participant leaving
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.info(f"Participant left: {participant['id']}, reason: {reason}")
- await task.cancel()
-
- # Handle call ready to forward
- @transport.event_handler("on_dialin_ready")
- async def on_dialin_ready(transport, cdata):
- nonlocal call_already_forwarded
-
- # We only want to forward the call once
- # The on_dialin_ready event will be triggered for each sip endpoint provisioned
- if call_already_forwarded:
- logger.warning("Call already forwarded, ignoring this event.")
- return
-
- logger.info(f"Forwarding call {call_id} to {sip_uri}")
-
- try:
- # Update the Twilio call with TwiML to forward to the Daily SIP endpoint
- twilio_client.calls(call_id).update(
- twiml=f"{sip_uri} "
- )
- logger.info("Call forwarded successfully")
- call_already_forwarded = True
- except Exception as e:
- logger.error(f"Failed to forward call: {str(e)}")
- raise
-
- @transport.event_handler("on_dialin_connected")
- async def on_dialin_connected(transport, data):
- logger.debug(f"Dial-in connected: {data}")
-
- @transport.event_handler("on_dialin_stopped")
- async def on_dialin_stopped(transport, data):
- logger.debug(f"Dial-in stopped: {data}")
-
- @transport.event_handler("on_dialin_error")
- async def on_dialin_error(transport, data):
- logger.error(f"Dial-in error: {data}")
- # If there is an error, the bot should leave the call
- # This may be also handled in on_participant_left with
- # await task.cancel()
-
- @transport.event_handler("on_dialin_warning")
- async def on_dialin_warning(transport, data):
- logger.warning(f"Dial-in warning: {data}")
-
- # Run the pipeline
- runner = PipelineRunner()
- await runner.run(task)
-
-
-async def main():
- """Parse command line arguments and run the bot."""
- parser = argparse.ArgumentParser(description="Daily + Twilio Voice Bot")
- parser.add_argument("-u", type=str, required=True, help="Daily room URL")
- parser.add_argument("-t", type=str, required=True, help="Daily room token")
- parser.add_argument("-i", type=str, required=True, help="Twilio call ID")
- parser.add_argument("-s", type=str, required=True, help="Daily SIP URI")
-
- args = parser.parse_args()
-
- # Validate required arguments
- if not all([args.u, args.t, args.i, args.s]):
- logger.error("All arguments (-u, -t, -i, -s) are required")
- parser.print_help()
- sys.exit(1)
-
- await run_bot(args.u, args.t, args.i, args.s)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-in/env.example b/examples/phone-chatbot/daily-twilio-sip-dial-in/env.example
deleted file mode 100644
index 98589e916..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-in/env.example
+++ /dev/null
@@ -1,11 +0,0 @@
-# Daily credentials
-DAILY_API_KEY=your_daily_api_key
-DAILY_API_URL=https://api.daily.co/v1
-
-# Twilio credentials
-TWILIO_ACCOUNT_SID=your_twilio_account_sid
-TWILIO_AUTH_TOKEN=your_twilio_auth_token
-
-# Service keys
-OPENAI_API_KEY=your_openai_api_key
-CARTESIA_API_KEY=your_cartesia_api_key
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-in/requirements.txt b/examples/phone-chatbot/daily-twilio-sip-dial-in/requirements.txt
deleted file mode 100644
index 1ba848312..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-in/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-pipecat-ai[daily,cartesia,openai,silero]
-fastapi==0.115.6
-uvicorn
-python-dotenv
-twilio
-aiohttp
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-in/server.py b/examples/phone-chatbot/daily-twilio-sip-dial-in/server.py
deleted file mode 100644
index 4728e980d..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-in/server.py
+++ /dev/null
@@ -1,116 +0,0 @@
-"""Webhook server to handle Twilio calls and start the voice bot."""
-
-import os
-import shlex
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.responses import PlainTextResponse
-from twilio.twiml.voice_response import VoiceResponse
-from utils.daily_helpers import create_sip_room
-
-# Load environment variables
-load_dotenv()
-
-
-# Initialize FastAPI app with aiohttp session
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- # Create aiohttp session to be used for Daily API calls
- app.state.session = aiohttp.ClientSession()
- yield
- # Close session when shutting down
- await app.state.session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-
-@app.post("/start", response_class=PlainTextResponse)
-async def handle_call(request: Request):
- """Handle incoming Twilio call webhook."""
- print("Received call webhook from Twilio")
-
- try:
- # Get form data from Twilio webhook
- form_data = await request.form()
- data = dict(form_data)
-
- # Extract call ID (required to forward the call later)
- call_sid = data.get("CallSid")
- if not call_sid:
- raise HTTPException(status_code=400, detail="Missing CallSid in request")
-
- # Extract the caller's phone number
- caller_phone = str(data.get("From", "unknown-caller"))
- print(f"Processing call with ID: {call_sid} from {caller_phone}")
-
- # Create a Daily room with SIP capabilities
- try:
- room_details = await create_sip_room(request.app.state.session, caller_phone)
- except Exception as e:
- print(f"Error creating Daily room: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to create Daily room: {str(e)}")
-
- # Extract necessary details
- room_url = room_details["room_url"]
- token = room_details["token"]
- sip_endpoint = room_details["sip_endpoint"]
-
- # Make sure we have a SIP endpoint
- if not sip_endpoint:
- raise HTTPException(status_code=500, detail="No SIP endpoint provided by Daily")
-
- # Start the bot process
- bot_cmd = f"python bot.py -u {room_url} -t {token} -i {call_sid} -s {sip_endpoint}"
- try:
- # Use shlex to properly split the command for subprocess
- cmd_parts = shlex.split(bot_cmd)
-
- # CHANGE: Keep stdout/stderr for debugging
- # Start the bot in the background but capture output
- subprocess.Popen(
- cmd_parts,
- # Don't redirect output so we can see logs
- # stdout=subprocess.DEVNULL,
- # stderr=subprocess.DEVNULL
- )
- print(f"Started bot process with command: {bot_cmd}")
- except Exception as e:
- print(f"Error starting bot: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to start bot: {str(e)}")
-
- # Generate TwiML response to put the caller on hold with music
- # You can replace the URL with your own music file
- # or use Twilio's built-in music on hold
- # https://www.twilio.com/docs/voice/twiml/play#music-on-hold
- resp = VoiceResponse()
- resp.play(
- url="https://therapeutic-crayon-2467.twil.io/assets/US_ringback_tone.mp3",
- loop=10,
- )
-
- return str(resp)
-
- except HTTPException:
- raise
- except Exception as e:
- print(f"Unexpected error: {str(e)}")
- raise HTTPException(status_code=500, detail=f"Server error: {str(e)}")
-
-
-@app.get("/health")
-async def health_check():
- """Simple health check endpoint."""
- return {"status": "healthy"}
-
-
-if __name__ == "__main__":
- # Run the server
- port = int(os.getenv("PORT", "7860"))
- print(f"Starting server on port {port}")
- uvicorn.run("server:app", host="0.0.0.0", port=port, reload=True)
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-in/utils/daily_helpers.py b/examples/phone-chatbot/daily-twilio-sip-dial-in/utils/daily_helpers.py
deleted file mode 100644
index ab3148b42..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-in/utils/daily_helpers.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Helper functions for interacting with the Daily API."""
-
-import os
-from typing import Dict, Optional
-
-import aiohttp
-from dotenv import load_dotenv
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomParams,
- DailyRoomProperties,
- DailyRoomSipParams,
-)
-
-load_dotenv()
-
-
-# Initialize Daily API helper
-async def get_daily_helper(session: Optional[aiohttp.ClientSession] = None) -> DailyRESTHelper:
- """Get a Daily REST helper with the configured API key."""
- if session is None:
- session = aiohttp.ClientSession()
-
- return DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=session,
- )
-
-
-async def create_sip_room(
- session: Optional[aiohttp.ClientSession] = None, caller_phone: str = "unknown-caller"
-) -> Dict[str, str]:
- """Create a Daily room with SIP capabilities for phone calls.
-
- Args:
- session: Optional aiohttp session to use for API calls
- caller_phone: The phone number of the caller to use in display name
-
- Returns:
- Dictionary with room URL, token, and SIP endpoint
- """
- daily_helper = await get_daily_helper(session)
-
- # Configure SIP parameters
- sip_params = DailyRoomSipParams(
- display_name=caller_phone,
- video=False,
- sip_mode="dial-in",
- num_endpoints=1,
- )
-
- # Create room properties with SIP enabled
- properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
- )
-
- # Create room parameters
- params = DailyRoomParams(properties=properties)
-
- # Create the room
- try:
- room = await daily_helper.create_room(params=params)
- print(f"Created room: {room.url} with SIP endpoint: {room.config.sip_endpoint}")
-
- # Get token for the bot to join
- token = await daily_helper.get_token(room.url, 24 * 60 * 60) # 24 hours validity
-
- return {"room_url": room.url, "token": token, "sip_endpoint": room.config.sip_endpoint}
- except Exception as e:
- print(f"Error creating room: {e}")
- raise
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-out/README.md b/examples/phone-chatbot/daily-twilio-sip-dial-out/README.md
deleted file mode 100644
index 8cdd52b86..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-out/README.md
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-# Daily + Twilio SIP dial-out Voice Bot
-
-This project demonstrates how to create a voice bot that can make phone calls via Twilio and use Daily's SIP capabilities to enable voice conversations.
-
-## How it works
-
-1. The server file receives a curl request with the SIP uri to dial out to
-2. The server creates a Daily room with SIP capabilities
-3. The server starts the bot process with the room details
-4. When the bot has joined, it starts the dial-out process and dials out to the SIP uri provided in the curl request
-5. Twilio receives the request, and the provided TWIML processes the SIP uri
-6. Twilio then rings the number found within the SIP uri
-7. When the user answers the phone, the user is brought into the call
-8. The end user and the bot are connected, and the bot handles the conversation
-
-## Prerequisites
-
-- A Daily account with an API key
-- A Twilio account with a phone number that supports voice and a correctly configured SIP domain
-- OpenAI API key for the bot's intelligence
-- Cartesia API key for text-to-speech
-
-## Setup
-
-1. Create a virtual environment and install dependencies
-
-```bash
-python -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-pip install -r requirements.txt
-```
-
-2. Set up environment variables
-
-Copy the example file and fill in your API keys:
-
-```bash
-cp .env.example .env
-# Edit .env with your API keys
-```
-
-3. Create a TwiML Bin
-
-Visit this link to create your [TwiML Bin](https://www.twilio.com/docs/serverless/twiml-bins)
-
-- Login to the account that has your purchased Twilio phone number
-- Press the plus button on the TwiML Bin dashboard to write a new TwiML that Twilio will host for you
-- Give it a friendly name. For example "daily sip uri twiml bin"
-- For the TWIML code, use something like:
-
-```xml
-
-
- {{#e164}}{{To}}{{/e164}}
-
-```
-
-- callerId must be a valid number that you own on [Twilio](https://console.twilio.com/us1/develop/phone-numbers/manage/incoming)
-- Save the file. We will use this when creating the SIP domain
-
-4. Create and configure a programmable SIP domain
-
-- Visit this link to [create a new SIP domain:](https://console.twilio.com/us1/develop/voice/manage/sip-domains?frameUrl=%2Fconsole%2Fvoice%2Fsip%2Fendpoints%3Fx-target-region%3Dus1)
-- Press the plus button to create a new SIP domain
-- Give the SIP domain a friendly name. For example "Daily SIP domain"
-- Specify a SIP URI, for example "daily.sip.twilio.com"
-- Under "Voice Authentication", press the plus button next to IP Access Control Lists. We are going to white list the entire IP spectrum
-- Give it a friendly name such as "first half"
-- For CIDR Network Address specify 0.0.0.0 and for the subnet specify 1
-- Again, specify "first half" for the friendly name and click "Create ACL"
-- Now let's do the same again and add another IP Access Control List by pressing the plus button
-- Give it a friendly name such as "second half".
-- For the CIDR Network Address specify 128.0.0.0 and for the subnet specify 1
-- Lastly, specify the friendly name "second half" again
-- Make sure both IP Access control list appears selected in the dropdown
-- Under "Call Control Configuration", specify the following:
-- Configure with: Webhooks, TwiML Bins, Functions, Studio, Proxy
-- A call comes in: TwiML Bin > Select the name of the TwiML bin you made earlier
-- Leave everything else blank and scroll to the bottom of the page. Click save
-
-## Running the Server
-
-Start the webhook server:
-
-```bash
-python server.py
-```
-
-## Testing
-
-With server.py running, send the following curl command from your terminal:
-
-```bash
-curl -X POST "http://127.0.0.1:7860/start" \
- -H "Content-Type: application/json" \
- -d '{
- "dialout_settings": {
- "sip_uri": "sip:+1234567891@daily.sip.twilio.com"
- }
- }'
-```
-
-- Replace the phone number (Starting with +1) with the phone number you want to ring
-- Replace daily with the SIP domain you configured previously
-
-The server should make a room. The bot will join the room and then dial out to the SIP URI provided. Answer the call to speak with the bot.
-
-## Customizing the Bot
-
-You can customize the bot's behavior by modifying the system prompt in `bot.py`.
-
-## Handling Multiple SIP Endpoints
-
-Note that normally calls only require a single SIP endpoint. If you are planning to forward the call to a different number, you will need to set up 2 SIP endpoints: one for the initial call and one for the forwarded call.
-
-## Daily dial-out configuration
-
-The bot configures the Daily rooms with dial-out capabilities using these settings. Note: You also need dial-out to be enabled on the domain, as mentioned earlier on in the README.
-
-```python
-properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
-)
-```
-
-## Troubleshooting
-
-### I get an error about dial-out not being enabled
-
-- Check that your room has `enable_dialout=True` set
-- Check that your meeting token is an owner token (The bot does this for you automatically)
-- Check that the SIP URI is correct
-- Check that the phone number you are trying to ring is correct
-
-### I'm stuck setting up my Twilio account
-
-- You can reference this [Notion doc](https://dailyco.notion.site/PUBLIC-Doc-Integration-Twilio-PSTN-Daily-s-SIP-Dialout-1cfdaed630f5458d9d4fc0e3f29ec559) to find more information on how to set up Twilio, as well as use webhooks instead of TwiML Bins
-
-### Call connects but no bot is heard
-
-- Ensure your Daily API key is correct and has SIP capabilities
-- Verify that the Cartesia API key and voice ID are correct
-
-### Bot starts but disconnects immediately
-
-- Check the Daily logs for any error messages
-- Ensure your server has stable internet connectivity
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-out/bot.py b/examples/phone-chatbot/daily-twilio-sip-dial-out/bot.py
deleted file mode 100644
index e1056dcb8..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-out/bot.py
+++ /dev/null
@@ -1,234 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""simple_dialout.py.
-
-Simple Dial-out Bot.
-"""
-
-import argparse
-import asyncio
-import json
-import os
-import sys
-from typing import Any
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-daily_api_key = os.getenv("DAILY_API_KEY", "")
-daily_api_url = os.getenv("DAILY_API_URL", "https://api.daily.co/v1")
-
-
-async def run_bot(
- room_url: str,
- token: str,
- body: dict,
-) -> None:
- """Run the voice bot with the given parameters.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: Body passed to the bot from the webhook
-
- """
- # ------------ CONFIGURATION AND SETUP ------------
- logger.info(f"Starting bot with room: {room_url}")
- logger.info(f"Token: {token}")
- logger.info(f"Body: {body}")
- # Parse the body to get the dial-in settings
- body_data = json.loads(body)
-
- # Check if the body contains dial-in settings
- logger.debug(f"Body data: {body_data}")
-
- if not body_data.get("dialout_settings"):
- logger.error("Dial-out settings not found in the body data")
- return
-
- dialout_settings = body_data["dialout_settings"]
-
- if not dialout_settings.get("sip_uri"):
- logger.error("Dial-out sip_uri not found in the dial-out settings")
- return
-
- # Extract sip_uri
- sip_uri = dialout_settings["sip_uri"]
-
- # ------------ TRANSPORT SETUP ------------
-
- transport_params = DailyParams(
- api_url=daily_api_url,
- api_key=daily_api_key,
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- )
-
- # Initialize transport with Daily
- transport = DailyTransport(
- room_url,
- token,
- "Phone Bot",
- transport_params,
- )
-
- # Initialize TTS
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY", ""),
- voice_id="b7d50908-b17c-442d-ad8d-810c63997ed9", # Use Helpful Woman voice by default
- )
-
- # ------------ LLM AND CONTEXT SETUP ------------
-
- # Initialize LLM
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- # Create system message and initialize messages list
- messages = [
- {
- "role": "system",
- "content": (
- "You are a friendly phone assistant. Your responses will be read aloud, "
- "so keep them concise and conversational. Avoid special characters or "
- "formatting. Begin by greeting the caller and asking how you can help them today."
- ),
- },
- ]
- # Initialize LLM context and aggregator
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- # ------------ PIPELINE SETUP ------------
-
- # Build pipeline
- pipeline = Pipeline(
- [
- transport.input(), # Transport user input
- context_aggregator.user(), # User responses
- llm, # LLM
- tts, # TTS
- transport.output(), # Transport bot output
- context_aggregator.assistant(), # Assistant spoken responses
- ]
- )
-
- # Create pipeline task
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # ------------ RETRY LOGIC VARIABLES ------------
- max_retries = 5
- retry_count = 0
- dialout_successful = False
-
- # Build dialout parameters conditionally
- dialout_params = {"sipUri": sip_uri}
-
- logger.debug(f"Dialout parameters: {dialout_params}")
-
- async def attempt_dialout():
- """Attempt to start dialout with retry logic."""
- nonlocal retry_count, dialout_successful
-
- if retry_count < max_retries and not dialout_successful:
- retry_count += 1
- logger.info(f"Attempting dialout (attempt {retry_count}/{max_retries}) to: {sip_uri}")
- await transport.start_dialout(dialout_params)
- else:
- logger.error(f"Maximum retry attempts ({max_retries}) reached. Giving up on dialout.")
-
- # ------------ EVENT HANDLERS ------------
-
- @transport.event_handler("on_joined")
- async def on_joined(transport, data):
- # Start initial dialout attempt
- logger.debug(f"Dialout settings detected; starting dialout to number: {sip_uri}")
- await attempt_dialout()
-
- @transport.event_handler("on_dialout_connected")
- async def on_dialout_connected(transport, data):
- logger.debug(f"Dial-out connected: {data}")
-
- @transport.event_handler("on_dialout_answered")
- async def on_dialout_answered(transport, data):
- nonlocal dialout_successful
- logger.debug(f"Dial-out answered: {data}")
- dialout_successful = True # Mark as successful to stop retries
- # Automatically start capturing transcription for the participant
- await transport.capture_participant_transcription(data["sessionId"])
- # The bot will wait to hear the user before the bot speaks
-
- @transport.event_handler("on_dialout_error")
- async def on_dialout_error(transport, data: Any):
- logger.error(f"Dial-out error (attempt {retry_count}/{max_retries}): {data}")
-
- if retry_count < max_retries:
- logger.info(f"Retrying dialout")
- await attempt_dialout()
- else:
- logger.error(f"All {max_retries} dialout attempts failed. Stopping bot.")
- await task.cancel()
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.debug(f"First participant joined: {participant['id']}")
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.debug(f"Participant left: {participant}, reason: {reason}")
- await task.cancel()
-
- # ------------ RUN PIPELINE ------------
-
- runner = PipelineRunner()
- await runner.run(task)
-
-
-async def main():
- """Parse command line arguments and run the bot."""
- parser = argparse.ArgumentParser(description="Simple Dial-out Bot")
- parser.add_argument("-u", "--url", type=str, help="Room URL")
- parser.add_argument("-t", "--token", type=str, help="Room Token")
- parser.add_argument("-b", "--body", type=str, help="JSON configuration string")
-
- args = parser.parse_args()
-
- logger.debug(f"url: {args.url}")
- logger.debug(f"token: {args.token}")
- logger.debug(f"body: {args.body}")
- if not all([args.url, args.token, args.body]):
- logger.error("All arguments (-u, -t, -b) are required")
- parser.print_help()
- sys.exit(1)
-
- await run_bot(args.url, args.token, args.body)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-out/env.example b/examples/phone-chatbot/daily-twilio-sip-dial-out/env.example
deleted file mode 100644
index f48a6a810..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-out/env.example
+++ /dev/null
@@ -1,7 +0,0 @@
-# Daily credentials
-DAILY_API_KEY=your_daily_api_key
-DAILY_API_URL=https://api.daily.co/v1
-
-# Service keys
-OPENAI_API_KEY=your_openai_api_key
-CARTESIA_API_KEY=your_cartesia_api_key
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-out/requirements.txt b/examples/phone-chatbot/daily-twilio-sip-dial-out/requirements.txt
deleted file mode 100644
index 858a8d7b6..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-out/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-pipecat-ai[daily,cartesia,elevenlabs,deepgram,openai,silero]
-fastapi==0.115.6
-uvicorn
-python-dotenv
-python-multipart
-aiohttp
\ No newline at end of file
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-out/server.py b/examples/phone-chatbot/daily-twilio-sip-dial-out/server.py
deleted file mode 100644
index 42591094d..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-out/server.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""server.py.
-
-Webhook server to handle webhook coming from Daily, create a Daily room and start the bot.
-"""
-
-import json
-import os
-import shlex
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.responses import JSONResponse
-from utils.daily_helpers import create_daily_room
-
-load_dotenv()
-
-# ----------------- API ----------------- #
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- # Create aiohttp session to be used for Daily API calls
- app.state.session = aiohttp.ClientSession()
- yield
- # Close session when shutting down
- await app.state.session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-
-def extract_phone_from_sip_uri(sip_uri):
- """Extract phone number from SIP URI.
-
- Args:
- sip_uri: SIP URI in format "sip:+17868748498@daily-twilio-integration.sip.twilio.com"
-
- Returns:
- Phone number string (e.g., "+17868748498") or None if invalid format
- """
- if not sip_uri or not isinstance(sip_uri, str):
- return None
-
- if sip_uri.startswith("sip:") and "@" in sip_uri:
- phone_part = sip_uri[4:] # Remove 'sip:' prefix
- caller_phone = phone_part.split("@")[0] # Get everything before '@'
- return caller_phone
- return None
-
-
-@app.post("/start")
-async def handle_incoming_daily_webhook(request: Request) -> JSONResponse:
- """Handle dial-out request."""
- print("Received webhook from Daily")
-
- # Get the dial-in properties from the request
- try:
- data = await request.json()
- if "test" in data:
- # Pass through any webhook checks
- return JSONResponse({"test": True})
-
- if not data["dialout_settings"]:
- raise HTTPException(
- status_code=400, detail="Missing 'dialout_settings' in the request body"
- )
-
- if not data["dialout_settings"].get("sip_uri"):
- raise HTTPException(status_code=400, detail="Missing 'sip_uri' in dialout_settings")
-
- # Extract the phone number we want to dial out to
- sip_uri = str(data["dialout_settings"]["sip_uri"])
- caller_phone = extract_phone_from_sip_uri(sip_uri)
- print(f"SIP URI: {sip_uri}")
- print(f"Processing sip call to {caller_phone}")
-
- # Create a Daily room with dial-in capabilities
- try:
- room_details = await create_daily_room(request.app.state.session, caller_phone)
- except Exception as e:
- print(f"Error creating Daily room: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to create Daily room: {str(e)}")
-
- room_url = room_details["room_url"]
- token = room_details["token"]
- print(f"Created Daily room: {room_url} with token: {token}")
-
- body_json = json.dumps(data)
-
- bot_cmd = f"python3 -m bot -u {room_url} -t {token} -b {shlex.quote(body_json)}"
-
- try:
- # CHANGE: Keep stdout/stderr for debugging
- # Start the bot in the background but capture output
- subprocess.Popen(
- bot_cmd,
- shell=True,
- # Don't redirect output so we can see logs
- # stdout=subprocess.DEVNULL,
- # stderr=subprocess.DEVNULL
- )
- print(f"Started bot process with command: {bot_cmd}")
- except Exception as e:
- print(f"Error starting bot: {e}")
- raise HTTPException(status_code=500, detail=f"Failed to start bot: {str(e)}")
-
- except HTTPException:
- raise
- except Exception as e:
- print(f"Unexpected error: {str(e)}")
- raise HTTPException(status_code=500, detail=f"Server error: {str(e)}")
-
- # Grab a token for the user to join with
- return JSONResponse({"room_url": room_url, "token": token})
-
-
-@app.get("/health")
-async def health_check():
- """Simple health check endpoint."""
- return {"status": "healthy"}
-
-
-# ----------------- Main ----------------- #
-
-
-if __name__ == "__main__":
- # Run the server
- port = int(os.getenv("PORT", "7860"))
- print(f"Starting server on port {port}")
- uvicorn.run("server:app", host="0.0.0.0", port=port, reload=True)
diff --git a/examples/phone-chatbot/daily-twilio-sip-dial-out/utils/daily_helpers.py b/examples/phone-chatbot/daily-twilio-sip-dial-out/utils/daily_helpers.py
deleted file mode 100644
index 6451fc4c4..000000000
--- a/examples/phone-chatbot/daily-twilio-sip-dial-out/utils/daily_helpers.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Helper functions for interacting with the Daily API."""
-
-import os
-from typing import Dict, Optional
-
-import aiohttp
-from dotenv import load_dotenv
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomParams,
- DailyRoomProperties,
- DailyRoomSipParams,
-)
-
-load_dotenv()
-
-
-# Initialize Daily API helper
-async def get_daily_helper(session: Optional[aiohttp.ClientSession] = None) -> DailyRESTHelper:
- """Get a Daily REST helper with the configured API key."""
- if session is None:
- session = aiohttp.ClientSession()
-
- return DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=session,
- )
-
-
-async def create_daily_room(
- session: Optional[aiohttp.ClientSession] = None, caller_phone: str = "unknown-caller"
-) -> Dict[str, str]:
- """Create a Daily room with SIP capabilities for phone calls.
-
- Args:
- session: Optional aiohttp session to use for API calls
- caller_phone: The phone number of the caller to use in display name
-
- Returns:
- Dictionary with room URL, token, and SIP endpoint
- """
- daily_helper = await get_daily_helper(session)
-
- # Configure SIP parameters
- sip_params = DailyRoomSipParams(
- display_name=caller_phone,
- video=False,
- sip_mode="dial-in",
- num_endpoints=1,
- )
-
- # Create room properties with SIP enabled
- properties = DailyRoomProperties(
- sip=sip_params,
- enable_dialout=True, # Needed for outbound calls if you expand the bot
- enable_chat=False, # No need for chat in a voice bot
- start_video_off=True, # Voice only
- )
-
- # Create room parameters
- params = DailyRoomParams(properties=properties)
-
- # Create the room
- try:
- room = await daily_helper.create_room(params=params)
- print(f"Created room: {room.url} with SIP endpoint: {room.config.sip_endpoint}")
-
- # Get token for the bot to join
- token = await daily_helper.get_token(room.url, 24 * 60 * 60) # 24 hours validity
-
- return {"room_url": room.url, "token": token, "sip_endpoint": room.config.sip_endpoint}
- except Exception as e:
- print(f"Error creating room: {e}")
- raise
diff --git a/examples/phone-chatbot/image.png b/examples/phone-chatbot/image.png
deleted file mode 100644
index 6c53d3743..000000000
Binary files a/examples/phone-chatbot/image.png and /dev/null differ
diff --git a/examples/plivo-chatbot/.gitignore b/examples/plivo-chatbot/.gitignore
deleted file mode 100644
index 2bc1403d1..000000000
--- a/examples/plivo-chatbot/.gitignore
+++ /dev/null
@@ -1,161 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-runpod.toml
diff --git a/examples/plivo-chatbot/Dockerfile b/examples/plivo-chatbot/Dockerfile
deleted file mode 100644
index 4f7a1960c..000000000
--- a/examples/plivo-chatbot/Dockerfile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Use an official Python runtime as a parent image
-FROM python:3.10-bullseye
-
-# Set the working directory in the container
-WORKDIR /plivo-chatbot
-
-# Copy the requirements file into the container
-COPY requirements.txt .
-
-# Install any needed packages specified in requirements.txt
-RUN pip install --no-cache-dir -r requirements.txt
-
-# Copy the current directory contents into the container
-COPY . .
-
-# Expose the desired port
-EXPOSE 8765
-
-# Run the application
-CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8765"]
diff --git a/examples/plivo-chatbot/README.md b/examples/plivo-chatbot/README.md
deleted file mode 100644
index f8d12e4b9..000000000
--- a/examples/plivo-chatbot/README.md
+++ /dev/null
@@ -1,128 +0,0 @@
-# Plivo Chatbot
-
-This project is a FastAPI-based chatbot that integrates with Plivo to handle WebSocket connections and provide real-time communication. The project includes endpoints for starting a call and handling WebSocket connections.
-
-## Table of Contents
-
-- [Features](#features)
-- [Requirements](#requirements)
-- [Installation](#installation)
-- [Configure Plivo URLs](#configure-plivo-urls)
-- [Running the Application](#running-the-application)
-- [Usage](#usage)
-
-## Features
-
-- **FastAPI**: A modern, fast (high-performance), web framework for building APIs with Python 3.6+.
-- **WebSocket Support**: Real-time communication using WebSockets.
-- **CORS Middleware**: Allowing cross-origin requests for testing.
-- **Dockerized**: Easily deployable using Docker.
-
-## Requirements
-
-- Python 3.10
-- Docker (for containerized deployment)
-- ngrok (for tunneling)
-- Plivo Account
-
-## Installation
-
-1. **Set up a virtual environment** (optional but recommended):
-
- ```sh
- python -m venv venv
- source venv/bin/activate # On Windows, use `venv\Scripts\activate`
- ```
-
-2. **Install dependencies**:
-
- ```sh
- pip install -r requirements.txt
- ```
-
-3. **Create .env**:
- Copy the example environment file and update with your settings:
-
- ```sh
- cp env.example .env
- ```
-
-4. **Install ngrok**:
- Follow the instructions on the [ngrok website](https://ngrok.com/download) to download and install ngrok.
-
-## Configure Plivo URLs
-
-1. **Start ngrok**:
- In a new terminal, start ngrok to tunnel the local server:
-
- ```sh
- ngrok http 8765
- ```
-
-2. **Update the Plivo Application**:
-
- - Go to your Plivo console and navigate to Voice > Applications > XML
- - Select "Add New Application" or edit an existing one
- - Set the Primary Answer URL to your ngrok URL (e.g., https:///)
- - Ensure the Answer Method is set to POST
- - Save the application
- - Configure your number to use the newly created (or updated) application
- - Phone Numbers > Active > Your number
- - Select Application Type: XML Application
- - Plivo Application: Your application
- - Click "Update" to save
-
-3. **Configure streams.xml**:
-
- - Copy the template file to create your local version:
- ```sh
- cp templates/streams.xml.template templates/streams.xml
- ```
- - In `templates/streams.xml`, replace `` with your ngrok URL (without `https://`)
- - The final URL should look like: `wss://abc123.ngrok.io/ws`
-
-4. **Assign the Application to a Plivo Number**:
- - Go to Phone Numbers > Your Numbers in the Plivo console
- - Edit your Plivo number
- - Select the application you created/updated in the previous step
- - Save the configuration
-
-## Running the Application
-
-Choose one of these two methods to run the application:
-
-### Using Python (Option 1)
-
-**Run the FastAPI application**:
-
-```sh
-# Make sure you're in the project directory and your virtual environment is activated
-python server.py
-```
-
-### Using Docker (Option 2)
-
-1. **Build the Docker image**:
-
- ```sh
- docker build -t plivo-chatbot .
- ```
-
-2. **Run the Docker container**:
- ```sh
- docker run -it --rm -p 8765:8765 plivo-chatbot
- ```
-
-The server will start on port 8765. Keep this running while you test with Plivo.
-
-## Usage
-
-To start a call, simply make a call to your configured Plivo phone number. The Answer URL will direct the call to your FastAPI application, which will handle it accordingly.
-
-## Key Differences from Twilio
-
-- Plivo uses `streamId` instead of `streamSid`
-- Plivo uses `callId` instead of `callSid`
-- Plivo uses `` element instead of ``
-- Plivo's Stream element has `bidirectional`, `keepCallAlive`, and `contentType` attributes
-- Plivo API authentication uses Auth ID and Auth Token (similar to Twilio's Account SID and Auth Token)
diff --git a/examples/plivo-chatbot/bot.py b/examples/plivo-chatbot/bot.py
deleted file mode 100644
index 88ce2c120..000000000
--- a/examples/plivo-chatbot/bot.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-import sys
-from typing import Optional
-
-from dotenv import load_dotenv
-from fastapi import WebSocket
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.serializers.plivo import PlivoFrameSerializer
-from pipecat.services.cartesia import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.openai import OpenAILLMService
-from pipecat.transports.network.fastapi_websocket import (
- FastAPIWebsocketParams,
- FastAPIWebsocketTransport,
-)
-
-load_dotenv()
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-async def run_bot(websocket_client: WebSocket, stream_id: str, call_id: Optional[str]):
- logger.info(f"Starting bot for stream: {stream_id}")
-
- serializer = PlivoFrameSerializer(
- stream_id=stream_id,
- call_id=call_id,
- auth_id=os.getenv("PLIVO_AUTH_ID"),
- auth_token=os.getenv("PLIVO_AUTH_TOKEN"),
- )
-
- transport = FastAPIWebsocketTransport(
- websocket=websocket_client,
- params=FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- add_wav_header=False,
- vad_analyzer=SileroVADAnalyzer(),
- serializer=serializer,
- ),
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- messages = [
- {
- "role": "system",
- "content": "You are an elementary teacher in an audio call. Your output will be converted to audio so don't include special characters in your answers. Respond to what the student said in a short short sentence.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(), # Websocket input from client
- stt, # Speech-To-Text
- context_aggregator.user(),
- llm, # LLM
- tts, # Text-To-Speech
- transport.output(), # Websocket output to client
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_in_sample_rate=8000,
- audio_out_sample_rate=8000,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- # Kick off the conversation.
- messages.append({"role": "system", "content": "Please introduce yourself to the user."})
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- await task.cancel()
-
- # We use `handle_sigint=False` because `uvicorn` is controlling keyboard
- # interruptions. We use `force_gc=True` to force garbage collection after
- # the runner finishes running a task which could be useful for long running
- # applications with multiple clients connecting.
- runner = PipelineRunner(handle_sigint=False, force_gc=True)
-
- await runner.run(task)
diff --git a/examples/plivo-chatbot/env.example b/examples/plivo-chatbot/env.example
deleted file mode 100644
index 7e9278758..000000000
--- a/examples/plivo-chatbot/env.example
+++ /dev/null
@@ -1,5 +0,0 @@
-OPENAI_API_KEY=
-DEEPGRAM_API_KEY=
-CARTESIA_API_KEY=
-PLIVO_AUTH_ID=
-PLIVO_AUTH_TOKEN=
\ No newline at end of file
diff --git a/examples/plivo-chatbot/requirements.txt b/examples/plivo-chatbot/requirements.txt
deleted file mode 100644
index ff134bae3..000000000
--- a/examples/plivo-chatbot/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-pipecat-ai[cartesia,openai,silero,deepgram]
-fastapi
-uvicorn
-python-dotenv
-loguru
\ No newline at end of file
diff --git a/examples/plivo-chatbot/server.py b/examples/plivo-chatbot/server.py
deleted file mode 100644
index b6d6ebd10..000000000
--- a/examples/plivo-chatbot/server.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import json
-
-import uvicorn
-from bot import run_bot
-from fastapi import FastAPI, WebSocket
-from fastapi.middleware.cors import CORSMiddleware
-from loguru import logger
-from starlette.responses import HTMLResponse
-
-app = FastAPI()
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"], # Allow all origins for testing
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.post("/")
-async def start_call():
- print("POST Plivo XML")
- return HTMLResponse(content=open("templates/streams.xml").read(), media_type="application/xml")
-
-
-@app.websocket("/ws")
-async def websocket_endpoint(websocket: WebSocket):
- await websocket.accept()
-
- # Plivo sends a start event when the stream begins
- start_data = websocket.iter_text()
- start_message = json.loads(await start_data.__anext__())
-
- print("Received start message:", start_message, flush=True)
-
- # Extract stream_id and call_id from the start event
- start_info = start_message.get("start", {})
- stream_id = start_info.get("streamId")
- call_id = start_info.get("callId")
-
- if not stream_id:
- logger.error("No streamId found in start message")
- await websocket.close()
- return
-
- print(f"WebSocket connection accepted for stream: {stream_id}, call: {call_id}")
- await run_bot(websocket, stream_id, call_id)
-
-
-if __name__ == "__main__":
- uvicorn.run(app, host="0.0.0.0", port=8765)
diff --git a/examples/plivo-chatbot/templates/streams.xml.template b/examples/plivo-chatbot/templates/streams.xml.template
deleted file mode 100644
index 8f657672d..000000000
--- a/examples/plivo-chatbot/templates/streams.xml.template
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- wss:///ws
-
\ No newline at end of file
diff --git a/examples/sentry-metrics/.gitignore b/examples/sentry-metrics/.gitignore
deleted file mode 100644
index 2bc1403d1..000000000
--- a/examples/sentry-metrics/.gitignore
+++ /dev/null
@@ -1,161 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-runpod.toml
diff --git a/examples/sentry-metrics/Dockerfile b/examples/sentry-metrics/Dockerfile
deleted file mode 100644
index 419adca34..000000000
--- a/examples/sentry-metrics/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM python:3.10-bullseye
-
-RUN mkdir /app
-RUN mkdir /app/assets
-RUN mkdir /app/utils
-COPY *.py /app/
-COPY requirements.txt /app/
-
-
-WORKDIR /app
-RUN pip3 install -r requirements.txt
-
-EXPOSE 7860
-
-CMD ["python3", "server.py"]
diff --git a/examples/sentry-metrics/README.md b/examples/sentry-metrics/README.md
deleted file mode 100644
index f2ba13109..000000000
--- a/examples/sentry-metrics/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Sentry Metrics
-
-This app connects you to a chatbot powered by GPT-4. It provides TTFB (Time-To-First-Byte) and processing metrics to Sentry.
-
-## Get started
-
-```python
-python3 -m venv venv
-source venv/bin/activate
-pip install -r requirements.txt
-
-cp env.example .env # and add your credentials
-
-```
-
-## Run the server
-
-```bash
-python server.py
-```
-
-Then, visit `http://localhost:7860/` in your browser to start a chatbot session.
-
-## Build and test the Docker image
-
-```
-docker build -t chatbot .
-docker run --env-file .env -p 7860:7860 chatbot
-```
diff --git a/examples/sentry-metrics/bot.py b/examples/sentry-metrics/bot.py
deleted file mode 100644
index 44f9a0daa..000000000
--- a/examples/sentry-metrics/bot.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-
-import aiohttp
-import sentry_sdk
-from dotenv import load_dotenv
-from loguru import logger
-from runner import configure
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.metrics.sentry import SentryMetrics
-from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-async def main():
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_out_enabled=True,
- audio_in_enabled=True,
- video_out_enabled=False,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- ),
- )
-
- # Initialize Sentry
- sentry_sdk.init(
- dsn=os.getenv("SENTRY_DSN"),
- traces_sample_rate=1.0,
- )
-
- tts = ElevenLabsTTSService(
- api_key=os.getenv("ELEVENLABS_API_KEY"),
- voice_id="cgSgspJ2msm6clMCkdW9",
- metrics=SentryMetrics(),
- )
-
- llm = OpenAILLMService(
- api_key=os.getenv("OPENAI_API_KEY"),
- metrics=SentryMetrics(),
- )
-
- messages = [
- {
- "role": "system",
- "content": "You are Chatbot, a friendly, helpful robot. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way, but keep your responses brief. Start by introducing yourself.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(), # microphone
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- print(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/sentry-metrics/env.example b/examples/sentry-metrics/env.example
deleted file mode 100644
index d368ae510..000000000
--- a/examples/sentry-metrics/env.example
+++ /dev/null
@@ -1,4 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
-DAILY_API_KEY=7df...
-OPENAI_API_KEY=sk-PL...
-ELEVENLABS_API_KEY=aeb...
\ No newline at end of file
diff --git a/examples/sentry-metrics/requirements.txt b/examples/sentry-metrics/requirements.txt
deleted file mode 100644
index 21ea7c996..000000000
--- a/examples/sentry-metrics/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[daily,openai,sentry,silero,elevenlabs]
diff --git a/examples/sentry-metrics/runner.py b/examples/sentry-metrics/runner.py
deleted file mode 100644
index ad39a3ac4..000000000
--- a/examples/sentry-metrics/runner.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/sentry-metrics/server.py b/examples/sentry-metrics/server.py
deleted file mode 100644
index a0f38854c..000000000
--- a/examples/sentry-metrics/server.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-MAX_BOTS_PER_ROOM = 1
-
-# Bot sub-process dict for status reporting and concurrency control
-bot_procs = {}
-
-daily_helpers = {}
-
-load_dotenv(override=True)
-
-
-def cleanup():
- # Clean up function, just to be extra safe
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-app = FastAPI(lifespan=lifespan)
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.get("/")
-async def start_agent(request: Request):
- print(f"!!! Creating room")
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- print(f"!!! Room URL: {room.url}")
- # Ensure the room property is present
- if not room.url:
- raise HTTPException(
- status_code=500,
- detail="Missing 'room' property in request data. Cannot start agent without a target room!",
- )
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room.url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limited reach for room: {room.url}")
-
- # Get the token for the room
- token = await daily_helpers["rest"].get_token(room.url)
-
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- # Spawn a new agent, and join the user session
- # Note: this is mostly for demonstration purposes (refer to 'deployment' in README)
- try:
- proc = subprocess.Popen(
- [f"python3 -m bot -u {room.url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room.url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room.url)
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- if proc[0].poll() is None:
- status = "running"
- else:
- status = "finished"
-
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Storyteller FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/simple-chatbot/.gitignore b/examples/simple-chatbot/.gitignore
deleted file mode 100644
index 0d298d282..000000000
--- a/examples/simple-chatbot/.gitignore
+++ /dev/null
@@ -1,51 +0,0 @@
-# Python
-__pycache__/
-*.py[cod]
-*$py.class
-*.so
-.Python
-build/
-dist/
-*.egg-info/
-.installed.cfg
-*.egg
-.pytest_cache/
-.coverage
-.coverage.*
-.env
-.venv
-env/
-venv/
-ENV/
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# JavaScript/Node.js
-node_modules/
-dist/
-dist-ssr/
-*.local
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-# Logs
-logs/
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-# Editor/IDE
-.vscode/*
-!.vscode/extensions.json
-.idea/
-*.swp
-*.swo
-.DS_Store
-
-# Project specific
-runpod.toml
\ No newline at end of file
diff --git a/examples/simple-chatbot/README.md b/examples/simple-chatbot/README.md
deleted file mode 100644
index 89f83c8df..000000000
--- a/examples/simple-chatbot/README.md
+++ /dev/null
@@ -1,111 +0,0 @@
-# Simple Chatbot
-
-
-
-This repository demonstrates a simple AI chatbot with real-time audio/video interaction, implemented using different client and server options. The bot server supports multiple AI backends, and you can connect to it using five different client approaches.
-
-## Two Bot Options
-
-1. **OpenAI Bot** (Default)
-
- - Uses gpt-4o for conversation
- - Requires OpenAI API key
-
-2. **Gemini Bot**
- - Uses Google's Gemini Multimodal Live model
- - Requires Gemini API key
-
-## Five Client Options
-
-1. **Daily Prebuilt** (Simplest)
-
- - Direct connection through a Daily Prebuilt room
- - For demo purposes only; handy for quick testing
-
-2. **JavaScript**
-
- - Basic implementation using [Pipecat JavaScript SDK](https://docs.pipecat.ai/client/js/introduction)
- - No framework dependencies
- - Good for learning the fundamentals
-
-3. **React**
-
- - Basic impelmentation using [Pipecat React SDK](https://docs.pipecat.ai/client/react/introduction)
- - Demonstrates the basic client principles with Pipecat React
-
-4. **Android**
-
- - Basic implementation using [Pipecat Android SDK](https://docs.pipecat.ai/client/android/introduction)
- - Demonstrates the basic client principles with Pipecat Android
-
-5. **iOS**
- - Basic implementation using [Pipecat iOS SDK](https://docs.pipecat.ai/client/ios/introduction)
- - Demonstrates the basic client principles with Pipecat iOS
-
-## Quick Start
-
-### First, start the bot server:
-
-1. Navigate to the server directory:
- ```bash
- cd server
- ```
-2. Create and activate a virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-3. Install requirements:
- ```bash
- pip install -r requirements.txt
- ```
-4. Copy env.example to .env and configure:
- - Add your API keys
- - Choose your bot implementation:
- ```ini
- BOT_IMPLEMENTATION= # Options: 'openai' (default) or 'gemini'
- ```
-5. Start the server:
- ```bash
- python server.py
- ```
-
-### Next, connect using your preferred client app:
-
-- [Android Guide](client/android/README.md)
-- [iOS Guide](client/ios/README.md)
-- [Daily Prebuilt](client/prebuilt/README.md)
-- [JavaScript Guide](client/javascript/README.md)
-- [React Guide](client/react/README.md)
-
-## Important Note
-
-The bot server must be running for any of the client implementations to work. Start the server first before trying any of the client apps.
-
-## Requirements
-
-- Python 3.10+
-- Node.js 16+ (for JavaScript and React implementations)
-- Daily API key
-- OpenAI API key (for OpenAI bot)
-- Gemini API key (for Gemini bot)
-- ElevenLabs API key
-- Modern web browser with WebRTC support
-
-## Project Structure
-
-```
-simple-chatbot/
-โโโ server/ # Bot server implementation
-โ โโโ bot-openai.py # OpenAI bot implementation
-โ โโโ bot-gemini.py # Gemini bot implementation
-โ โโโ runner.py # Server runner utilities
-โ โโโ server.py # FastAPI server
-โ โโโ requirements.txt
-โโโ client/ # Client implementations
- โโโ android/ # Daily Android connection
- โโโ ios/ # Daily iOS connection
- โโโ javascript/ # Daily JavaScript connection
- โโโ prebuilt/ # Pipecat Prebuilt client
- โโโ react/ # Pipecat React client
-```
diff --git a/examples/simple-chatbot/client/android/.gitignore b/examples/simple-chatbot/client/android/.gitignore
deleted file mode 100644
index 10cfdbfaf..000000000
--- a/examples/simple-chatbot/client/android/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-*.iml
-.gradle
-/local.properties
-/.idea
-.DS_Store
-/build
-/captures
-.externalNativeBuild
-.cxx
-local.properties
diff --git a/examples/simple-chatbot/client/android/LICENSE b/examples/simple-chatbot/client/android/LICENSE
deleted file mode 100644
index 976aa72fe..000000000
--- a/examples/simple-chatbot/client/android/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-BSD 2-Clause License
-
-Copyright (c) 2024โ2025, Daily
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/examples/simple-chatbot/client/android/README.md b/examples/simple-chatbot/client/android/README.md
deleted file mode 100644
index 69eba8b64..000000000
--- a/examples/simple-chatbot/client/android/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Pipecat Simple Chatbot Client for Android
-
-Demo app which connects to the `simple-chatbot` backend over RTVI.
-
-## Screenshot
-
-
-
-## How to run
-
-```bash
-./gradlew runDebug
-```
-
-Ensure that the `simple-chatbot` server is running as described in the parent README.
-
-For a full walkthrough, describing how to set up the backend and forward the connection
-to your Android device, please see the following blog post:
-
-https://www.daily.co/blog/build-a-voice-agent-for-android-with-gemini-multimodal-live/
diff --git a/examples/simple-chatbot/client/android/build.gradle.kts b/examples/simple-chatbot/client/android/build.gradle.kts
deleted file mode 100644
index 861303b1f..000000000
--- a/examples/simple-chatbot/client/android/build.gradle.kts
+++ /dev/null
@@ -1,5 +0,0 @@
-plugins {
- alias(libs.plugins.jetbrains.kotlin.android) apply false
- alias(libs.plugins.android.application) apply false
- alias(libs.plugins.compose.compiler) apply false
-}
diff --git a/examples/simple-chatbot/client/android/files/screenshot.jpg b/examples/simple-chatbot/client/android/files/screenshot.jpg
deleted file mode 100644
index c234e5b0b..000000000
Binary files a/examples/simple-chatbot/client/android/files/screenshot.jpg and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/gradle.properties b/examples/simple-chatbot/client/android/gradle.properties
deleted file mode 100644
index 20e2a0152..000000000
--- a/examples/simple-chatbot/client/android/gradle.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Project-wide Gradle settings.
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. For more details, visit
-# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
-# org.gradle.parallel=true
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
-android.useAndroidX=true
-# Kotlin code style for this project: "official" or "obsolete":
-kotlin.code.style=official
-# Enables namespacing of each library's R class so that its R class includes only the
-# resources declared in the library itself and none from the library's dependencies,
-# thereby reducing the size of the R class for that library
-android.nonTransitiveRClass=true
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/gradle/libs.versions.toml b/examples/simple-chatbot/client/android/gradle/libs.versions.toml
deleted file mode 100644
index 5bc7b5db9..000000000
--- a/examples/simple-chatbot/client/android/gradle/libs.versions.toml
+++ /dev/null
@@ -1,34 +0,0 @@
-[versions]
-accompanistPermissions = "0.34.0"
-agp = "8.7.3"
-constraintlayoutCompose = "1.1.0"
-pipecatClientDaily = "0.3.7"
-kotlin = "2.0.20"
-coreKtx = "1.15.0"
-lifecycleRuntimeKtx = "2.8.7"
-activityCompose = "1.9.3"
-composeBom = "2024.12.01"
-kotlinxSerializationJson = "1.7.1"
-kotlinxSerializationPlugin = "2.0.20"
-
-[libraries]
-accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanistPermissions" }
-androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "constraintlayoutCompose" }
-androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
-pipecat-client-daily = { module = "ai.pipecat:daily-transport", version.ref = "pipecatClientDaily" }
-androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
-androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
-androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
-androidx-ui = { group = "androidx.compose.ui", name = "ui" }
-androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
-androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
-androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
-androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
-androidx-material3 = { group = "androidx.compose.material3", name = "material3" }
-kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }
-
-[plugins]
-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
-android-application = { id = "com.android.application", version.ref = "agp" }
-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
-jetbrains-kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlinxSerializationPlugin" }
diff --git a/examples/simple-chatbot/client/android/gradle/wrapper/gradle-wrapper.jar b/examples/simple-chatbot/client/android/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index e708b1c02..000000000
Binary files a/examples/simple-chatbot/client/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/gradle/wrapper/gradle-wrapper.properties b/examples/simple-chatbot/client/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 2c47b5b4b..000000000
--- a/examples/simple-chatbot/client/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Mon Aug 05 13:01:27 BST 2024
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/examples/simple-chatbot/client/android/gradlew b/examples/simple-chatbot/client/android/gradlew
deleted file mode 100755
index 4f906e0c8..000000000
--- a/examples/simple-chatbot/client/android/gradlew
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=`expr $i + 1`
- done
- case $i in
- 0) set -- ;;
- 1) set -- "$args0" ;;
- 2) set -- "$args0" "$args1" ;;
- 3) set -- "$args0" "$args1" "$args2" ;;
- 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=`save "$@"`
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-exec "$JAVACMD" "$@"
diff --git a/examples/simple-chatbot/client/android/gradlew.bat b/examples/simple-chatbot/client/android/gradlew.bat
deleted file mode 100644
index 107acd32c..000000000
--- a/examples/simple-chatbot/client/android/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/examples/simple-chatbot/client/android/settings.gradle.kts b/examples/simple-chatbot/client/android/settings.gradle.kts
deleted file mode 100644
index d416e5d43..000000000
--- a/examples/simple-chatbot/client/android/settings.gradle.kts
+++ /dev/null
@@ -1,24 +0,0 @@
-pluginManagement {
- repositories {
- google {
- content {
- includeGroupByRegex("com\\.android.*")
- includeGroupByRegex("com\\.google.*")
- includeGroupByRegex("androidx.*")
- }
- }
- mavenCentral()
- gradlePluginPortal()
- }
-}
-dependencyResolutionManagement {
- repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
- repositories {
- google()
- mavenCentral()
- mavenLocal()
- }
-}
-
-rootProject.name = "Pipecat Simple Chatbot Client"
-include(":simple-chatbot-client")
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/.gitignore b/examples/simple-chatbot/client/android/simple-chatbot-client/.gitignore
deleted file mode 100644
index 42afabfd2..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/build.gradle.kts b/examples/simple-chatbot/client/android/simple-chatbot-client/build.gradle.kts
deleted file mode 100644
index 72d1ab1b6..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/build.gradle.kts
+++ /dev/null
@@ -1,75 +0,0 @@
-plugins {
- alias(libs.plugins.android.application)
- alias(libs.plugins.jetbrains.kotlin.android)
- alias(libs.plugins.jetbrains.kotlin.serialization)
- alias(libs.plugins.compose.compiler)
-}
-
-android {
- namespace = "ai.pipecat.simple_chatbot_client"
- compileSdk = 35
-
- defaultConfig {
- applicationId = "ai.pipecat.simple_chatbot_client"
- minSdk = 26
- targetSdk = 35
- versionCode = 1
- versionName = "1.0"
-
- vectorDrawables {
- useSupportLibrary = true
- }
- }
-
- buildTypes {
- release {
- isMinifyEnabled = 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"
- }
-
- buildFeatures {
- compose = true
- buildConfig = true
- }
-
- composeOptions {
- kotlinCompilerExtensionVersion = "1.5.1"
- }
-
- packaging {
- resources {
- excludes += "/META-INF/{AL2.0,LGPL2.1}"
- }
- }
-}
-
-dependencies {
- implementation(libs.pipecat.client.daily)
- implementation(libs.androidx.core.ktx)
- implementation(libs.androidx.lifecycle.runtime.ktx)
- implementation(libs.androidx.activity.compose)
- implementation(platform(libs.androidx.compose.bom))
- implementation(libs.androidx.ui)
- implementation(libs.androidx.ui.graphics)
- implementation(libs.androidx.ui.tooling.preview)
- implementation(libs.androidx.material3)
- implementation(libs.accompanist.permissions)
- implementation(libs.androidx.constraintlayout.compose)
- implementation(libs.kotlinx.serialization.json)
- androidTestImplementation(platform(libs.androidx.compose.bom))
- debugImplementation(libs.androidx.ui.tooling)
- debugImplementation(libs.androidx.ui.test.manifest)
-}
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/proguard-rules.pro b/examples/simple-chatbot/client/android/simple-chatbot-client/proguard-rules.pro
deleted file mode 100644
index 481bb4348..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/AndroidManifest.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/AndroidManifest.xml
deleted file mode 100644
index 397ea75cd..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/MainActivity.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/MainActivity.kt
deleted file mode 100644
index 8c4292692..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/MainActivity.kt
+++ /dev/null
@@ -1,257 +0,0 @@
-package ai.pipecat.simple_chatbot_client
-
-import ai.pipecat.simple_chatbot_client.ui.InCallLayout
-import ai.pipecat.simple_chatbot_client.ui.PermissionScreen
-import ai.pipecat.simple_chatbot_client.ui.theme.Colors
-import ai.pipecat.simple_chatbot_client.ui.theme.RTVIClientTheme
-import ai.pipecat.simple_chatbot_client.ui.theme.TextStyles
-import ai.pipecat.simple_chatbot_client.ui.theme.textFieldColors
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.activity.enableEdgeToEdge
-import androidx.annotation.DrawableRes
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-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.imePadding
-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.shape.RoundedCornerShape
-import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.foundation.verticalScroll
-import androidx.compose.material3.AlertDialog
-import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.Icon
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.material3.TextField
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-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.unit.dp
-import androidx.compose.ui.unit.sp
-
-
-class MainActivity : ComponentActivity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- enableEdgeToEdge()
-
- val voiceClientManager = VoiceClientManager(this)
-
- setContent {
- RTVIClientTheme {
- Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
- Box(
- Modifier
- .fillMaxSize()
- .padding(innerPadding)
- ) {
- PermissionScreen()
-
- val vcState = voiceClientManager.state.value
-
- if (vcState != null) {
- InCallLayout(voiceClientManager)
-
- } else {
- ConnectSettings(voiceClientManager)
- }
-
- voiceClientManager.errors.firstOrNull()?.let { errorText ->
-
- val dismiss: () -> Unit = { voiceClientManager.errors.removeAt(0) }
-
- AlertDialog(
- onDismissRequest = dismiss,
- confirmButton = {
- Button(onClick = dismiss) {
- Text(
- text = "OK",
- fontSize = 14.sp,
- fontWeight = FontWeight.W700,
- color = Color.White,
- style = TextStyles.base
- )
- }
- },
- containerColor = Color.White,
- title = {
- Text(
- text = "Error",
- fontSize = 22.sp,
- fontWeight = FontWeight.W600,
- color = Color.Black,
- style = TextStyles.base
- )
- },
- text = {
- Text(
- text = errorText.message,
- fontSize = 16.sp,
- fontWeight = FontWeight.W400,
- color = Color.Black,
- style = TextStyles.base
- )
- }
- )
- }
- }
- }
- }
- }
- }
-}
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Composable
-fun ConnectSettings(
- voiceClientManager: VoiceClientManager,
-) {
- val scrollState = rememberScrollState()
-
- val start = {
- val backendUrl = Preferences.backendUrl.value
-
- voiceClientManager.start(baseUrl = backendUrl!!)
- }
-
- Box(
- modifier = Modifier
- .fillMaxSize()
- .verticalScroll(scrollState)
- .imePadding()
- .padding(20.dp),
- contentAlignment = Alignment.Center
- ) {
- Box(
- Modifier
- .fillMaxWidth()
- .shadow(2.dp, RoundedCornerShape(16.dp))
- .clip(RoundedCornerShape(16.dp))
- .background(Colors.mainSurfaceBackground)
- ) {
- Column(
- Modifier
- .fillMaxWidth()
- .padding(
- vertical = 24.dp,
- horizontal = 28.dp
- )
- ) {
- Spacer(modifier = Modifier.height(12.dp))
-
- Text(
- modifier = Modifier.align(Alignment.CenterHorizontally),
- text = "Connect to an RTVI server",
- fontSize = 22.sp,
- fontWeight = FontWeight.W700,
- style = TextStyles.base
- )
-
- Spacer(modifier = Modifier.height(36.dp))
-
- Text(
- text = "Backend URL",
- fontSize = 16.sp,
- fontWeight = FontWeight.W400,
- style = TextStyles.base
- )
-
- Spacer(modifier = Modifier.height(12.dp))
-
- TextField(
- modifier = Modifier
- .fillMaxWidth()
- .border(1.dp, Colors.textFieldBorder, RoundedCornerShape(12.dp)),
- value = Preferences.backendUrl.value ?: "",
- onValueChange = { Preferences.backendUrl.value = it },
- keyboardOptions = KeyboardOptions(
- keyboardType = KeyboardType.Uri,
- imeAction = ImeAction.Next
- ),
- colors = textFieldColors(),
- shape = RoundedCornerShape(12.dp)
- )
-
- Spacer(modifier = Modifier.height(36.dp))
-
- Row(
- modifier = Modifier.fillMaxWidth(),
- horizontalArrangement = Arrangement.spacedBy(16.dp)
- ) {
- ConnectDialogButton(
- modifier = Modifier.weight(1f),
- onClick = start,
- text = "Connect",
- foreground = Color.White,
- background = Colors.buttonNormal,
- border = Colors.buttonNormal
- )
- }
- }
- }
- }
-}
-
-@Composable
-private fun ConnectDialogButton(
- onClick: () -> Unit,
- text: String,
- foreground: Color,
- background: Color,
- border: Color,
- modifier: Modifier = Modifier,
- @DrawableRes icon: Int? = null,
-) {
- val shape = RoundedCornerShape(8.dp)
-
- Row(
- modifier
- .border(1.dp, border, shape)
- .clip(shape)
- .background(background)
- .clickable(onClick = onClick)
- .padding(vertical = 10.dp, horizontal = 24.dp),
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.Center
- ) {
- if (icon != null) {
- Icon(
- modifier = Modifier.size(24.dp),
- painter = painterResource(icon),
- tint = foreground,
- contentDescription = null
- )
-
- Spacer(modifier = Modifier.width(8.dp))
- }
-
- Text(
- text = text,
- fontSize = 16.sp,
- fontWeight = FontWeight.W500,
- color = foreground
- )
- }
-}
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/Preferences.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/Preferences.kt
deleted file mode 100644
index bf5301fbf..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/Preferences.kt
+++ /dev/null
@@ -1,75 +0,0 @@
-package ai.pipecat.simple_chatbot_client
-
-import android.content.Context
-import android.content.SharedPreferences
-import androidx.compose.runtime.mutableStateOf
-import kotlinx.serialization.KSerializer
-import kotlinx.serialization.json.Json
-
-private val JSON_INSTANCE = Json { ignoreUnknownKeys = true }
-
-object Preferences {
-
- private const val PREF_BACKEND_URL = "backend_url"
-
- private lateinit var prefs: SharedPreferences
-
- fun initAppStart(context: Context) {
- prefs = context.applicationContext.getSharedPreferences("prefs", Context.MODE_PRIVATE)
-
- listOf(backendUrl).forEach { it.init() }
- }
-
- private fun getString(key: String): String? = prefs.getString(key, null)
-
- interface BasePref {
- fun init()
- }
-
- class StringPref(private val key: String): BasePref {
- private val cachedValue = mutableStateOf(null)
-
- override fun init() {
- cachedValue.value = getString(key)
- prefs.registerOnSharedPreferenceChangeListener { _, changedKey ->
- if (key == changedKey) {
- cachedValue.value = getString(key)
- }
- }
- }
-
- var value: String?
- get() = cachedValue.value
- set(newValue) {
- cachedValue.value = newValue
- prefs.edit().putString(key, newValue).apply()
- }
- }
-
- class JsonPref(private val key: String, private var serializer: KSerializer): BasePref {
- private val cachedValue = mutableStateOf(null)
-
- private fun lookupValue(): E? =
- getString(key)?.let { JSON_INSTANCE.decodeFromString(serializer, it) }
-
- override fun init() {
- cachedValue.value = lookupValue()
- prefs.registerOnSharedPreferenceChangeListener { _, changedKey ->
- if (key == changedKey) {
- cachedValue.value = lookupValue()
- }
- }
- }
-
- var value: E?
- get() = cachedValue.value
- set(newValue) {
- cachedValue.value = newValue
- prefs.edit()
- .putString(key, newValue?.let { JSON_INSTANCE.encodeToString(serializer, it) })
- .apply()
- }
- }
-
- val backendUrl = StringPref(PREF_BACKEND_URL)
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/RTVIApplication.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/RTVIApplication.kt
deleted file mode 100644
index de07ab327..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/RTVIApplication.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package ai.pipecat.simple_chatbot_client
-
-import android.app.Application
-
-class RTVIApplication : Application() {
- override fun onCreate() {
- super.onCreate()
- Preferences.initAppStart(this)
- }
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/VoiceClientManager.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/VoiceClientManager.kt
deleted file mode 100644
index 6f122f310..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/VoiceClientManager.kt
+++ /dev/null
@@ -1,198 +0,0 @@
-package ai.pipecat.simple_chatbot_client
-
-import ai.pipecat.client.RTVIClient
-import ai.pipecat.client.RTVIClientOptions
-import ai.pipecat.client.RTVIClientParams
-import ai.pipecat.client.RTVIEventCallbacks
-import ai.pipecat.client.daily.DailyTransport
-import ai.pipecat.client.result.Future
-import ai.pipecat.client.result.RTVIError
-import ai.pipecat.client.result.Result
-import ai.pipecat.client.types.ActionDescription
-import ai.pipecat.client.types.Participant
-import ai.pipecat.client.types.PipecatMetrics
-import ai.pipecat.client.types.RTVIURLEndpoints
-import ai.pipecat.client.types.ServiceConfig
-import ai.pipecat.client.types.Tracks
-import ai.pipecat.client.types.Transcript
-import ai.pipecat.client.types.TransportState
-import ai.pipecat.client.types.Value
-import ai.pipecat.simple_chatbot_client.utils.Timestamp
-import android.content.Context
-import android.util.Log
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.Stable
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateListOf
-import androidx.compose.runtime.mutableStateOf
-
-@Immutable
-data class Error(val message: String)
-
-@Stable
-class VoiceClientManager(private val context: Context) {
-
- companion object {
- private const val TAG = "VoiceClientManager"
- }
-
- private val client = mutableStateOf(null)
-
- val state = mutableStateOf(null)
-
- val errors = mutableStateListOf()
-
- val actionDescriptions =
- mutableStateOf, RTVIError>?>(null)
-
- val expiryTime = mutableStateOf(null)
-
- val botReady = mutableStateOf(false)
- val botIsTalking = mutableStateOf(false)
- val userIsTalking = mutableStateOf(false)
- val botAudioLevel = mutableFloatStateOf(0f)
- val userAudioLevel = mutableFloatStateOf(0f)
-
- val mic = mutableStateOf(false)
- val camera = mutableStateOf(false)
- val tracks = mutableStateOf(null)
-
- private fun Future.displayErrors() = withErrorCallback {
- Log.e(TAG, "Future resolved with error: ${it.description}", it.exception)
- errors.add(Error(it.description))
- }
-
- fun start(baseUrl: String) {
-
- if (client.value != null) {
- return
- }
-
- val options = RTVIClientOptions(
- params = RTVIClientParams(
- baseUrl = baseUrl,
- endpoints = RTVIURLEndpoints(),
- )
- )
-
- state.value = TransportState.Disconnected
-
- val callbacks = object : RTVIEventCallbacks() {
- override fun onTransportStateChanged(state: TransportState) {
- this@VoiceClientManager.state.value = state
- }
-
- override fun onBackendError(message: String) {
- "Error from backend: $message".let {
- Log.e(TAG, it)
- errors.add(Error(it))
- }
- }
-
- override fun onServerMessage(data: Value) {
- Log.i(TAG, "onServerMessage: $data")
- }
-
- override fun onBotReady(version: String, config: List) {
-
- Log.i(TAG, "Bot ready. Version $version, config: $config")
-
- botReady.value = true
-
- client.value?.describeActions()?.withCallback {
- actionDescriptions.value = it
- }
- }
-
- override fun onPipecatMetrics(data: PipecatMetrics) {
- Log.i(TAG, "Pipecat metrics: $data")
- }
-
- override fun onUserTranscript(data: Transcript) {
- Log.i(TAG, "User transcript: $data")
- }
-
- override fun onBotTranscript(text: String) {
- Log.i(TAG, "Bot transcript: $text")
- }
-
- override fun onBotStartedSpeaking() {
- Log.i(TAG, "Bot started speaking")
- botIsTalking.value = true
- }
-
- override fun onBotStoppedSpeaking() {
- Log.i(TAG, "Bot stopped speaking")
- botIsTalking.value = false
- }
-
- override fun onUserStartedSpeaking() {
- Log.i(TAG, "User started speaking")
- userIsTalking.value = true
- }
-
- override fun onUserStoppedSpeaking() {
- Log.i(TAG, "User stopped speaking")
- userIsTalking.value = false
- }
-
- override fun onTracksUpdated(tracks: Tracks) {
- this@VoiceClientManager.tracks.value = tracks
- }
-
- override fun onInputsUpdated(camera: Boolean, mic: Boolean) {
- this@VoiceClientManager.camera.value = camera
- this@VoiceClientManager.mic.value = mic
- }
-
- override fun onConnected() {
- expiryTime.value = client.value?.expiry?.let(Timestamp::ofEpochSecs)
- }
-
- override fun onDisconnected() {
- expiryTime.value = null
- actionDescriptions.value = null
- botIsTalking.value = false
- userIsTalking.value = false
- state.value = null
- actionDescriptions.value = null
- botReady.value = false
- tracks.value = null
-
- client.value?.release()
- client.value = null
- }
-
- override fun onUserAudioLevel(level: Float) {
- userAudioLevel.floatValue = level
- }
-
- override fun onRemoteAudioLevel(level: Float, participant: Participant) {
- botAudioLevel.floatValue = level
- }
- }
-
- val client = RTVIClient(DailyTransport.Factory(context), callbacks, options)
-
- client.connect().displayErrors().withErrorCallback {
- callbacks.onDisconnected()
- }
-
- this.client.value = client
- }
-
- fun enableCamera(enabled: Boolean) {
- client.value?.enableCam(enabled)?.displayErrors()
- }
-
- fun enableMic(enabled: Boolean) {
- client.value?.enableMic(enabled)?.displayErrors()
- }
-
- fun toggleCamera() = enableCamera(!camera.value)
- fun toggleMic() = enableMic(!mic.value)
-
- fun stop() {
- client.value?.disconnect()?.displayErrors()
- }
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/AudioIndicator.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/AudioIndicator.kt
deleted file mode 100644
index 6667f1559..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/AudioIndicator.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import androidx.compose.animation.core.LinearEasing
-import androidx.compose.animation.core.animateFloat
-import androidx.compose.animation.core.animateFloatAsState
-import androidx.compose.animation.core.infiniteRepeatable
-import androidx.compose.animation.core.rememberInfiniteTransition
-import androidx.compose.animation.core.tween
-import androidx.compose.foundation.Canvas
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.StrokeCap
-import androidx.compose.ui.semantics.clearAndSetSemantics
-
-@Composable
-fun ListeningAnimation(
- modifier: Modifier,
- active: Boolean,
- level: Float,
- color: Color,
-) {
- val infiniteTransition = rememberInfiniteTransition("listeningAnimation")
-
- val loopState by infiniteTransition.animateFloat(
- initialValue = 0f,
- targetValue = Math.PI.toFloat() * 2f,
- animationSpec = infiniteRepeatable(tween(durationMillis = 1000, easing = LinearEasing)),
- label = "listeningAnimationLoopState"
- )
-
- val activeFraction by animateFloatAsState(
- if (active) {
- Math.pow(level.toDouble(), 0.3).toFloat()
- } else {
- 0f
- }
- )
-
- Canvas(modifier.clearAndSetSemantics { }) {
-
- val strokeWidthPx = size.width / 12
-
- val lineCount = 5
-
- for (i in 1..lineCount) {
-
- val sine = Math.sin(loopState + 0.9 * i)
- val fraction = activeFraction * ((sine + 1) / 2).toFloat()
-
- val x = (size.width / (lineCount + 1)) * i
-
- val yMax = size.height * 0.25f
- val yMin = size.height * 0.5f
-
- val y = yMin + (yMax - yMin) * fraction
- val yEnd = size.height - y
-
- this.drawLine(
- start = Offset(x, y),
- end = Offset(x, yEnd),
- color = color,
- strokeWidth = strokeWidthPx,
- cap = StrokeCap.Round
- )
- }
- }
-}
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/BotIndicator.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/BotIndicator.kt
deleted file mode 100644
index 10351bac7..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/BotIndicator.kt
+++ /dev/null
@@ -1,93 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import ai.pipecat.simple_chatbot_client.ui.theme.Colors
-import androidx.compose.animation.AnimatedContent
-import androidx.compose.animation.animateColorAsState
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.aspectRatio
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.material3.CircularProgressIndicator
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.FloatState
-import androidx.compose.runtime.State
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.StrokeCap
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-
-@Composable
-fun BotIndicator(
- modifier: Modifier,
- isReady: Boolean,
- isTalking: State,
- audioLevel: FloatState,
-) {
- Box(
- modifier = modifier.padding(15.dp),
- contentAlignment = Alignment.Center
- ) {
- val color by animateColorAsState(if (isTalking.value || !isReady) {
- Color.Black
- } else {
- Colors.botIndicatorBackground
- })
-
- Box(
- Modifier
- .aspectRatio(1f)
- .fillMaxSize()
- .shadow(20.dp, CircleShape)
- .border(12.dp, Color.White, CircleShape)
- .border(1.dp, Colors.lightGrey, CircleShape)
- .clip(CircleShape)
- .background(color)
- .padding(50.dp),
- contentAlignment = Alignment.Center,
- ) {
- AnimatedContent(
- targetState = isReady
- ) { isReadyVal ->
- if (isReadyVal) {
- ListeningAnimation(
- modifier = Modifier.fillMaxSize(),
- active = isTalking.value,
- level = audioLevel.floatValue,
- color = Color.White
- )
- } else {
- CircularProgressIndicator(
- modifier = Modifier.size(180.dp),
- color = Color.White,
- strokeWidth = 12.dp,
- strokeCap = StrokeCap.Round,
- trackColor = color
- )
- }
- }
- }
- }
-}
-
-@Composable
-@Preview
-fun PreviewBotIndicator() {
- BotIndicator(
- modifier = Modifier,
- isReady = false,
- isTalking = remember { mutableStateOf(true) },
- audioLevel = remember { mutableFloatStateOf(1.0f) }
- )
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallFooter.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallFooter.kt
deleted file mode 100644
index 31b50dc17..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallFooter.kt
+++ /dev/null
@@ -1,89 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import ai.pipecat.simple_chatbot_client.R
-import ai.pipecat.simple_chatbot_client.ui.theme.Colors
-import androidx.annotation.DrawableRes
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.ColumnScope
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Icon
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-
-@Composable
-private fun FooterButton(
- modifier: Modifier,
- onClick: () -> Unit,
- @DrawableRes icon: Int,
- text: String,
- foreground: Color,
- background: Color,
- border: Color,
-) {
- val shape = RoundedCornerShape(12.dp)
-
- Row(
- modifier
- .border(1.dp, border, shape)
- .clip(shape)
- .background(background)
- .clickable(onClick = onClick)
- .padding(vertical = 10.dp, horizontal = 18.dp),
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.Center
- ) {
- Icon(
- modifier = Modifier.size(24.dp),
- painter = painterResource(icon),
- tint = foreground,
- contentDescription = null
- )
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(
- text = text,
- fontSize = 14.sp,
- fontWeight = FontWeight.W600,
- color = foreground
- )
- }
-}
-
-@Composable
-fun ColumnScope.InCallFooter(
- onClickEnd: () -> Unit,
-) {
- Row(Modifier
- .fillMaxWidth(0.5f)
- .padding(15.dp)
- .align(Alignment.CenterHorizontally)
- ) {
- FooterButton(
- modifier = Modifier.weight(1f),
- onClick = onClickEnd,
- icon = R.drawable.phone_hangup,
- text = "End",
- foreground = Color.White,
- background = Colors.endButton,
- border = Colors.endButton
- )
- }
-}
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallHeader.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallHeader.kt
deleted file mode 100644
index 68a5c1e8f..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallHeader.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import ai.pipecat.simple_chatbot_client.utils.Timestamp
-import androidx.compose.animation.AnimatedContent
-import androidx.compose.animation.fadeIn
-import androidx.compose.animation.fadeOut
-import androidx.compose.animation.togetherWith
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.constraintlayout.compose.ConstraintLayout
-
-@Composable
-fun InCallHeader(
- expiryTime: Timestamp?
-) {
- ConstraintLayout(
- Modifier
- .fillMaxWidth()
- .padding(vertical = 15.dp)
- ) {
- val refTimer = createRef()
-
- AnimatedContent(
- modifier = Modifier.constrainAs(refTimer) {
- top.linkTo(parent.top)
- bottom.linkTo(parent.bottom)
- end.linkTo(parent.end)
- },
- targetState = expiryTime,
- transitionSpec = { fadeIn() togetherWith fadeOut() }
- ) { expiryTimeVal ->
- if (expiryTimeVal != null) {
- Timer(expiryTime = expiryTimeVal, modifier = Modifier)
- }
- }
- }
-}
-
-@Composable
-@Preview
-fun PreviewInCallHeader() {
- InCallHeader(
- Timestamp.now() + java.time.Duration.ofMinutes(3)
- )
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallLayout.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallLayout.kt
deleted file mode 100644
index 7d450d6ab..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/InCallLayout.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import ai.pipecat.simple_chatbot_client.VoiceClientManager
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
-
-@Composable
-fun InCallLayout(voiceClientManager: VoiceClientManager) {
-
- val localCam by remember { derivedStateOf { voiceClientManager.tracks.value?.local?.video } }
-
- Column(Modifier.fillMaxSize()) {
-
- InCallHeader(expiryTime = voiceClientManager.expiryTime.value)
-
- Box(
- modifier = Modifier
- .weight(1f)
- .fillMaxWidth(),
- contentAlignment = Alignment.Center
- ) {
- Column(
- modifier = Modifier.fillMaxWidth(),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.spacedBy(12.dp, Alignment.CenterVertically)
- ) {
- BotIndicator(
- modifier = Modifier,
- isReady = voiceClientManager.botReady.value,
- isTalking = voiceClientManager.botIsTalking,
- audioLevel = voiceClientManager.botAudioLevel
- )
-
- Row(
- verticalAlignment = Alignment.CenterVertically
- ) {
- UserMicButton(
- onClick = voiceClientManager::toggleMic,
- micEnabled = voiceClientManager.mic.value,
- modifier = Modifier,
- isTalking = voiceClientManager.userIsTalking,
- audioLevel = voiceClientManager.userAudioLevel
- )
-
- UserCamButton(
- onClick = voiceClientManager::toggleCamera,
- camEnabled = voiceClientManager.camera.value,
- camTrackId = localCam,
- modifier = Modifier
- )
- }
- }
- }
-
- InCallFooter(
- onClickEnd = voiceClientManager::stop
- )
- }
-}
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/PermissionScreen.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/PermissionScreen.kt
deleted file mode 100644
index 686586709..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/PermissionScreen.kt
+++ /dev/null
@@ -1,99 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import ai.pipecat.simple_chatbot_client.ui.theme.Colors
-import ai.pipecat.simple_chatbot_client.ui.theme.TextStyles
-import android.Manifest
-import android.util.Log
-import androidx.activity.compose.rememberLauncherForActivityResult
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Button
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-import androidx.compose.ui.window.Dialog
-import com.google.accompanist.permissions.ExperimentalPermissionsApi
-import com.google.accompanist.permissions.isGranted
-import com.google.accompanist.permissions.rememberPermissionState
-
-@OptIn(ExperimentalPermissionsApi::class)
-@Composable
-fun PermissionScreen() {
- val cameraPermission = rememberPermissionState(Manifest.permission.CAMERA)
- val micPermission = rememberPermissionState(Manifest.permission.RECORD_AUDIO)
-
- val requestPermissionLauncher = rememberLauncherForActivityResult(
- ActivityResultContracts.RequestMultiplePermissions()
- ) { isGranted ->
- Log.i("MainActivity", "Permissions granted: $isGranted")
- }
-
- if (!cameraPermission.status.isGranted || !micPermission.status.isGranted) {
-
- Dialog(
- onDismissRequest = {},
- ) {
- val dialogShape = RoundedCornerShape(16.dp)
-
- Column(
- Modifier
- .shadow(6.dp, dialogShape)
- .border(2.dp, Colors.logoBorder, dialogShape)
- .clip(dialogShape)
- .background(Color.White)
- .padding(28.dp)
- ) {
- Text(
- text = "Permissions",
- fontSize = 24.sp,
- fontWeight = FontWeight.W700,
- style = TextStyles.base
- )
-
- Spacer(modifier = Modifier.height(8.dp))
-
- Text(
- text = "Please grant camera and mic permissions to continue",
- fontSize = 18.sp,
- fontWeight = FontWeight.W400,
- style = TextStyles.base
- )
-
- Spacer(modifier = Modifier.height(36.dp))
-
- Button(
- modifier = Modifier.align(Alignment.End),
- shape = RoundedCornerShape(12.dp),
- onClick = {
- requestPermissionLauncher.launch(
- arrayOf(
- Manifest.permission.CAMERA,
- Manifest.permission.RECORD_AUDIO
- )
- )
- }
- ) {
- Text(
- text = "Grant permissions",
- fontSize = 16.sp,
- fontWeight = FontWeight.W700,
- style = TextStyles.base
- )
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/Timer.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/Timer.kt
deleted file mode 100644
index 88bb5fb12..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/Timer.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import ai.pipecat.simple_chatbot_client.R
-import ai.pipecat.simple_chatbot_client.ui.theme.Colors
-import ai.pipecat.simple_chatbot_client.utils.Timestamp
-import ai.pipecat.simple_chatbot_client.utils.formatTimer
-import ai.pipecat.simple_chatbot_client.utils.rtcStateSecs
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.layout.widthIn
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Icon
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-import java.time.Duration
-
-@Composable
-fun Timer(
- expiryTime: Timestamp,
- modifier: Modifier,
-) {
- val now by rtcStateSecs()
-
- val shape = RoundedCornerShape(
- topStart = 12.dp,
- bottomStart = 12.dp,
- )
-
- Row(
- modifier = modifier
- .widthIn(min = 100.dp)
- .clip(shape)
- .background(Colors.lightGrey)
- .padding(top = 12.dp, bottom = 12.dp, start = 12.dp, end = 16.dp),
- verticalAlignment = Alignment.CenterVertically
- ) {
- Icon(
- painter = painterResource(id = R.drawable.timer_outline),
- contentDescription = null,
- modifier = Modifier.size(20.dp),
- tint = Colors.expiryTimerForeground
- )
-
- Spacer(Modifier.width(8.dp))
-
- Text(
- text = formatTimer(duration = expiryTime - now),
- fontSize = 16.sp,
- fontWeight = FontWeight.W600,
- color = Colors.expiryTimerForeground
- )
- }
-}
-
-@Composable
-@Preview
-fun PreviewExpiryTimer() {
- Timer(Timestamp.now() + Duration.ofMinutes(5), Modifier)
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/UserCamButton.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/UserCamButton.kt
deleted file mode 100644
index db5b273f3..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/UserCamButton.kt
+++ /dev/null
@@ -1,110 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import ai.pipecat.client.daily.VoiceClientVideoView
-import ai.pipecat.client.types.MediaTrackId
-import ai.pipecat.simple_chatbot_client.R
-import ai.pipecat.simple_chatbot_client.ui.theme.Colors
-import androidx.compose.animation.animateColorAsState
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.material3.Icon
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.viewinterop.AndroidView
-
-@Composable
-fun UserCamButton(
- onClick: () -> Unit,
- camEnabled: Boolean,
- camTrackId: MediaTrackId?,
- modifier: Modifier,
-) {
- Box(
- modifier = modifier.padding(15.dp).size(96.dp),
- contentAlignment = Alignment.Center
- ) {
- val color by animateColorAsState(
- if (camEnabled) {
- Colors.unmutedMicBackground
- } else {
- Colors.mutedMicBackground
- }
- )
-
- Box(
- Modifier
- .fillMaxSize()
- .shadow(3.dp, CircleShape)
- .border(6.dp, Color.White, CircleShape)
- .border(1.dp, Colors.lightGrey, CircleShape)
- .clip(CircleShape)
- .background(color)
- .clickable(onClick = onClick),
- contentAlignment = Alignment.Center,
- ) {
- if (camTrackId != null) {
- AndroidView(
- factory = { context ->
- VoiceClientVideoView(context)
- },
- update = { view ->
- view.voiceClientTrack = camTrackId
- }
- )
- } else {
- Icon(
- modifier = Modifier.size(30.dp),
- painter = painterResource(
- if (camEnabled) {
- R.drawable.video
- } else {
- R.drawable.video_off
- }
- ),
- tint = Color.White,
- contentDescription = if (camEnabled) {
- "Disable camera"
- } else {
- "Enable camera"
- },
- )
- }
- }
- }
-}
-
-@Composable
-@Preview
-fun PreviewUserCamButton() {
- UserCamButton(
- onClick = {},
- camTrackId = null,
- camEnabled = true,
- modifier = Modifier,
- )
-}
-
-@Composable
-@Preview
-fun PreviewUserCamButtonMuted() {
- UserCamButton(
- onClick = {},
- camTrackId = null,
- camEnabled = false,
- modifier = Modifier,
- )
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/UserMicButton.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/UserMicButton.kt
deleted file mode 100644
index 8c7eb7d5e..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/UserMicButton.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui
-
-import ai.pipecat.simple_chatbot_client.R
-import ai.pipecat.simple_chatbot_client.ui.theme.Colors
-import androidx.compose.animation.animateColorAsState
-import androidx.compose.animation.core.animateDpAsState
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.material3.Icon
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.FloatState
-import androidx.compose.runtime.State
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-
-@Composable
-fun UserMicButton(
- onClick: () -> Unit,
- micEnabled: Boolean,
- modifier: Modifier,
- isTalking: State,
- audioLevel: FloatState,
-) {
- Box(
- modifier = modifier.padding(15.dp),
- contentAlignment = Alignment.Center
- ) {
- val borderThickness by animateDpAsState(
- if (isTalking.value) {
- (24.dp * Math.pow(audioLevel.floatValue.toDouble(), 0.3).toFloat()) + 3.dp
- } else {
- 6.dp
- }
- )
-
- val color by animateColorAsState(
- if (!micEnabled) {
- Colors.mutedMicBackground
- } else if (isTalking.value) {
- Color.Black
- } else {
- Colors.unmutedMicBackground
- }
- )
-
- Box(
- Modifier
- .shadow(3.dp, CircleShape)
- .border(borderThickness, Color.White, CircleShape)
- .border(1.dp, Colors.lightGrey, CircleShape)
- .clip(CircleShape)
- .background(color)
- .clickable(onClick = onClick)
- .padding(36.dp),
- contentAlignment = Alignment.Center,
- ) {
- Icon(
- modifier = Modifier.size(48.dp),
- painter = painterResource(
- if (micEnabled) {
- R.drawable.microphone
- } else {
- R.drawable.microphone_off
- }
- ),
- tint = Color.White,
- contentDescription = if (micEnabled) {
- "Mute microphone"
- } else {
- "Unmute microphone"
- },
- )
- }
- }
-}
-
-@Composable
-@Preview
-fun PreviewUserMicButton() {
- UserMicButton(
- onClick = {},
- micEnabled = true,
- modifier = Modifier,
- isTalking = remember { mutableStateOf(false) },
- audioLevel = remember { mutableFloatStateOf(1.0f) }
- )
-}
-
-@Composable
-@Preview
-fun PreviewUserMicButtonMuted() {
- UserMicButton(
- onClick = {},
- micEnabled = false,
- modifier = Modifier,
- isTalking = remember { mutableStateOf(false) },
- audioLevel = remember { mutableFloatStateOf(1.0f) }
- )
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Color.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Color.kt
deleted file mode 100644
index 5ac1ee190..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Color.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui.theme
-
-import androidx.compose.ui.graphics.Color
-
-object Colors {
- val buttonNormal = Color(0xFF374151)
- val buttonWarning = Color(0xFFE53935)
- val buttonSection = Color(0xFFDFF1FF)
-
- val activityBackground = Color(0xFFF9FAFB)
- val mainSurfaceBackground = Color.White
-
- val lightGrey = Color(0x7FE5E7EB)
- val expiryTimerForeground = Color.Black
- val logoBorder = Color(0xFFE2E8F0)
- val endButton = Color(0xFF0F172A)
- val textFieldBorder = Color(0xFFDFE6EF)
-
- val botIndicatorBackground = Color(0xFF374151)
- val mutedMicBackground = Color(0xFFF04A4A)
- val unmutedMicBackground = Color(0xFF616978)
-}
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Theme.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Theme.kt
deleted file mode 100644
index e6341638d..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Theme.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui.theme
-
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.TextFieldDefaults
-import androidx.compose.material3.lightColorScheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.graphics.Color
-
-private val LightColorScheme = lightColorScheme(
- primary = Colors.buttonNormal,
- secondary = Colors.buttonWarning,
- background = Colors.activityBackground,
- surface = Colors.mainSurfaceBackground
-)
-
-@Composable
-fun RTVIClientTheme(
- content: @Composable () -> Unit
-) {
- val colorScheme = LightColorScheme
-
- MaterialTheme(
- colorScheme = colorScheme,
- typography = Typography,
- content = content
- )
-}
-
-@Composable
-fun textFieldColors() = TextFieldDefaults.colors().copy(
- unfocusedContainerColor = Colors.activityBackground,
- focusedContainerColor = Colors.activityBackground,
- focusedIndicatorColor = Color.Transparent,
- disabledIndicatorColor = Color.Transparent,
- unfocusedIndicatorColor = Color.Transparent,
-)
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Type.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Type.kt
deleted file mode 100644
index 58085a30d..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/ui/theme/Type.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-package ai.pipecat.simple_chatbot_client.ui.theme
-
-import ai.pipecat.simple_chatbot_client.R
-import androidx.compose.material3.Typography
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.font.Font
-import androidx.compose.ui.text.font.FontFamily
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.sp
-
-object TextStyles {
- val base = TextStyle(fontFamily = FontFamily(Font(R.font.inter)))
-}
-
-// Set of Material typography styles to start with
-val Typography = Typography(
- bodyLarge = TextStyle(
- fontFamily = FontFamily.Default,
- fontWeight = FontWeight.Normal,
- fontSize = 16.sp,
- lineHeight = 24.sp,
- letterSpacing = 0.5.sp
- )
- /* Other default text styles to override
- titleLarge = TextStyle(
- fontFamily = FontFamily.Default,
- fontWeight = FontWeight.Normal,
- fontSize = 22.sp,
- lineHeight = 28.sp,
- letterSpacing = 0.sp
- ),
- labelSmall = TextStyle(
- fontFamily = FontFamily.Default,
- fontWeight = FontWeight.Medium,
- fontSize = 11.sp,
- lineHeight = 16.sp,
- letterSpacing = 0.5.sp
- )
- */
-)
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/utils/RealTimeClock.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/utils/RealTimeClock.kt
deleted file mode 100644
index b67f1605f..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/utils/RealTimeClock.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package ai.pipecat.simple_chatbot_client.utils
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.flow
-
-private val rtcFlowSecs = flow {
- while(true) {
- val now = Timestamp.now().toEpochMilli()
-
- val rounded = ((now + 500) / 1000) * 1000
- emit(Timestamp.ofEpochMilli(rounded))
-
- val target = rounded + 1000
- delay(target - now)
- }
-}
-
-@Composable
-fun rtcStateSecs() = rtcFlowSecs.collectAsState(initial = Timestamp.now())
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/utils/TimeUtils.kt b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/utils/TimeUtils.kt
deleted file mode 100644
index 46841446b..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/java/ai/pipecat/simple_chatbot_client/utils/TimeUtils.kt
+++ /dev/null
@@ -1,64 +0,0 @@
-package ai.pipecat.simple_chatbot_client.utils
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
-import java.time.Duration
-import java.time.Instant
-import java.time.format.DateTimeFormatter
-import java.util.Date
-
-// Wrapper for Compose stability
-@Immutable
-@JvmInline
-value class Timestamp(
- val value: Instant
-) : Comparable {
- val isInPast: Boolean
- get() = value < Instant.now()
-
- val isInFuture: Boolean
- get() = value > Instant.now()
-
- fun toEpochMilli() = value.toEpochMilli()
-
- operator fun plus(duration: Duration) = Timestamp(value + duration)
-
- operator fun minus(duration: Duration) = Timestamp(value - duration)
-
- operator fun minus(rhs: Timestamp) = Duration.between(rhs.value, value)
-
- override operator fun compareTo(other: Timestamp) = value.compareTo(other.value)
-
- fun toISOString(): String = DateTimeFormatter.ISO_INSTANT.format(value)
-
- override fun toString() = toISOString()
-
- companion object {
- fun now() = Timestamp(Instant.now())
-
- fun ofEpochMilli(value: Long) = Timestamp(Instant.ofEpochMilli(value))
-
- fun ofEpochSecs(value: Long) = ofEpochMilli(value * 1000)
-
- fun parse(value: CharSequence) = Timestamp(Instant.parse(value))
-
- fun from(date: Date) = Timestamp(date.toInstant())
- }
-}
-
-@Composable
-fun formatTimer(duration: Duration): String {
-
- if (duration.seconds < 0) {
- return "0s"
- }
-
- val mins = duration.seconds / 60
- val secs = duration.seconds % 60
-
- return if (mins == 0L) {
- "${secs}s"
- } else {
- "${mins}m ${secs}s"
- }
-}
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/ic_launcher_background.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index 07d5da9cb..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/ic_launcher_foreground.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/ic_launcher_foreground.xml
deleted file mode 100644
index 2b068d114..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/microphone.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/microphone.xml
deleted file mode 100644
index ed375ff21..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/microphone.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/microphone_off.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/microphone_off.xml
deleted file mode 100644
index bbeb43c59..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/microphone_off.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/phone_hangup.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/phone_hangup.xml
deleted file mode 100644
index a637344c3..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/phone_hangup.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/timer_outline.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/timer_outline.xml
deleted file mode 100644
index ef0ca41fe..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/timer_outline.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/video.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/video.xml
deleted file mode 100644
index bce7a9ed5..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/video.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/video_off.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/video_off.xml
deleted file mode 100644
index c06bc38a3..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/drawable/video_off.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/font/inter.ttf b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/font/inter.ttf
deleted file mode 100644
index e31b51e3e..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/font/inter.ttf and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index 6f3b755bf..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index 6f3b755bf..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-hdpi/ic_launcher.webp
deleted file mode 100644
index c209e78ec..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-hdpi/ic_launcher_round.webp
deleted file mode 100644
index b2dfe3d1b..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-mdpi/ic_launcher.webp
deleted file mode 100644
index 4f0f1d64e..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-mdpi/ic_launcher_round.webp
deleted file mode 100644
index 62b611da0..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xhdpi/ic_launcher.webp
deleted file mode 100644
index 948a3070f..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
deleted file mode 100644
index 1b9a6956b..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxhdpi/ic_launcher.webp
deleted file mode 100644
index 28d4b77f9..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
deleted file mode 100644
index 9287f5083..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
deleted file mode 100644
index aa7d6427e..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
deleted file mode 100644
index 9126ae37c..000000000
Binary files a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/values/strings.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/values/strings.xml
deleted file mode 100644
index d6b0d9702..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- Pipecat Simple Chatbot Client
-
diff --git a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/values/themes.xml b/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/values/themes.xml
deleted file mode 100644
index 3675aa6ba..000000000
--- a/examples/simple-chatbot/client/android/simple-chatbot-client/src/main/res/values/themes.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/ios/.gitignore b/examples/simple-chatbot/client/ios/.gitignore
deleted file mode 100644
index f89982e48..000000000
--- a/examples/simple-chatbot/client/ios/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/SimpleChatbot.xcodeproj/xcuserdata/
-/SimpleChatbot.xcodeproj/project.xcworkspace/xcuserdata/
diff --git a/examples/simple-chatbot/client/ios/README.md b/examples/simple-chatbot/client/ios/README.md
deleted file mode 100644
index 02c27582d..000000000
--- a/examples/simple-chatbot/client/ios/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# iOS implementation
-
-Basic implementation using the [Pipecat iOS SDK](https://docs.pipecat.ai/client/ios/introduction).
-
-## Prerequisites
-
-1. Run the bot server. See the [server README](../../server).
-2. Install [Xcode 15](https://developer.apple.com/xcode/), and set up your device [to run your own applications](https://developer.apple.com/documentation/xcode/distributing-your-app-to-registered-devices).
-
-## Running locally
-
-1. Clone this repository locally.
-2. Open the SimpleChatbot.xcodeproj in Xcode.
-3. Tell Xcode to update its Package Dependencies by clicking File -> Packages -> Update to Latest Package Versions.
-4. Build the project.
-5. Run the project on your device.
-6. Connect to the URL you are testing.
-
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.pbxproj b/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.pbxproj
deleted file mode 100644
index 478f90bbd..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,711 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 56;
- objects = {
-
-/* Begin PBXBuildFile section */
- 90031FA72C616EE700408370 /* SimpleChatbotApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FA62C616EE700408370 /* SimpleChatbotApp.swift */; };
- 90031FA92C616EE700408370 /* PreJoinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FA82C616EE700408370 /* PreJoinView.swift */; };
- 90031FAB2C616EE800408370 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 90031FAA2C616EE800408370 /* Assets.xcassets */; };
- 90031FAE2C616EE800408370 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 90031FAD2C616EE800408370 /* Preview Assets.xcassets */; };
- 90031FB82C616EE900408370 /* SimpleChatbotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FB72C616EE900408370 /* SimpleChatbotTests.swift */; };
- 90031FC22C616EE900408370 /* SimpleChatbotUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FC12C616EE900408370 /* SimpleChatbotUITests.swift */; };
- 90031FC42C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FC32C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift */; };
- 90031FDC2C6D5DD700408370 /* ToastModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90031FDB2C6D5DD700408370 /* ToastModifier.swift */; };
- 90ABB98E2C735ED6000D9CC7 /* MeetingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB98D2C735ED6000D9CC7 /* MeetingView.swift */; };
- 90ABB9902C736A8B000D9CC7 /* WaveformView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB98F2C736A8B000D9CC7 /* WaveformView.swift */; };
- 90ABB9932C73820D000D9CC7 /* MicrophoneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9922C73820D000D9CC7 /* MicrophoneView.swift */; };
- 90ABB9982C738356000D9CC7 /* CustomColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9972C738356000D9CC7 /* CustomColors.swift */; };
- 90ABB99A2C73A6A9000D9CC7 /* MockCallContainerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9992C73A6A9000D9CC7 /* MockCallContainerModel.swift */; };
- 90ABB99D2C73C2D1000D9CC7 /* CallContainerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB99C2C73C2D1000D9CC7 /* CallContainerModel.swift */; };
- 90ABB9A32C74E1CE000D9CC7 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9A22C74E1CE000D9CC7 /* SettingsView.swift */; };
- 90ABB9A62C74EA8A000D9CC7 /* SettingsPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9A52C74EA8A000D9CC7 /* SettingsPreference.swift */; };
- 90ABB9A82C74EAB1000D9CC7 /* SettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABB9A72C74EAB1000D9CC7 /* SettingsManager.swift */; };
- 90CC98B02E158093003C2706 /* PipecatClientIOSDaily in Frameworks */ = {isa = PBXBuildFile; productRef = 90CC98AF2E158093003C2706 /* PipecatClientIOSDaily */; };
- 90CC98B62E15820B003C2706 /* PipecatClientIOSDaily in Frameworks */ = {isa = PBXBuildFile; productRef = 90CC98B52E15820B003C2706 /* PipecatClientIOSDaily */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 90031FB42C616EE900408370 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 90031F9B2C616EE700408370 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 90031FA22C616EE700408370;
- remoteInfo = SimpleChatbot;
- };
- 90031FBE2C616EE900408370 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 90031F9B2C616EE700408370 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 90031FA22C616EE700408370;
- remoteInfo = SimpleChatbot;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 90031FA32C616EE700408370 /* SimpleChatbot.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SimpleChatbot.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 90031FA62C616EE700408370 /* SimpleChatbotApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleChatbotApp.swift; sourceTree = ""; };
- 90031FA82C616EE700408370 /* PreJoinView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreJoinView.swift; sourceTree = ""; };
- 90031FAA2C616EE800408370 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- 90031FAD2C616EE800408370 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
- 90031FB32C616EE900408370 /* SimpleChatbotTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleChatbotTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 90031FB72C616EE900408370 /* SimpleChatbotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleChatbotTests.swift; sourceTree = ""; };
- 90031FBD2C616EE900408370 /* SimpleChatbotUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleChatbotUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 90031FC12C616EE900408370 /* SimpleChatbotUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleChatbotUITests.swift; sourceTree = ""; };
- 90031FC32C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleChatbotUITestsLaunchTests.swift; sourceTree = ""; };
- 90031FD62C63FD6A00408370 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
- 90031FDB2C6D5DD700408370 /* ToastModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastModifier.swift; sourceTree = ""; };
- 90ABB98D2C735ED6000D9CC7 /* MeetingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingView.swift; sourceTree = ""; };
- 90ABB98F2C736A8B000D9CC7 /* WaveformView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaveformView.swift; sourceTree = ""; };
- 90ABB9922C73820D000D9CC7 /* MicrophoneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MicrophoneView.swift; sourceTree = ""; };
- 90ABB9972C738356000D9CC7 /* CustomColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomColors.swift; sourceTree = ""; };
- 90ABB9992C73A6A9000D9CC7 /* MockCallContainerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCallContainerModel.swift; sourceTree = ""; };
- 90ABB99C2C73C2D1000D9CC7 /* CallContainerModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallContainerModel.swift; sourceTree = ""; };
- 90ABB9A22C74E1CE000D9CC7 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; };
- 90ABB9A52C74EA8A000D9CC7 /* SettingsPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsPreference.swift; sourceTree = ""; };
- 90ABB9A72C74EAB1000D9CC7 /* SettingsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsManager.swift; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 90031FA02C616EE700408370 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90CC98B62E15820B003C2706 /* PipecatClientIOSDaily in Frameworks */,
- 90CC98B02E158093003C2706 /* PipecatClientIOSDaily in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FB02C616EE900408370 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FBA2C616EE900408370 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 90031F9A2C616EE700408370 = {
- isa = PBXGroup;
- children = (
- 90031FA52C616EE700408370 /* SimpleChatbot */,
- 90031FB62C616EE900408370 /* SimpleChatbotTests */,
- 90031FC02C616EE900408370 /* SimpleChatbotUITests */,
- 90031FA42C616EE700408370 /* Products */,
- );
- sourceTree = "";
- };
- 90031FA42C616EE700408370 /* Products */ = {
- isa = PBXGroup;
- children = (
- 90031FA32C616EE700408370 /* SimpleChatbot.app */,
- 90031FB32C616EE900408370 /* SimpleChatbotTests.xctest */,
- 90031FBD2C616EE900408370 /* SimpleChatbotUITests.xctest */,
- );
- name = Products;
- sourceTree = "";
- };
- 90031FA52C616EE700408370 /* SimpleChatbot */ = {
- isa = PBXGroup;
- children = (
- 90ABB99B2C73C2C5000D9CC7 /* model */,
- 90031FDD2C6D61E000408370 /* views */,
- 90031FD62C63FD6A00408370 /* Info.plist */,
- 90031FA62C616EE700408370 /* SimpleChatbotApp.swift */,
- 90031FAA2C616EE800408370 /* Assets.xcassets */,
- 90031FAC2C616EE800408370 /* Preview Content */,
- );
- path = SimpleChatbot;
- sourceTree = "";
- };
- 90031FAC2C616EE800408370 /* Preview Content */ = {
- isa = PBXGroup;
- children = (
- 90031FAD2C616EE800408370 /* Preview Assets.xcassets */,
- );
- path = "Preview Content";
- sourceTree = "";
- };
- 90031FB62C616EE900408370 /* SimpleChatbotTests */ = {
- isa = PBXGroup;
- children = (
- 90031FB72C616EE900408370 /* SimpleChatbotTests.swift */,
- );
- path = SimpleChatbotTests;
- sourceTree = "";
- };
- 90031FC02C616EE900408370 /* SimpleChatbotUITests */ = {
- isa = PBXGroup;
- children = (
- 90031FC12C616EE900408370 /* SimpleChatbotUITests.swift */,
- 90031FC32C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift */,
- );
- path = SimpleChatbotUITests;
- sourceTree = "";
- };
- 90031FDD2C6D61E000408370 /* views */ = {
- isa = PBXGroup;
- children = (
- 90ABB99E2C73C3A9000D9CC7 /* components */,
- 90ABB9962C738346000D9CC7 /* extensions */,
- 90ABB9A42C74EA52000D9CC7 /* settings */,
- 90031FA82C616EE700408370 /* PreJoinView.swift */,
- 90ABB98D2C735ED6000D9CC7 /* MeetingView.swift */,
- );
- path = views;
- sourceTree = "";
- };
- 90ABB9962C738346000D9CC7 /* extensions */ = {
- isa = PBXGroup;
- children = (
- 90ABB9972C738356000D9CC7 /* CustomColors.swift */,
- );
- path = extensions;
- sourceTree = "";
- };
- 90ABB99B2C73C2C5000D9CC7 /* model */ = {
- isa = PBXGroup;
- children = (
- 90ABB9992C73A6A9000D9CC7 /* MockCallContainerModel.swift */,
- 90ABB99C2C73C2D1000D9CC7 /* CallContainerModel.swift */,
- );
- path = model;
- sourceTree = "";
- };
- 90ABB99E2C73C3A9000D9CC7 /* components */ = {
- isa = PBXGroup;
- children = (
- 90ABB98F2C736A8B000D9CC7 /* WaveformView.swift */,
- 90ABB9922C73820D000D9CC7 /* MicrophoneView.swift */,
- 90031FDB2C6D5DD700408370 /* ToastModifier.swift */,
- );
- path = components;
- sourceTree = "";
- };
- 90ABB9A42C74EA52000D9CC7 /* settings */ = {
- isa = PBXGroup;
- children = (
- 90ABB9A52C74EA8A000D9CC7 /* SettingsPreference.swift */,
- 90ABB9A72C74EAB1000D9CC7 /* SettingsManager.swift */,
- 90ABB9A22C74E1CE000D9CC7 /* SettingsView.swift */,
- );
- path = settings;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 90031FA22C616EE700408370 /* SimpleChatbot */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 90031FC72C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbot" */;
- buildPhases = (
- 90031F9F2C616EE700408370 /* Sources */,
- 90031FA02C616EE700408370 /* Frameworks */,
- 90031FA12C616EE700408370 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = SimpleChatbot;
- packageProductDependencies = (
- 90CC98AF2E158093003C2706 /* PipecatClientIOSDaily */,
- 90CC98B52E15820B003C2706 /* PipecatClientIOSDaily */,
- );
- productName = SimpleChatbot;
- productReference = 90031FA32C616EE700408370 /* SimpleChatbot.app */;
- productType = "com.apple.product-type.application";
- };
- 90031FB22C616EE900408370 /* SimpleChatbotTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 90031FCA2C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbotTests" */;
- buildPhases = (
- 90031FAF2C616EE900408370 /* Sources */,
- 90031FB02C616EE900408370 /* Frameworks */,
- 90031FB12C616EE900408370 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 90031FB52C616EE900408370 /* PBXTargetDependency */,
- );
- name = SimpleChatbotTests;
- productName = SimpleChatbotTests;
- productReference = 90031FB32C616EE900408370 /* SimpleChatbotTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
- 90031FBC2C616EE900408370 /* SimpleChatbotUITests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 90031FCD2C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbotUITests" */;
- buildPhases = (
- 90031FB92C616EE900408370 /* Sources */,
- 90031FBA2C616EE900408370 /* Frameworks */,
- 90031FBB2C616EE900408370 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 90031FBF2C616EE900408370 /* PBXTargetDependency */,
- );
- name = SimpleChatbotUITests;
- productName = SimpleChatbotUITests;
- productReference = 90031FBD2C616EE900408370 /* SimpleChatbotUITests.xctest */;
- productType = "com.apple.product-type.bundle.ui-testing";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 90031F9B2C616EE700408370 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- BuildIndependentTargetsInParallel = 1;
- LastSwiftUpdateCheck = 1540;
- LastUpgradeCheck = 1540;
- TargetAttributes = {
- 90031FA22C616EE700408370 = {
- CreatedOnToolsVersion = 15.4;
- };
- 90031FB22C616EE900408370 = {
- CreatedOnToolsVersion = 15.4;
- TestTargetID = 90031FA22C616EE700408370;
- };
- 90031FBC2C616EE900408370 = {
- CreatedOnToolsVersion = 15.4;
- TestTargetID = 90031FA22C616EE700408370;
- };
- };
- };
- buildConfigurationList = 90031F9E2C616EE700408370 /* Build configuration list for PBXProject "SimpleChatbot" */;
- compatibilityVersion = "Xcode 14.0";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 90031F9A2C616EE700408370;
- packageReferences = (
- 90CC98B42E15820B003C2706 /* XCRemoteSwiftPackageReference "pipecat-client-ios-daily" */,
- );
- productRefGroup = 90031FA42C616EE700408370 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 90031FA22C616EE700408370 /* SimpleChatbot */,
- 90031FB22C616EE900408370 /* SimpleChatbotTests */,
- 90031FBC2C616EE900408370 /* SimpleChatbotUITests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 90031FA12C616EE700408370 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90031FAE2C616EE800408370 /* Preview Assets.xcassets in Resources */,
- 90031FAB2C616EE800408370 /* Assets.xcassets in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FB12C616EE900408370 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FBB2C616EE900408370 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 90031F9F2C616EE700408370 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90ABB99D2C73C2D1000D9CC7 /* CallContainerModel.swift in Sources */,
- 90ABB9A62C74EA8A000D9CC7 /* SettingsPreference.swift in Sources */,
- 90ABB99A2C73A6A9000D9CC7 /* MockCallContainerModel.swift in Sources */,
- 90031FA92C616EE700408370 /* PreJoinView.swift in Sources */,
- 90ABB9982C738356000D9CC7 /* CustomColors.swift in Sources */,
- 90ABB98E2C735ED6000D9CC7 /* MeetingView.swift in Sources */,
- 90ABB9A32C74E1CE000D9CC7 /* SettingsView.swift in Sources */,
- 90ABB9932C73820D000D9CC7 /* MicrophoneView.swift in Sources */,
- 90ABB9A82C74EAB1000D9CC7 /* SettingsManager.swift in Sources */,
- 90031FDC2C6D5DD700408370 /* ToastModifier.swift in Sources */,
- 90031FA72C616EE700408370 /* SimpleChatbotApp.swift in Sources */,
- 90ABB9902C736A8B000D9CC7 /* WaveformView.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FAF2C616EE900408370 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90031FB82C616EE900408370 /* SimpleChatbotTests.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 90031FB92C616EE900408370 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 90031FC42C616EE900408370 /* SimpleChatbotUITestsLaunchTests.swift in Sources */,
- 90031FC22C616EE900408370 /* SimpleChatbotUITests.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 90031FB52C616EE900408370 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 90031FA22C616EE700408370 /* SimpleChatbot */;
- targetProxy = 90031FB42C616EE900408370 /* PBXContainerItemProxy */;
- };
- 90031FBF2C616EE900408370 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 90031FA22C616EE700408370 /* SimpleChatbot */;
- targetProxy = 90031FBE2C616EE900408370 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
- 90031FC52C616EE900408370 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- ENABLE_USER_SCRIPT_SANDBOXING = YES;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.5;
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- 90031FC62C616EE900408370 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_USER_SCRIPT_SANDBOXING = YES;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.5;
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MTL_ENABLE_DEBUG_INFO = NO;
- MTL_FAST_MATH = YES;
- SDKROOT = iphoneos;
- SWIFT_COMPILATION_MODE = wholemodule;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 90031FC82C616EE900408370 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_ASSET_PATHS = "\"SimpleChatbot/Preview Content\"";
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- ENABLE_PREVIEWS = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = SimpleChatbot/Info.plist;
- INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
- INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbot;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- 90031FC92C616EE900408370 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_ASSET_PATHS = "\"SimpleChatbot/Preview Content\"";
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- ENABLE_PREVIEWS = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = SimpleChatbot/Info.plist;
- INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
- INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbot;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Release;
- };
- 90031FCB2C616EE900408370 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- BUNDLE_LOADER = "$(TEST_HOST)";
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- GENERATE_INFOPLIST_FILE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.5;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbotTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimpleChatbot.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SimpleChatbot";
- };
- name = Debug;
- };
- 90031FCC2C616EE900408370 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- BUNDLE_LOADER = "$(TEST_HOST)";
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- GENERATE_INFOPLIST_FILE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.5;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbotTests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimpleChatbot.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SimpleChatbot";
- };
- name = Release;
- };
- 90031FCE2C616EE900408370 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- GENERATE_INFOPLIST_FILE = YES;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbotUITests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_TARGET_NAME = SimpleChatbot;
- };
- name = Debug;
- };
- 90031FCF2C616EE900408370 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = EEBGKV9N3N;
- GENERATE_INFOPLIST_FILE = YES;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = co.daily.SimpleChatbotUITests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = NO;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_TARGET_NAME = SimpleChatbot;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 90031F9E2C616EE700408370 /* Build configuration list for PBXProject "SimpleChatbot" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 90031FC52C616EE900408370 /* Debug */,
- 90031FC62C616EE900408370 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 90031FC72C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbot" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 90031FC82C616EE900408370 /* Debug */,
- 90031FC92C616EE900408370 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 90031FCA2C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbotTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 90031FCB2C616EE900408370 /* Debug */,
- 90031FCC2C616EE900408370 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 90031FCD2C616EE900408370 /* Build configuration list for PBXNativeTarget "SimpleChatbotUITests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 90031FCE2C616EE900408370 /* Debug */,
- 90031FCF2C616EE900408370 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
- 90CC98B42E15820B003C2706 /* XCRemoteSwiftPackageReference "pipecat-client-ios-daily" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/pipecat-ai/pipecat-client-ios-daily/";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 0.3.6;
- };
- };
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
- 90CC98AF2E158093003C2706 /* PipecatClientIOSDaily */ = {
- isa = XCSwiftPackageProductDependency;
- productName = PipecatClientIOSDaily;
- };
- 90CC98B52E15820B003C2706 /* PipecatClientIOSDaily */ = {
- isa = XCSwiftPackageProductDependency;
- package = 90CC98B42E15820B003C2706 /* XCRemoteSwiftPackageReference "pipecat-client-ios-daily" */;
- productName = PipecatClientIOSDaily;
- };
-/* End XCSwiftPackageProductDependency section */
- };
- rootObject = 90031F9B2C616EE700408370 /* Project object */;
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a62..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
deleted file mode 100644
index 08de0be8d..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
-
-
-
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
deleted file mode 100644
index a81425dd0..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "originHash" : "cc17f08b06def9570d775e9c6f7a8dc10d1588b98127e977c47d052abac659b7",
- "pins" : [
- {
- "identity" : "daily-client-ios",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/daily-co/daily-client-ios.git",
- "state" : {
- "revision" : "431938db25e5807120e89e2dc5bab1c076729f59",
- "version" : "0.31.0"
- }
- },
- {
- "identity" : "pipecat-client-ios",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/pipecat-ai/pipecat-client-ios.git",
- "state" : {
- "revision" : "f92b5e68e56a8311f7d8ead68a7a5674843cbc40",
- "version" : "0.3.6"
- }
- },
- {
- "identity" : "pipecat-client-ios-daily",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/pipecat-ai/pipecat-client-ios-daily/",
- "state" : {
- "revision" : "8f494da903192c22c367ecf9e51248c9b651fbc6",
- "version" : "0.3.6"
- }
- }
- ],
- "version" : 3
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/xcshareddata/xcschemes/SimpleChatbot.xcscheme b/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/xcshareddata/xcschemes/SimpleChatbot.xcscheme
deleted file mode 100644
index 632ae199d..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot.xcodeproj/xcshareddata/xcschemes/SimpleChatbot.xcscheme
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 44ac9cc28..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "images" : [
- {
- "filename" : "appstore.png",
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/appstore.png b/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/appstore.png
deleted file mode 100644
index e6e615ad2..000000000
Binary files a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/AppIcon.appiconset/appstore.png and /dev/null differ
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/Contents.json b/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/Contents.json
deleted file mode 100644
index 73c00596a..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Contents.json b/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Contents.json
deleted file mode 100644
index 6e1102089..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Square Black.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Square Black.svg b/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Square Black.svg
deleted file mode 100644
index 0db9a0f64..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/Assets.xcassets/pipecat.imageset/Square Black.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/Info.plist b/examples/simple-chatbot/client/ios/SimpleChatbot/Info.plist
deleted file mode 100644
index c5a7b5685..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/Info.plist
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- UIBackgroundModes
-
- voip
-
- NSCameraUsageDescription
- Camera is necessary for transmitting video in a call
- NSMicrophoneUsageDescription
- Microphone is necessary for transmitting audio in a call
- NSAppTransportSecurity
-
- NSAllowsLocalNetworking
-
-
-
-
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/Preview Content/Preview Assets.xcassets/Contents.json b/examples/simple-chatbot/client/ios/SimpleChatbot/Preview Content/Preview Assets.xcassets/Contents.json
deleted file mode 100644
index 73c00596a..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/Preview Content/Preview Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/SimpleChatbotApp.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/SimpleChatbotApp.swift
deleted file mode 100644
index 7b1e78703..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/SimpleChatbotApp.swift
+++ /dev/null
@@ -1,18 +0,0 @@
-import SwiftUI
-
-@main
-struct SimpleChatbotApp: App {
-
- @StateObject var callContainerModel = CallContainerModel()
-
- var body: some Scene {
- WindowGroup {
- if (!callContainerModel.isInCall) {
- PreJoinView().environmentObject(callContainerModel)
- } else {
- MeetingView().environmentObject(callContainerModel)
- }
- }
- }
-
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/model/CallContainerModel.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/model/CallContainerModel.swift
deleted file mode 100644
index b8663bb3b..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/model/CallContainerModel.swift
+++ /dev/null
@@ -1,231 +0,0 @@
-import SwiftUI
-
-import PipecatClientIOSDaily
-import PipecatClientIOS
-
-class CallContainerModel: ObservableObject {
-
- @Published var voiceClientStatus: String = TransportState.disconnected.description
- @Published var isInCall: Bool = false
- @Published var isBotReady: Bool = false
- @Published var timerCount = 0
-
- @Published var isMicEnabled: Bool = false
-
- @Published var toastMessage: String? = nil
- @Published var showToast: Bool = false
-
- @Published
- var remoteAudioLevel: Float = 0
- @Published
- var localAudioLevel: Float = 0
-
- private var meetingTimer: Timer?
-
- var rtviClientIOS: RTVIClient?
-
- @Published var selectedMic: MediaDeviceId? = nil {
- didSet {
- guard let selectedMic else { return } // don't store nil
- var settings = SettingsManager.getSettings()
- settings.selectedMic = selectedMic.id
- SettingsManager.updateSettings(settings: settings)
- }
- }
- @Published var availableMics: [MediaDeviceInfo] = []
-
- init() {
- // Changing the log level
- PipecatClientIOS.setLogLevel(.warn)
- }
-
- @MainActor
- func connect(backendURL: String) {
- let baseUrl = backendURL.trimmingCharacters(in: .whitespacesAndNewlines)
- if(baseUrl.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty){
- self.showError(message: "Need to fill the backendURL. For more info visit: https://bots.daily.co")
- return
- }
-
- let currentSettings = SettingsManager.getSettings()
- let rtviClientOptions = RTVIClientOptions.init(
- enableMic: currentSettings.enableMic,
- enableCam: false,
- params: RTVIClientParams(
- baseUrl: baseUrl,
- endpoints: RTVIURLEndpoints(connect: "/connect")
- )
- )
- self.rtviClientIOS = RTVIClient.init(
- transport: DailyTransport.init(options: rtviClientOptions),
- options: rtviClientOptions
- )
- self.rtviClientIOS?.delegate = self
- self.rtviClientIOS?.start() { result in
- switch result {
- case .failure(let error):
- self.showError(message: error.localizedDescription)
- self.rtviClientIOS = nil
- case .success():
- // Apply initial mic preference
- if let selectedMic = currentSettings.selectedMic {
- self.selectMic(MediaDeviceId(id: selectedMic))
- }
- // Populate available devices list
- self.availableMics = self.rtviClientIOS?.getAllMics() ?? []
- }
- }
- self.saveCredentials(backendURL: baseUrl)
- }
-
- func disconnect() {
- Task { @MainActor in
- try await self.rtviClientIOS?.disconnect()
- self.rtviClientIOS?.release()
- }
- }
-
- func showError(message: String) {
- self.toastMessage = message
- self.showToast = true
- // Hide the toast after 5 seconds
- DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
- self.showToast = false
- self.toastMessage = nil
- }
- }
-
- @MainActor
- func toggleMicInput() {
- self.rtviClientIOS?.enableMic(enable: !self.isMicEnabled) { result in
- switch result {
- case .success():
- self.isMicEnabled = self.rtviClientIOS?.isMicEnabled ?? false
- case .failure(let error):
- self.showError(message: error.localizedDescription)
- }
- }
- }
-
- private func startTimer(withExpirationTime expirationTime: Int) {
- let currentTime = Int(Date().timeIntervalSince1970)
- self.timerCount = expirationTime - currentTime
- self.meetingTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
- DispatchQueue.main.async {
- self.timerCount -= 1
- }
- }
- }
-
- private func stopTimer() {
- self.meetingTimer?.invalidate()
- self.meetingTimer = nil
- self.timerCount = 0
- }
-
- func saveCredentials(backendURL: String) {
- var currentSettings = SettingsManager.getSettings()
- currentSettings.backendURL = backendURL
- // Saving the settings
- SettingsManager.updateSettings(settings: currentSettings)
- }
-
- @MainActor
- func selectMic(_ mic: MediaDeviceId) {
- self.selectedMic = mic
- self.rtviClientIOS?.updateMic(micId: mic, completion: nil)
- }
-}
-
-extension CallContainerModel:RTVIClientDelegate {
-
- private func handleEvent(eventName: String, eventValue: Any? = nil) {
- if let value = eventValue {
- print("RTVI Demo, received event:\(eventName), value:\(value)")
- } else {
- print("RTVI Demo, received event: \(eventName)")
- }
- }
-
- func onTransportStateChanged(state: TransportState) {
- Task { @MainActor in
- self.handleEvent(eventName: "onTransportStateChanged", eventValue: state)
- self.voiceClientStatus = state.description
- self.isInCall = ( state == .connecting || state == .connected || state == .ready || state == .authenticating )
- }
- }
-
- func onBotReady(botReadyData: BotReadyData) {
- Task { @MainActor in
- self.handleEvent(eventName: "onBotReady.")
- self.isBotReady = true
- if let expirationTime = self.rtviClientIOS?.expiry() {
- self.startTimer(withExpirationTime: expirationTime)
- }
- }
- }
-
- func onConnected() {
- Task { @MainActor in
- self.isMicEnabled = self.rtviClientIOS?.isMicEnabled ?? false
- }
- }
-
- func onDisconnected() {
- Task { @MainActor in
- self.stopTimer()
- self.isBotReady = false
- }
- }
-
- func onRemoteAudioLevel(level: Float, participant: Participant) {
- Task { @MainActor in
- self.remoteAudioLevel = level
- }
- }
-
- func onUserAudioLevel(level: Float) {
- Task { @MainActor in
- self.localAudioLevel = level
- }
- }
-
- func onUserTranscript(data: Transcript) {
- Task { @MainActor in
- if (data.final ?? false) {
- self.handleEvent(eventName: "onUserTranscript", eventValue: data.text)
- }
- }
- }
-
- func onBotTranscript(data: String) {
- Task { @MainActor in
- self.handleEvent(eventName: "onBotTranscript", eventValue: data)
- }
- }
-
- func onError(message: String) {
- Task { @MainActor in
- self.handleEvent(eventName: "onError", eventValue: message)
- self.showError(message: message)
- }
- }
-
- func onTracksUpdated(tracks: Tracks) {
- Task { @MainActor in
- self.handleEvent(eventName: "onTracksUpdated", eventValue: tracks)
- }
- }
-
- func onAvailableMicsUpdated(mics: [MediaDeviceInfo]) {
- Task { @MainActor in
- self.availableMics = mics
- }
- }
-
- func onMicUpdated(mic: MediaDeviceInfo?) {
- Task { @MainActor in
- self.selectedMic = mic?.id
- }
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/model/MockCallContainerModel.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/model/MockCallContainerModel.swift
deleted file mode 100644
index 9d1a8b3be..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/model/MockCallContainerModel.swift
+++ /dev/null
@@ -1,35 +0,0 @@
-import SwiftUI
-import PipecatClientIOS
-
-class MockCallContainerModel: CallContainerModel {
-
- override init() {
- }
-
- override func connect(backendURL: String) {
- print("connect")
- }
-
- override func disconnect() {
- print("disconnect")
- }
-
- override func showError(message: String) {
- self.toastMessage = message
- self.showToast = true
- // Hide the toast after 5 seconds
- DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
- self.showToast = false
- self.toastMessage = nil
- }
- }
-
- func startAudioLevelSimulation() {
- // Simulate audio level changes
- Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
- let newLevel = Float.random(in: 0...1)
- self.remoteAudioLevel = newLevel
- self.localAudioLevel = newLevel
- }
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/MeetingView.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/MeetingView.swift
deleted file mode 100644
index 2bbc9673f..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/MeetingView.swift
+++ /dev/null
@@ -1,107 +0,0 @@
-import SwiftUI
-
-struct MeetingView: View {
-
- @State private var showingSettings = false
- @EnvironmentObject private var model: CallContainerModel
-
- var body: some View {
- VStack {
- // Header Toolbar
- HStack {
- Image("dailyBot")
- .resizable()
- .frame(width: 48, height: 48)
- Spacer()
- HStack {
- Image(systemName: "stopwatch")
- .resizable()
- .frame(width: 24, height: 24)
- Text(timerString(from: self.model.timerCount))
- .font(.headline)
- }.padding()
- .background(Color.timer)
- .cornerRadius(12)
- }
- .padding()
-
- // Main Panel
- VStack {
- VStack {
- WaveformView(audioLevel: model.remoteAudioLevel, isBotReady: model.isBotReady, voiceClientStatus: model.voiceClientStatus)
- }
- .frame(maxHeight: .infinity)
- VStack {
- HStack {
- MicrophoneView(audioLevel: model.localAudioLevel, isMuted: !self.model.isMicEnabled)
- .frame(width: 160, height: 160)
- .onTapGesture {
- self.model.toggleMicInput()
- }
- }
- }
- .frame(height: 120)
- }
- .frame(maxHeight: .infinity)
- .padding()
-
- // Bottom Panel
- VStack {
- HStack {
- Button(action: {
- self.showingSettings = true
- }) {
- HStack {
- Image(systemName: "gearshape")
- .resizable()
- .frame(width: 24, height: 24)
- Text("Settings")
- }
- .frame(maxWidth: .infinity)
- .padding()
- .sheet(isPresented: $showingSettings) {
- SettingsView(showingSettings: $showingSettings).environmentObject(self.model)
- }
- }
- .border(Color.buttonsBorder, width: 1)
- .cornerRadius(12)
- }
- .foregroundColor(.black)
- .padding([.top, .horizontal])
-
- Button(action: {
- self.model.disconnect()
- }) {
- HStack {
- Image(systemName: "rectangle.portrait.and.arrow.right")
- .resizable()
- .frame(width: 24, height: 24)
- Text("End")
- }
- .frame(maxWidth: .infinity)
- .padding()
- }
- .foregroundColor(.white)
- .background(Color.black)
- .cornerRadius(12)
- .padding([.bottom, .horizontal])
- }
- }
- .background(Color.backgroundApp)
- .toast(message: model.toastMessage, isShowing: model.showToast)
- }
-
- func timerString(from count: Int) -> String {
- let hours = count / 3600
- let minutes = (count % 3600) / 60
- let seconds = count % 60
- return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
- }
-}
-
-#Preview {
- let mockModel = MockCallContainerModel()
- let result = MeetingView().environmentObject(mockModel as CallContainerModel)
- mockModel.startAudioLevelSimulation()
- return result
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/PreJoinView.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/PreJoinView.swift
deleted file mode 100644
index fb2390817..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/PreJoinView.swift
+++ /dev/null
@@ -1,42 +0,0 @@
-import SwiftUI
-
-struct PreJoinView: View {
-
- @State var backendURL: String
-
- @EnvironmentObject private var model: CallContainerModel
-
- init() {
- let currentSettings = SettingsManager.getSettings()
- self.backendURL = currentSettings.backendURL
- }
-
- var body: some View {
- VStack(spacing: 20) {
- Image("pipecat")
- .resizable()
- .frame(width: 80, height: 80)
- Text("Pipecat Client iOS.")
- .font(.headline)
- TextField("Server URL", text: $backendURL)
- .textFieldStyle(RoundedBorderTextFieldStyle())
- .frame(maxWidth: .infinity)
- .padding([.bottom, .horizontal])
- Button("Connect") {
- self.model.connect(backendURL: self.backendURL)
- }
- .padding()
- .background(Color.black)
- .foregroundColor(.white)
- .cornerRadius(8)
- }
- .padding()
- .frame(maxHeight: .infinity)
- .background(Color.backgroundApp)
- .toast(message: model.toastMessage, isShowing: model.showToast)
- }
-}
-
-#Preview {
- PreJoinView().environmentObject(MockCallContainerModel() as CallContainerModel)
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/MicrophoneView.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/MicrophoneView.swift
deleted file mode 100644
index 7cdaf1e80..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/MicrophoneView.swift
+++ /dev/null
@@ -1,44 +0,0 @@
-import SwiftUI
-
-struct MicrophoneView: View {
- var audioLevel: Float // Current audio level
- var isMuted: Bool // Muted state
-
- var body: some View {
- GeometryReader { geometry in
- let width = geometry.size.width
- let circleSize = width * 0.9
- let innerCircleSize = width * 0.82
- let audioCircleSize = CGFloat(audioLevel) * (width * 0.95)
-
- ZStack {
- Circle()
- .stroke(Color.gray, lineWidth: 1)
- .frame(width: circleSize)
-
- Circle()
- .fill(isMuted ? Color.disabledMic : Color.backgroundCircle)
- .frame(width: innerCircleSize)
-
- if !isMuted {
- Circle()
- .fill(Color.micVolume)
- .opacity(0.5)
- .frame(width: audioCircleSize)
- .animation(.easeInOut(duration: 0.2), value: audioLevel)
- }
-
- Image(systemName: isMuted ? "mic.slash.fill" : "mic.fill")
- .resizable()
- .scaledToFit()
- .frame(width: width * 0.2)
- .foregroundColor(.white)
- }
- .frame(maxWidth: .infinity, maxHeight: .infinity) // Ensures the ZStack is centered
- }
- }
-}
-
-#Preview {
- MicrophoneView(audioLevel: 1, isMuted: false)
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/ToastModifier.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/ToastModifier.swift
deleted file mode 100644
index 9e36125eb..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/ToastModifier.swift
+++ /dev/null
@@ -1,31 +0,0 @@
-import SwiftUI
-
-struct ToastModifier: ViewModifier {
- var message: String?
- var isShowing: Bool
-
- func body(content: Content) -> some View {
- ZStack {
- content
- if isShowing, let message = message {
- VStack {
- Text(message)
- .padding()
- .background(Color.black.opacity(0.7))
- .foregroundColor(.white)
- .cornerRadius(8)
- .transition(.slide)
- .padding(.top, 50)
- Spacer()
- }
- .animation(.easeInOut(duration: 0.5), value: isShowing)
- }
- }
- }
-}
-
-extension View {
- func toast(message: String?, isShowing: Bool) -> some View {
- self.modifier(ToastModifier(message: message, isShowing: isShowing))
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/WaveformView.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/WaveformView.swift
deleted file mode 100644
index f98d1cb86..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/components/WaveformView.swift
+++ /dev/null
@@ -1,93 +0,0 @@
-import SwiftUI
-
-struct WaveformView: View {
-
- var audioLevel: Float
- var isBotReady: Bool
- var voiceClientStatus: String
-
- @State
- private var audioLevels: [Float] = Array(repeating: 0, count: 5)
- private let dotCount = 5
-
- var body: some View {
- GeometryReader { geometry in
- VStack {
- Spacer()
- HStack {
- Spacer()
- ZStack {
- // Outer gray border
- Circle()
- .stroke(Color.gray, lineWidth: 1)
- .frame(width: geometry.size.width * 0.9, height: geometry.size.width * 0.9)
-
- // Gray middle
- Circle()
- .fill(isBotReady ? Color.backgroundCircle : Color.backgroundCircleNotConnected)
- .frame(width: geometry.size.width * 0.82, height: geometry.size.width * 0.82)
-
- if isBotReady {
- if audioLevel > 0 {
- // Waveform bars inside the circle
- HStack(spacing: 10) {
- ForEach(0.. 1) {
- audioLevel = 1
- }
- // Update the array and shift values
- audioLevels.removeFirst()
- audioLevels.append(newLevel)
- }
- }
-}
-
-#Preview {
- WaveformView(audioLevel: 0, isBotReady: false, voiceClientStatus: "idle")
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/extensions/CustomColors.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/extensions/CustomColors.swift
deleted file mode 100644
index d200537d6..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/extensions/CustomColors.swift
+++ /dev/null
@@ -1,27 +0,0 @@
-import SwiftUI
-
-public extension Color {
-
- static let backgroundCircle = Color(hex: "#374151")
- static let backgroundCircleNotConnected = Color(hex: "#D1D5DB")
- static let backgroundApp = Color(hex: "#F9FAFB")
- static let buttonsBorder = Color(hex: "#E5E7EB")
- static let micVolume = Color(hex: "#86EFAC")
- static let timer = Color(hex: "#E5E7EB")
- static let disabledMic = Color(hex: "#ee6b6e")
- static let disabledVision = Color(hex: "#BBF7D0")
-
- init(hex: String) {
- let scanner = Scanner(string: hex)
- _ = scanner.scanString("#")
-
- var rgb: UInt64 = 0
- scanner.scanHexInt64(&rgb)
-
- let red = Double((rgb >> 16) & 0xFF) / 255.0
- let green = Double((rgb >> 8) & 0xFF) / 255.0
- let blue = Double(rgb & 0xFF) / 255.0
-
- self.init(red: red, green: green, blue: blue)
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsManager.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsManager.swift
deleted file mode 100644
index bfd5034f7..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsManager.swift
+++ /dev/null
@@ -1,21 +0,0 @@
-import Foundation
-
-class SettingsManager {
- private static let preferencesKey = "settingsPreference"
-
- static func getSettings() -> SettingsPreference {
- if let data = UserDefaults.standard.data(forKey: preferencesKey),
- let settings = try? JSONDecoder().decode(SettingsPreference.self, from: data) {
- return settings
- } else {
- // default values in case we don't have any settings
- return SettingsPreference(enableMic: true, backendURL: "http://YOUR_IP:7860")
- }
- }
-
- static func updateSettings(settings: SettingsPreference) {
- if let data = try? JSONEncoder().encode(settings) {
- UserDefaults.standard.set(data, forKey: preferencesKey)
- }
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsPreference.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsPreference.swift
deleted file mode 100644
index b53c4eca9..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsPreference.swift
+++ /dev/null
@@ -1,8 +0,0 @@
-import Foundation
-
-struct SettingsPreference: Codable {
- var selectedMic: String?
- var enableMic: Bool
- var backendURL: String
-}
-
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsView.swift b/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsView.swift
deleted file mode 100644
index 8a503d410..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbot/views/settings/SettingsView.swift
+++ /dev/null
@@ -1,80 +0,0 @@
-import SwiftUI
-import PipecatClientIOS
-
-struct SettingsView: View {
-
- @EnvironmentObject private var model: CallContainerModel
-
- @Binding var showingSettings: Bool
-
- @State private var isMicEnabled: Bool = true
- @State private var backendURL: String = ""
-
- var body: some View {
- NavigationView {
- Form {
- Section {
- List(model.availableMics, id: \.self.id.id) { mic in
- Button(action: {
- model.selectMic(mic.id)
- }) {
- HStack {
- Text(mic.name)
- Spacer()
- if mic.id == model.selectedMic {
- Image(systemName: "checkmark")
- }
- }
- }
- }
- } header: {
- VStack(alignment: .leading) {
- Text("Audio Settings")
- Text("(No selection = system default)")
- }
- }
- Section(header: Text("Start options")) {
- Toggle("Enable Microphone", isOn: $isMicEnabled)
- }
- Section(header: Text("Server")) {
- TextField("Backend URL", text: $backendURL)
- .keyboardType(.URL)
- }
- }
- .navigationTitle("Settings")
- .toolbar {
- ToolbarItem(placement: .cancellationAction) {
- Button("Close") {
- self.saveSettings()
- self.showingSettings = false
- }
- }
- }
- .onAppear {
- self.loadSettings()
- }
- }
- }
-
- private func saveSettings() {
- let newSettings = SettingsPreference(
- selectedMic: model.selectedMic?.id,
- enableMic: isMicEnabled,
- backendURL: backendURL
- )
- SettingsManager.updateSettings(settings: newSettings)
- }
-
- private func loadSettings() {
- let savedSettings = SettingsManager.getSettings()
- self.isMicEnabled = savedSettings.enableMic
- self.backendURL = savedSettings.backendURL
- }
-}
-
-#Preview {
- let mockModel = MockCallContainerModel()
- let result = SettingsView(showingSettings: .constant(true)).environmentObject(mockModel as CallContainerModel)
- mockModel.startAudioLevelSimulation()
- return result
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbotTests/SimpleChatbotTests.swift b/examples/simple-chatbot/client/ios/SimpleChatbotTests/SimpleChatbotTests.swift
deleted file mode 100644
index 8fcb737d7..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbotTests/SimpleChatbotTests.swift
+++ /dev/null
@@ -1,29 +0,0 @@
-import XCTest
-@testable import SimpleChatbot
-
-final class SimpleChatbotTests: XCTestCase {
-
- override func setUpWithError() throws {
- // Put setup code here. This method is called before the invocation of each test method in the class.
- }
-
- override func tearDownWithError() throws {
- // Put teardown code here. This method is called after the invocation of each test method in the class.
- }
-
- func testExample() throws {
- // This is an example of a functional test case.
- // Use XCTAssert and related functions to verify your tests produce the correct results.
- // Any test you write for XCTest can be annotated as throws and async.
- // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
- // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
- }
-
- func testPerformanceExample() throws {
- // This is an example of a performance test case.
- self.measure {
- // Put the code you want to measure the time of here.
- }
- }
-
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbotUITests/SimpleChatbotUITests.swift b/examples/simple-chatbot/client/ios/SimpleChatbotUITests/SimpleChatbotUITests.swift
deleted file mode 100644
index 3a4d61916..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbotUITests/SimpleChatbotUITests.swift
+++ /dev/null
@@ -1,34 +0,0 @@
-import XCTest
-
-final class SimpleChatbotUITests: XCTestCase {
-
- override func setUpWithError() throws {
- // Put setup code here. This method is called before the invocation of each test method in the class.
-
- // In UI tests it is usually best to stop immediately when a failure occurs.
- continueAfterFailure = false
-
- // In UI tests itโs important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
- }
-
- override func tearDownWithError() throws {
- // Put teardown code here. This method is called after the invocation of each test method in the class.
- }
-
- func testExample() throws {
- // UI tests must launch the application that they test.
- let app = XCUIApplication()
- app.launch()
-
- // Use XCTAssert and related functions to verify your tests produce the correct results.
- }
-
- func testLaunchPerformance() throws {
- if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
- // This measures how long it takes to launch your application.
- measure(metrics: [XCTApplicationLaunchMetric()]) {
- XCUIApplication().launch()
- }
- }
- }
-}
diff --git a/examples/simple-chatbot/client/ios/SimpleChatbotUITests/SimpleChatbotUITestsLaunchTests.swift b/examples/simple-chatbot/client/ios/SimpleChatbotUITests/SimpleChatbotUITestsLaunchTests.swift
deleted file mode 100644
index 87d03195d..000000000
--- a/examples/simple-chatbot/client/ios/SimpleChatbotUITests/SimpleChatbotUITestsLaunchTests.swift
+++ /dev/null
@@ -1,25 +0,0 @@
-import XCTest
-
-final class SimpleChatbotUITestsLaunchTests: XCTestCase {
-
- override class var runsForEachTargetApplicationUIConfiguration: Bool {
- true
- }
-
- override func setUpWithError() throws {
- continueAfterFailure = false
- }
-
- func testLaunch() throws {
- let app = XCUIApplication()
- app.launch()
-
- // Insert steps here to perform after app launch but before taking a screenshot,
- // such as logging into a test account or navigating somewhere in the app
-
- let attachment = XCTAttachment(screenshot: app.screenshot())
- attachment.name = "Launch Screen"
- attachment.lifetime = .keepAlways
- add(attachment)
- }
-}
diff --git a/examples/simple-chatbot/client/javascript/README.md b/examples/simple-chatbot/client/javascript/README.md
deleted file mode 100644
index 3b0c7f96e..000000000
--- a/examples/simple-chatbot/client/javascript/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# JavaScript Implementation
-
-Basic implementation using the [Pipecat JavaScript SDK](https://docs.pipecat.ai/client/js/introduction).
-
-## Setup
-
-1. Run the bot server. See the [server README](../../README).
-
-2. Navigate to the `client/javascript` directory:
-
-```bash
-cd client/javascript
-```
-
-3. Install dependencies:
-
-```bash
-npm install
-```
-
-4. Run the client app:
-
-```
-npm run dev
-```
-
-5. Visit http://localhost:5173 in your browser.
diff --git a/examples/simple-chatbot/client/javascript/index.html b/examples/simple-chatbot/client/javascript/index.html
deleted file mode 100644
index dc9050576..000000000
--- a/examples/simple-chatbot/client/javascript/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
- AI Chatbot
-
-
-
-
-
-
- Status: Disconnected
-
-
- Connect
- Disconnect
-
-
-
-
-
-
-
-
- Unmute Mic
-
-
-
- Send
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/simple-chatbot/client/javascript/package-lock.json b/examples/simple-chatbot/client/javascript/package-lock.json
deleted file mode 100644
index 335851006..000000000
--- a/examples/simple-chatbot/client/javascript/package-lock.json
+++ /dev/null
@@ -1,1282 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0"
- },
- "devDependencies": {
- "vite": "^6.3.5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.77.0.tgz",
- "integrity": "sha512-icNXKieKAkRR/C5dcPjrCkL1jQGFp5C5WtLHy5uHAdTztm+mo9wlPJuehbWaGOM3TV24mgWHZ/+8jOys1G0I4w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
- "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
- "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
- "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
- "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
- "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
- "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
- "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
- "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
- "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
- "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
- "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
- "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
- "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
- "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
- "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
- "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
- "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
- "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
- "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
- "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
- "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
- "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
- "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
- "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/daily-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/daily-transport/-/daily-transport-1.0.0.tgz",
- "integrity": "sha512-iXmv9Et/TGPvJoeOY+ZBPv+a3pbqT502jco2MBHl8l2VrtztkidjDwiOkPfPdD191CCwaSbV5laSYALsD0AyxA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.77.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz",
- "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz",
- "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz",
- "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz",
- "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz",
- "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz",
- "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz",
- "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz",
- "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz",
- "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz",
- "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz",
- "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz",
- "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz",
- "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz",
- "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz",
- "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
- "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz",
- "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz",
- "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz",
- "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz",
- "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
- "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.6",
- "@esbuild/android-arm": "0.25.6",
- "@esbuild/android-arm64": "0.25.6",
- "@esbuild/android-x64": "0.25.6",
- "@esbuild/darwin-arm64": "0.25.6",
- "@esbuild/darwin-x64": "0.25.6",
- "@esbuild/freebsd-arm64": "0.25.6",
- "@esbuild/freebsd-x64": "0.25.6",
- "@esbuild/linux-arm": "0.25.6",
- "@esbuild/linux-arm64": "0.25.6",
- "@esbuild/linux-ia32": "0.25.6",
- "@esbuild/linux-loong64": "0.25.6",
- "@esbuild/linux-mips64el": "0.25.6",
- "@esbuild/linux-ppc64": "0.25.6",
- "@esbuild/linux-riscv64": "0.25.6",
- "@esbuild/linux-s390x": "0.25.6",
- "@esbuild/linux-x64": "0.25.6",
- "@esbuild/netbsd-arm64": "0.25.6",
- "@esbuild/netbsd-x64": "0.25.6",
- "@esbuild/openbsd-arm64": "0.25.6",
- "@esbuild/openbsd-x64": "0.25.6",
- "@esbuild/openharmony-arm64": "0.25.6",
- "@esbuild/sunos-x64": "0.25.6",
- "@esbuild/win32-arm64": "0.25.6",
- "@esbuild/win32-ia32": "0.25.6",
- "@esbuild/win32-x64": "0.25.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/rollup": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz",
- "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.44.2",
- "@rollup/rollup-android-arm64": "4.44.2",
- "@rollup/rollup-darwin-arm64": "4.44.2",
- "@rollup/rollup-darwin-x64": "4.44.2",
- "@rollup/rollup-freebsd-arm64": "4.44.2",
- "@rollup/rollup-freebsd-x64": "4.44.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.44.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.44.2",
- "@rollup/rollup-linux-arm64-gnu": "4.44.2",
- "@rollup/rollup-linux-arm64-musl": "4.44.2",
- "@rollup/rollup-linux-loongarch64-gnu": "4.44.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-musl": "4.44.2",
- "@rollup/rollup-linux-s390x-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-musl": "4.44.2",
- "@rollup/rollup-win32-arm64-msvc": "4.44.2",
- "@rollup/rollup-win32-ia32-msvc": "4.44.2",
- "@rollup/rollup-win32-x64-msvc": "4.44.2",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- }
- }
-}
diff --git a/examples/simple-chatbot/client/javascript/package.json b/examples/simple-chatbot/client/javascript/package.json
deleted file mode 100644
index e3050697a..000000000
--- a/examples/simple-chatbot/client/javascript/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "vite": "^6.3.5"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0"
- }
-}
diff --git a/examples/simple-chatbot/client/javascript/src/app.js b/examples/simple-chatbot/client/javascript/src/app.js
deleted file mode 100644
index 38e8e6d04..000000000
--- a/examples/simple-chatbot/client/javascript/src/app.js
+++ /dev/null
@@ -1,386 +0,0 @@
-/**
- * Copyright (c) 2024โ2025, Daily
- *
- * SPDX-License-Identifier: BSD 2-Clause License
- */
-
-/**
- * Pipecat Client Implementation
- *
- * This client connects to an RTVI-compatible bot server using WebRTC (via Daily).
- * It handles audio/video streaming and manages the connection lifecycle.
- *
- * Requirements:
- * - A running RTVI bot server (defaults to http://localhost:7860)
- * - The server must implement the /connect endpoint that returns Daily.co room credentials
- * - Browser with WebRTC support
- */
-
-import { PipecatClient, RTVIEvent } from '@pipecat-ai/client-js';
-import { DailyTransport } from '@pipecat-ai/daily-transport';
-
-/**
- * ChatbotClient handles the connection and media management for a real-time
- * voice and video interaction with an AI bot.
- */
-class ChatbotClient {
- constructor() {
- // Initialize client state
- this.pcClient = null;
- this.setupDOMElements();
- this.initializeClientAndTransport();
- }
-
- /**
- * Set up references to DOM elements and create necessary media elements
- */
- setupDOMElements() {
- // Get references to UI control elements
- this.connectBtn = document.getElementById('connect-btn');
- this.disconnectBtn = document.getElementById('disconnect-btn');
- this.statusSpan = document.getElementById('connection-status');
- this.debugLog = document.getElementById('debug-log');
- this.botVideoContainer = document.getElementById('bot-video-container');
- this.deviceSelector = document.getElementById('device-selector');
- this.micToggleBtn = document.getElementById('mic-toggle-btn');
- this.sendTextBtn = document.getElementById('send-text-btn');
-
- // Create an audio element for bot's voice output
- this.botAudio = document.createElement('audio');
- this.botAudio.autoplay = true;
- this.botAudio.playsInline = true;
- document.body.appendChild(this.botAudio);
- }
-
- /**
- * Set up event listeners for connect/disconnect buttons
- */
- setupEventListeners() {
- this.connectBtn.addEventListener('click', () => {
- console.log('click');
- this.connect();
- });
- this.disconnectBtn.addEventListener('click', () => this.disconnect());
-
- // Populate device selector
- this.pcClient.getAllMics().then((mics) => {
- console.log('Available mics:', mics);
- mics.forEach((device) => {
- const option = document.createElement('option');
- option.value = device.deviceId;
- option.textContent = device.label || `Microphone ${device.deviceId}`;
- this.deviceSelector.appendChild(option);
- });
- });
- this.deviceSelector.addEventListener('change', (event) => {
- const selectedDeviceId = event.target.value;
- console.log('Selected device ID:', selectedDeviceId);
- this.pcClient.updateMic(selectedDeviceId);
- });
-
- // Handle mic mute/unmute toggle
- const micToggleBtn = document.getElementById('mic-toggle-btn');
-
- micToggleBtn.addEventListener('click', async () => {
- if (this.pcClient.state === 'disconnected') {
- await this.pcClient.initDevices();
- } else {
- this.pcClient.enableMic(!this.pcClient.isMicEnabled);
- }
- });
-
- const textInput = document.getElementById('text-input');
-
- const sendTextToLLM = () => {
- this.sendTextBtn.disabled = true; // Disable button to prevent multiple clicks
- const text = textInput.value.trim();
- if (text) {
- void this.pcClient.appendToContext({
- role: 'user',
- content: text,
- run_immediately: true,
- });
- }
- textInput.value = ''; // Clear the input
- this.sendTextBtn.disabled = false; // Re-enable button after sending
- };
-
- this.sendTextBtn.addEventListener('click', sendTextToLLM);
-
- // Also handle Enter key in the input
- textInput.addEventListener('keypress', (e) => {
- if (e.key === 'Enter') {
- sendTextToLLM();
- }
- });
- }
-
- updateMicToggleButton(micEnabled) {
- console.log('Mic enabled:', micEnabled, this.pcClient?.isMicEnabled);
- this.micToggleBtn.textContent = micEnabled ? 'Mute Mic' : 'Unmute Mic';
- }
- /**
- * Set up the Pipecat client and Daily transport
- */
- async initializeClientAndTransport() {
- console.log('Initializing Pipecat client and transport...');
- // Initialize the Pipecat client with a DailyTransport and our configuration
- this.pcClient = new PipecatClient({
- transport: new DailyTransport(),
- enableMic: true,
- enableCam: false,
- callbacks: {
- // Handle connection state changes
- onConnected: () => {
- this.updateStatus('Connected');
- this.connectBtn.disabled = true;
- this.disconnectBtn.disabled = false;
- this.log('Client connected');
- },
- onDisconnected: () => {
- this.updateStatus('Disconnected');
- this.connectBtn.disabled = false;
- this.disconnectBtn.disabled = true;
- this.sendTextBtn.disabled = true;
- this.log('Client disconnected');
- this.updateMicToggleButton(false);
- },
- // Handle transport state changes
- onTransportStateChanged: (state) => {
- this.updateStatus(`Transport: ${state}`);
- this.log(`Transport state changed: ${state}`);
- if (state === 'ready') {
- this.setupMediaTracks();
- }
- },
- // Handle bot connection events
- onBotConnected: (participant) => {
- this.log(`Bot connected: ${JSON.stringify(participant)}`);
- },
- onBotDisconnected: (participant) => {
- this.log(`Bot disconnected: ${JSON.stringify(participant)}`);
- },
- onBotReady: (data) => {
- this.log(`Bot ready: ${JSON.stringify(data)}`);
- this.setupMediaTracks();
- this.sendTextBtn.disabled = false;
- },
- // Transcript events
- onUserTranscript: (data) => {
- // Only log final transcripts
- if (data.final) {
- this.log(`User: ${data.text}`);
- }
- },
- onBotTranscript: (data) => {
- this.log(`Bot: ${data.text}`);
- },
- // Error handling
- onMessageError: (error) => {
- console.log('Message error:', error);
- },
- onMicUpdated: (data) => {
- console.log('Mic updated:', data);
- this.deviceSelector.value = data.deviceId;
- },
- onError: (error) => {
- console.log('Error:', JSON.stringify(error));
- },
- },
- });
- window.client = this; // Expose client globally for debugging
-
- // Set up listeners for media track events
- this.setupTrackListeners();
- this.setupEventListeners();
- }
-
- /**
- * Add a timestamped message to the debug log
- */
- log(message) {
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
-
- // Add styling based on message type
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3'; // blue for user
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50'; // green for bot
- }
-
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- console.log(message);
- }
-
- /**
- * Update the connection status display
- */
- updateStatus(status) {
- this.statusSpan.textContent = status;
- this.log(`Status: ${status}`);
- }
-
- /**
- * Check for available media tracks and set them up if present
- * This is called when the bot is ready or when the transport state changes to ready
- */
- setupMediaTracks() {
- if (!this.pcClient) return;
-
- // Get current tracks from the client
- const tracks = this.pcClient.tracks();
-
- // Set up any available bot tracks
- if (tracks.bot?.audio) {
- this.setupAudioTrack(tracks.bot.audio);
- }
- if (tracks.bot?.video) {
- this.setupVideoTrack(tracks.bot.video);
- }
- }
-
- /**
- * Set up listeners for track events (start/stop)
- * This handles new tracks being added during the session
- */
- setupTrackListeners() {
- if (!this.pcClient) return;
-
- // Listen for new tracks starting
- this.pcClient.on(RTVIEvent.TrackStarted, (track, participant) => {
- if (!participant?.local) {
- if (track.kind === 'audio') {
- this.setupAudioTrack(track);
- } else if (track.kind === 'video') {
- this.setupVideoTrack(track);
- }
- } else if (track.kind === 'audio') {
- console.log(`Local audio track started: `, this.pcClient.tracks());
- // If local audio track starts, update mic
- this.updateMicToggleButton(true);
- }
- });
-
- // Listen for tracks stopping
- this.pcClient.on(RTVIEvent.TrackStopped, (track, participant) => {
- this.log(
- `Track stopped event: ${track.kind} from ${
- participant ? (participant.local ? 'local' : 'bot') : 'unknown'
- }`
- );
- if (participant?.local && track.kind === 'audio') {
- // If local audio track stops, update mic toggle button
- this.updateMicToggleButton(false);
- }
- });
- }
-
- /**
- * Set up an audio track for playback
- * Handles both initial setup and track updates
- */
- setupAudioTrack(track) {
- this.log('Setting up audio track');
- // Check if we're already playing this track
- if (this.botAudio.srcObject) {
- const oldTrack = this.botAudio.srcObject.getAudioTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
- // Create a new MediaStream with the track and set it as the audio source
- this.botAudio.srcObject = new MediaStream([track]);
- }
-
- /**
- * Set up a video track for display
- * Handles both initial setup and track updates
- */
- setupVideoTrack(track) {
- this.log('Setting up video track');
- const videoEl = document.createElement('video');
- videoEl.autoplay = true;
- videoEl.playsInline = true;
- videoEl.muted = true;
- videoEl.style.width = '100%';
- videoEl.style.height = '100%';
- videoEl.style.objectFit = 'cover';
-
- // Check if we're already displaying this track
- if (this.botVideoContainer.querySelector('video')?.srcObject) {
- const oldTrack = this.botVideoContainer
- .querySelector('video')
- .srcObject.getVideoTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
-
- // Create a new MediaStream with the track and set it as the video source
- videoEl.srcObject = new MediaStream([track]);
- this.botVideoContainer.innerHTML = '';
- this.botVideoContainer.appendChild(videoEl);
- }
-
- /**
- * Initialize and connect to the bot
- * This sets up the Pipecat client, initializes devices, and establishes the connection
- */
- async connect() {
- try {
- // Connect to the bot
- this.log('Connecting to bot...');
- await this.pcClient.connect({
- endpoint: 'http://localhost:7860/connect',
- timeout: 25000,
- });
-
- this.log('Connection complete');
- } catch (error) {
- // Handle any errors during connection
- this.log(`Error connecting: ${error.message}`);
- this.log(`Error stack: ${error.stack}`);
- this.updateStatus('Error');
-
- // Clean up if there's an error
- if (this.pcClient) {
- try {
- await this.pcClient.disconnect();
- } catch (disconnectError) {
- this.log(`Error during disconnect: ${disconnectError.message}`);
- }
- }
- }
- }
-
- /**
- * Disconnect from the bot and clean up media resources
- */
- async disconnect() {
- if (this.pcClient) {
- try {
- // Disconnect the Pipecat client
- await this.pcClient.disconnect();
-
- // Clean up audio
- if (this.botAudio.srcObject) {
- this.botAudio.srcObject.getTracks().forEach((track) => track.stop());
- this.botAudio.srcObject = null;
- }
-
- // Clean up video
- if (this.botVideoContainer.querySelector('video')?.srcObject) {
- const video = this.botVideoContainer.querySelector('video');
- video.srcObject.getTracks().forEach((track) => track.stop());
- video.srcObject = null;
- }
- this.botVideoContainer.innerHTML = '';
- } catch (error) {
- this.log(`Error disconnecting: ${error.message}`);
- }
- }
- }
-}
-
-// Initialize the client when the page loads
-window.addEventListener('DOMContentLoaded', () => {
- new ChatbotClient();
-});
diff --git a/examples/simple-chatbot/client/javascript/src/style.css b/examples/simple-chatbot/client/javascript/src/style.css
deleted file mode 100644
index f2a65ff88..000000000
--- a/examples/simple-chatbot/client/javascript/src/style.css
+++ /dev/null
@@ -1,169 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar,
-.device-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.device-bar {
- flex-direction: column;
- gap: 10px;
-}
-
-.controls,
-.device-controls {
- display: flex;
- align-items: center;
- gap: 10px; /* Adds spacing between elements */
-}
-
-.device-controls {
- margin-left: auto;
-}
-
-.controls button,
-.device-controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#bot-selector,
-#device-selector {
- padding: 8px 16px;
- padding-right: 40px;
- border: none;
- border-radius: 4px;
- background-color: #6c757d; /* Gray background */
- color: white; /* White text */
- cursor: pointer;
- appearance: none; /* Removes default browser styling for dropdowns */
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E"); /* Custom arrow */
- background-repeat: no-repeat;
- background-position: right 8px center; /* Position the arrow */
-}
-
-#bot-selector:focus,
-#device-selector:focus {
- outline: none;
- box-shadow: 0 0 4px rgba(0, 0, 0, 0.3); /* Add a subtle focus effect */
-}
-
-.text-input-container {
- display: flex;
- gap: 8px;
- margin-left: 10px;
- width: 100%;
- flex: 1;
-}
-
-#text-input {
- flex: 1;
- padding: 8px 16px;
- border: 1px solid #e0e0e0;
- border-radius: 4px;
- min-width: 200px;
-}
-
-#send-text-btn {
- padding: 8px 16px;
- border: none;
- border-radius: 4px;
- background-color: #007bff;
- color: white;
- flex-shrink: 0;
-}
-
-#send-text-btn:hover {
- background-color: #0056b3;
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-#mic-toggle-btn {
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#bot-video-container {
- width: 640px;
- height: 360px;
- background-color: #e0e0e0;
- border-radius: 8px;
- margin: 20px auto;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-#bot-video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 200px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/simple-chatbot/client/prebuilt/README.md b/examples/simple-chatbot/client/prebuilt/README.md
deleted file mode 100644
index ed0e455b2..000000000
--- a/examples/simple-chatbot/client/prebuilt/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Daily Prebuilt Connection
-
-The simplest way to connect to the chatbot using Daily's Prebuilt UI.
-
-1. Start the bot server
-
-```bash
-python server/server.py
-```
-
-2. Visit http://localhost:7860
-
-3. Allow microphone access when prompted
-
-4. Start talking with the bot
diff --git a/examples/simple-chatbot/client/react-native/.gitignore b/examples/simple-chatbot/client/react-native/.gitignore
deleted file mode 100644
index f1ad6ea25..000000000
--- a/examples/simple-chatbot/client/react-native/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-ios
-android
-node_modules
-.expo
-.env
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/react-native/.nvmrc b/examples/simple-chatbot/client/react-native/.nvmrc
deleted file mode 100644
index 744ca17ec..000000000
--- a/examples/simple-chatbot/client/react-native/.nvmrc
+++ /dev/null
@@ -1 +0,0 @@
-22.14
diff --git a/examples/simple-chatbot/client/react-native/App.js b/examples/simple-chatbot/client/react-native/App.js
deleted file mode 100644
index cf68ecbf9..000000000
--- a/examples/simple-chatbot/client/react-native/App.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Disabling the logs from react-native-webrtc
-import debug from 'debug';
-debug.disable('rn-webrtc:*');
-
-// Ignoring the warnings from react-native-background-timer while they don't fix this issue:
-// https://github.com/ocetnik/react-native-background-timer/issues/366
-import { LogBox } from 'react-native';
-LogBox.ignoreLogs([
- "`new NativeEventEmitter()` was called with a non-null argument without the required `addListener` method.",
- "`new NativeEventEmitter()` was called with a non-null argument without the required `removeListeners` method."
-]);
-
-// Enable debug logs
-/*window.localStorage = window.localStorage || {};
-window.localStorage.debug = '*';
-window.localStorage.getItem = (itemName) => {
- console.log('Requesting the localStorage item ', itemName);
- return window.localStorage[itemName];
-};*/
-
-export { default } from './src/App';
diff --git a/examples/simple-chatbot/client/react-native/README.md b/examples/simple-chatbot/client/react-native/README.md
deleted file mode 100644
index 19573d1f8..000000000
--- a/examples/simple-chatbot/client/react-native/README.md
+++ /dev/null
@@ -1,89 +0,0 @@
-# React Native implementation
-
-Basic implementation using the [Pipecat RN SDK](https://docs.pipecat.ai/client/react-native/introduction).
-
-## Usage
-
-### Expo requirements
-
-This project cannot be used with an [Expo Go](https://docs.expo.dev/workflow/expo-go/) app because [it requires custom native code](https://docs.expo.io/workflow/customizing/).
-
-When a project requires custom native code or a config plugin, we need to transition from using [Expo Go](https://docs.expo.dev/workflow/expo-go/)
-to a [development build](https://docs.expo.dev/development/introduction/).
-
-More details about the custom native code used by this demo can be found in [rn-daily-js-expo-config-plugin](https://github.com/daily-co/rn-daily-js-expo-config-plugin).
-
-### Building remotely
-
-If you do not have experience with Xcode and Android Studio builds or do not have them installed locally on your computer, you will need to follow [this guide from Expo to use EAS Build](https://docs.expo.dev/development/create-development-builds/#create-and-install-eas-build).
-
-### Building locally
-
-You will need to have installed locally on your computer:
-- [Xcode](https://developer.apple.com/xcode/) to build for iOS;
-- [Android Studio](https://developer.android.com/studio) to build for Android;
-
-#### Install the demo dependencies
-
-```bash
-# Use the version of node specified in .nvmrc
-nvm i
-
-# Install dependencies
-yarn install
-
-# Before a native app can be compiled, the native source code must be generated.
-npx expo prebuild
-```
-
-#### Running on Android
-
-After plugging in an Android device [configured for debugging](https://developer.android.com/studio/debug/dev-options), run the following command:
-
-```
-npm run android
-```
-
-#### Running on iOS
-
-First, you'll need to do a one-time setup. This is required to build to a physical device.
-
-If you're familiar with Xcode, open `ios/RNSimpleChatbot.xcworkspace` and, in the target settings, provide a development team registered with Apple.
-
-If you're newer to Xcode, here are some more detailed instructions to get you started.
-
-First, open the project in Xcode. Make sure to specifically select `RNSimpleChatbot.xcworkspace` from `/ios`. The `/ios` directory will have been generated by running `npx expo prebuild` as instructed above. This is also a good time to plug in your iOS device to be sure the following steps are successful.
-
-From the main menu, select `Settings` and then `Accounts`. Click the `+` sign to add an account (e.g. an Apple ID).
-
-
-
-Once an account is added, perform the following steps:
-
- 1. Close `Settings`.
- 1. Select the folder icon in the top left corner.
- 1. Select `RNSimpleChatbot` from the side panel
- 1. Navigate to `Signing & Capabilities` in the top nav bar.
- 1. Open the "Team" dropdown
- 1. Select the account added in the previous step.
-
-The "Signing Certificate" section should update accordingly with your account information.
-
-
-
-**Troubleshooting common errors:**
-
-- If you see the error `Change your bundle identifier to a unique string to try again`, update the "Bundle Identifier" input in `Signing & Capabilities` to make it unique. This should resolve the error.
-
-- If you see an error that says `Xcode was unable to launch because it has an invalid code signature, inadequate entitlements or its profile has not been explicitly trusted by the user`, you may need to update the settings on your iPhone to enable the required permissions as follows:
-
-1. Open `Settings` on your iPhone
-1. Select `General`, then `Device Management`
-1. Click `Trust` for DailyPlayground
-
-- You may also be prompted to enter you login keychain password. Be sure to click `Always trust` to avoid the prompt showing multiple times.
-
-After, run the following command:
-```
-npm run ios
-```
diff --git a/examples/simple-chatbot/client/react-native/app.json b/examples/simple-chatbot/client/react-native/app.json
deleted file mode 100644
index 8e6d642ab..000000000
--- a/examples/simple-chatbot/client/react-native/app.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "expo": {
- "name": "RN Simple Chatbot",
- "slug": "simple-chatbot-demo",
- "newArchEnabled": false,
- "version": "1.0.0",
- "orientation": "portrait",
- "icon": "./assets/images/pipecat.png",
- "userInterfaceStyle": "light",
- "splash": {
- "image": "./assets/images/splash.png",
- "resizeMode": "contain",
- "backgroundColor": "#ffffff"
- },
- "updates": {
- "fallbackToCacheTimeout": 0
- },
- "assetBundlePatterns": [
- "**/*"
- ],
- "ios": {
- "supportsTablet": true,
- "bitcode": false,
- "bundleIdentifier": "co.daily.SimpleChatbot",
- "infoPlist": {
- "UIBackgroundModes": [
- "voip"
- ]
- }
- },
- "android": {
- "adaptiveIcon": {
- "foregroundImage": "./assets/images/pipecat.png",
- "backgroundColor": "#FFFFFF"
- },
- "package": "co.daily.SimpleChatbot",
- "permissions": [
- "android.permission.ACCESS_NETWORK_STATE",
- "android.permission.BLUETOOTH",
- "android.permission.CAMERA",
- "android.permission.INTERNET",
- "android.permission.MODIFY_AUDIO_SETTINGS",
- "android.permission.RECORD_AUDIO",
- "android.permission.SYSTEM_ALERT_WINDOW",
- "android.permission.WAKE_LOCK",
- "android.permission.FOREGROUND_SERVICE",
- "android.permission.FOREGROUND_SERVICE_CAMERA",
- "android.permission.FOREGROUND_SERVICE_MICROPHONE",
- "android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION",
- "android.permission.POST_NOTIFICATIONS"
- ]
- },
- "web": {
- "favicon": "./assets/images/pipecat.png"
- },
- "plugins": [
- "@config-plugins/react-native-webrtc",
- "@daily-co/config-plugin-rn-daily-js",
- [
- "expo-build-properties",
- {
- "android": {
- "minSdkVersion": 24,
- "compileSdkVersion": 35,
- "targetSdkVersion": 35,
- "buildToolsVersion": "35.0.0"
- },
- "ios": {
- "deploymentTarget": "15.1"
- }
- }
- ]
- ]
- }
-}
diff --git a/examples/simple-chatbot/client/react-native/assets/icons/vision.png b/examples/simple-chatbot/client/react-native/assets/icons/vision.png
deleted file mode 100644
index 6d03eb9db..000000000
Binary files a/examples/simple-chatbot/client/react-native/assets/icons/vision.png and /dev/null differ
diff --git a/examples/simple-chatbot/client/react-native/assets/images/pipecat.png b/examples/simple-chatbot/client/react-native/assets/images/pipecat.png
deleted file mode 100644
index e6e615ad2..000000000
Binary files a/examples/simple-chatbot/client/react-native/assets/images/pipecat.png and /dev/null differ
diff --git a/examples/simple-chatbot/client/react-native/assets/images/splash.png b/examples/simple-chatbot/client/react-native/assets/images/splash.png
deleted file mode 100644
index 0e89705a9..000000000
Binary files a/examples/simple-chatbot/client/react-native/assets/images/splash.png and /dev/null differ
diff --git a/examples/simple-chatbot/client/react-native/babel.config.js b/examples/simple-chatbot/client/react-native/babel.config.js
deleted file mode 100644
index 2900afe9d..000000000
--- a/examples/simple-chatbot/client/react-native/babel.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = function(api) {
- api.cache(true);
- return {
- presets: ['babel-preset-expo'],
- };
-};
diff --git a/examples/simple-chatbot/client/react-native/docsAssets/xcode-accounts.png b/examples/simple-chatbot/client/react-native/docsAssets/xcode-accounts.png
deleted file mode 100644
index 41f2bfbdc..000000000
Binary files a/examples/simple-chatbot/client/react-native/docsAssets/xcode-accounts.png and /dev/null differ
diff --git a/examples/simple-chatbot/client/react-native/docsAssets/xcode-signing.png b/examples/simple-chatbot/client/react-native/docsAssets/xcode-signing.png
deleted file mode 100644
index 7a1a6cd55..000000000
Binary files a/examples/simple-chatbot/client/react-native/docsAssets/xcode-signing.png and /dev/null differ
diff --git a/examples/simple-chatbot/client/react-native/env.example b/examples/simple-chatbot/client/react-native/env.example
deleted file mode 100644
index 0f666a794..000000000
--- a/examples/simple-chatbot/client/react-native/env.example
+++ /dev/null
@@ -1 +0,0 @@
-EXPO_SIMPLE_CHATBOT_SERVER=http://$YOUR_IP:7860
diff --git a/examples/simple-chatbot/client/react-native/metro.config.js b/examples/simple-chatbot/client/react-native/metro.config.js
deleted file mode 100644
index 74aeaec84..000000000
--- a/examples/simple-chatbot/client/react-native/metro.config.js
+++ /dev/null
@@ -1,2 +0,0 @@
-const { getDefaultConfig } = require('expo/metro-config');
-module.exports = getDefaultConfig(__dirname);
diff --git a/examples/simple-chatbot/client/react-native/package.json b/examples/simple-chatbot/client/react-native/package.json
deleted file mode 100644
index b3215f703..000000000
--- a/examples/simple-chatbot/client/react-native/package.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "simple-chatbot-demo",
- "version": "1.0.0",
- "scripts": {
- "start": "expo start --dev-client",
- "android": "expo run:android --device",
- "ios": "expo run:ios --device",
- "web": "expo start --web",
- "update": "(cd ../rtvi-client-react-native-daily; yarn build); cp -R ../rtvi-client-react-native-daily/lib/* ./node_modules/react-native-realtime-ai-daily/lib/;"
- },
- "dependencies": {
- "@config-plugins/react-native-webrtc": "^10.0.0",
- "@daily-co/config-plugin-rn-daily-js": "0.0.7",
- "@daily-co/react-native-daily-js": "^0.76.0",
- "@daily-co/react-native-webrtc": "^118.0.3-daily.2",
- "@react-native-async-storage/async-storage": "1.24.0",
- "@react-navigation/native": "^7.0.14",
- "@react-navigation/stack": "^7.1.1",
- "expo": "^53.0.7",
- "expo-build-properties": "~0.14.6",
- "expo-dev-client": "~5.1.8",
- "expo-splash-screen": "~0.30.8",
- "expo-status-bar": "~2.2.3",
- "react": "19.0.0",
- "react-native": "0.79.2",
- "react-native-background-timer": "^2.4.1",
- "react-native-gesture-handler": "^2.25.0",
- "react-native-get-random-values": "^1.11.0",
- "@pipecat-ai/react-native-daily-transport": "^0.3.5",
- "react-native-safe-area-context": "^5.4.0",
- "react-native-screens": "^4.10.0",
- "react-native-toast-message": "^2.3.0"
- },
- "devDependencies": {
- "@babel/core": "^7.27.1",
- "@types/react-native": "^0.73.0",
- "typescript": "~5.8.3"
- },
- "private": true,
- "resolutions": {
- "@daily-co/react-native-webrtc/debug": "^4.0.0",
- "@daily-co/react-native-webrtc/@types/react-native": "^0.73.0"
- }
-}
diff --git a/examples/simple-chatbot/client/react-native/src/App.tsx b/examples/simple-chatbot/client/react-native/src/App.tsx
deleted file mode 100644
index d17a8d113..000000000
--- a/examples/simple-chatbot/client/react-native/src/App.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from "react"
-
-import { NavigationContainer } from '@react-navigation/native';
-import { createStackNavigator } from '@react-navigation/stack';
-import PreJoinView from './views/PreJoinView';
-import MeetingView from './views/MeetingView';
-import { VoiceClientProvider } from './context/VoiceClientContext';
-import Toast from 'react-native-toast-message';
-
-import { useVoiceClientNavigation } from './hooks/useVoiceClientNavigation';
-
-const Stack = createStackNavigator();
-
-const NavigationManager: React.FC = () => {
- useVoiceClientNavigation(); // This hook now controls the navigation based on the connection state.
- return null; // This component doesn't render anything but manages navigation.
-};
-
-const App: React.FC = () => {
- return (
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default App;
diff --git a/examples/simple-chatbot/client/react-native/src/components/MicrophoneView.tsx b/examples/simple-chatbot/client/react-native/src/components/MicrophoneView.tsx
deleted file mode 100644
index 3b74befd5..000000000
--- a/examples/simple-chatbot/client/react-native/src/components/MicrophoneView.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import React, { useState, useMemo } from 'react';
-import { View, StyleSheet, LayoutChangeEvent, ViewStyle } from 'react-native';
-import { MaterialIcons } from '@expo/vector-icons';
-import Colors from '../theme/Colors';
-import { useVoiceClient } from '../context/VoiceClientContext';
-
-interface MicrophoneViewProps {
- style?: ViewStyle; // Optional additional styles for the button container
-}
-
-const MicrophoneView: React.FC = ({ style }) => {
- const { isMicEnabled, localAudioLevel: audioLevel } = useVoiceClient();
- const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
-
- const onLayout = (event: LayoutChangeEvent) => {
- const { width, height } = event.nativeEvent.layout;
- setDimensions({ width, height });
- };
-
- const { width } = dimensions;
-
- const circleSize = useMemo(() => width * 0.9, [width]);
- const innerCircleSize = useMemo(() => width * 0.82, [width]);
- const audioCircleSize = useMemo(() => audioLevel * width * 0.95, [audioLevel, width]);
-
- return (
-
-
-
-
- {isMicEnabled && (
-
- )}
-
-
-
-
- );
-};
-
-const styles = StyleSheet.create({
- container: {
- justifyContent: 'center',
- alignItems: 'center',
- } as ViewStyle,
- outerCircle: {
- borderWidth: 1,
- borderColor: Colors.buttonsBorder,
- justifyContent: 'center',
- alignItems: 'center',
- } as ViewStyle,
- innerCircle: {
- position: 'absolute',
- } as ViewStyle,
- audioCircle: {
- position: 'absolute',
- backgroundColor: Colors.micVolume,
- opacity: 0.5,
- } as ViewStyle,
- micIcon: {
- position: 'absolute',
- },
-});
-
-export default MicrophoneView;
diff --git a/examples/simple-chatbot/client/react-native/src/components/WaveformView.tsx b/examples/simple-chatbot/client/react-native/src/components/WaveformView.tsx
deleted file mode 100644
index 334ff434e..000000000
--- a/examples/simple-chatbot/client/react-native/src/components/WaveformView.tsx
+++ /dev/null
@@ -1,128 +0,0 @@
-import React, { useEffect, useState } from 'react';
-import { LayoutChangeEvent, StyleSheet, Text, View, ViewStyle } from 'react-native';
-import { MaterialIcons } from '@expo/vector-icons';
-import Colors from '../theme/Colors';
-import { useVoiceClient } from '../context/VoiceClientContext';
-
-const dotCount = 5;
-
-const WaveformView: React.FC = () => {
- const [audioLevels, setAudioLevels] = useState(Array(dotCount).fill(0));
- const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
-
- const { currentState: voiceClientStatus, botReady: isBotReady, remoteAudioLevel: audioLevel } = useVoiceClient();
-
- const onLayout = (event: LayoutChangeEvent) => {
- const { width, height } = event.nativeEvent.layout;
- setDimensions({ width, height });
- };
-
- useEffect(() => {
- setAudioLevels((prevLevels) => [...prevLevels.slice(1), audioLevel]);
- }, [audioLevel]);
-
- const { width, height } = dimensions;
- const circleSize = width * 0.9;
- const innerCircleSize = width * 0.82;
- const barWidth = (width * 0.5) / dotCount;
-
- return (
-
-
-
- {isBotReady ? (
- audioLevel > 0 ? (
-
- {audioLevels.map((level, index) => (
-
- ))}
-
- ) : (
-
- {Array(dotCount)
- .fill(0)
- .map((_, index) => (
-
- ))}
-
- )
- ) : (
-
-
- {voiceClientStatus}
-
- )}
-
-
-
- );
-};
-
-const styles = StyleSheet.create({
- container: {
- justifyContent: 'center',
- alignItems: 'center',
- width: "100%",
- } as ViewStyle,
- outerCircle: {
- borderWidth: 1,
- borderColor: 'gray',
- justifyContent: 'center',
- alignItems: 'center',
- } as ViewStyle,
- innerCircle: {
- justifyContent: 'center',
- alignItems: 'center',
- position: 'relative',
- } as ViewStyle,
- waveformContainer: {
- flexDirection: 'row',
- justifyContent: 'space-between',
- alignItems: 'center',
- } as ViewStyle,
- waveformBar: {
- backgroundColor: 'white',
- maxHeight: '100%',
- borderRadius: 12,
- } as ViewStyle,
- dotContainer: {
- flexDirection: 'row',
- justifyContent: 'space-between',
- alignItems: 'center',
- } as ViewStyle,
- dot: {
- backgroundColor: 'white',
- borderRadius: 50,
- } as ViewStyle,
- notReadyContainer: {
- justifyContent: 'center',
- alignItems: 'center',
- } as ViewStyle,
- voiceClientStatusText: {
- color: 'white',
- marginTop: 10,
- fontSize: 16,
- fontWeight: 'bold',
- } as ViewStyle,
-});
-
-export default WaveformView;
diff --git a/examples/simple-chatbot/client/react-native/src/context/VoiceClientContext.tsx b/examples/simple-chatbot/client/react-native/src/context/VoiceClientContext.tsx
deleted file mode 100644
index e61be0635..000000000
--- a/examples/simple-chatbot/client/react-native/src/context/VoiceClientContext.tsx
+++ /dev/null
@@ -1,229 +0,0 @@
-import React, { createContext, useState, useContext, ReactNode, useCallback, useMemo, useRef, useEffect } from 'react'
-import Toast from 'react-native-toast-message'
-import { RNDailyTransport } from '@pipecat-ai/react-native-daily-transport'
-import { RTVIClient, TransportState, RTVIMessage, Participant } from '@pipecat-ai/client-js'
-import { MediaStreamTrack } from '@daily-co/react-native-webrtc'
-import { SettingsManager } from '../settings/SettingsManager';
-
-interface VoiceClientContextProps {
- voiceClient: RTVIClient | null
- inCall: boolean
- currentState: string
- botReady: boolean
- localAudioLevel: number
- remoteAudioLevel: number
- isMicEnabled: boolean
- isCamEnabled: boolean
- videoTrack?: MediaStreamTrack
- timerCountDown: number
- // methods
- start: (url: string) => Promise
- leave: () => void
- toggleMicInput: () => void
- toggleCamInput: () => void
-}
-
-export const VoiceClientContext = createContext(undefined)
-
-interface VoiceClientProviderProps {
- children: ReactNode
-}
-
-export const VoiceClientProvider: React.FC = ({ children }) => {
- const [voiceClient, setVoiceClient] = useState(null)
- const [inCall, setInCall] = useState(false)
- const [currentState, setCurrentState] = useState("disconnected")
- const [botReady, setBotReady] = useState(false)
- const [isMicEnabled, setIsMicEnabled] = useState(false)
- const [isCamEnabled, setIsCamEnabled] = useState(false)
- const [videoTrack, setVideoTrack] = useState()
- const [localAudioLevel, setLocalAudioLevel] = useState(0)
- const [remoteAudioLevel, setRemoteAudioLevel] = useState(0)
- const [timerCountDown, setTimerCountDown] = useState(0)
-
- const botSpeakingRef = useRef(false)
- let meetingTimer: NodeJS.Timeout | null
-
- const createVoiceClient = useCallback((url: string): RTVIClient => {
- return new RTVIClient({
- transport: new RNDailyTransport(),
- params: {
- baseUrl: url,
- endpoints: {
- connect: "/connect"
- }
- },
- enableMic: true,
- enableCam: false
- })
- }, [])
-
- const handleError = useCallback((error: any) => {
- console.log("Error occurred:", error)
- const errorMessage = error.message || error.data?.error || "An unexpected error occurred"
- Toast.show({
- type: 'error',
- text1: errorMessage,
- })
- }, [])
-
- const setupListeners = useCallback((voiceClient: RTVIClient): void => {
- const inCallStates = new Set(["authenticating", "connecting", "connected", "ready"])
-
- voiceClient
- .on("transportStateChanged", (state: TransportState) => {
- setCurrentState(voiceClient.state)
- setInCall(inCallStates.has(state))
- })
- .on("error", (error: RTVIMessage) => {
- handleError(error)
- })
- .on("botReady", () => {
- setBotReady(true)
- let expirationTime = voiceClient.transportExpiry
- if (expirationTime) {
- startTimer(expirationTime)
- }
- })
- .on("disconnected", () => {
- setBotReady(false)
- stopTimer()
- setIsMicEnabled(false)
- setIsCamEnabled(false)
- })
- .on("localAudioLevel", (level: number) => {
- setLocalAudioLevel(level)
- })
- .on("remoteAudioLevel", (level: number) => {
- if (botSpeakingRef.current) {
- setRemoteAudioLevel(level)
- }
- })
- .on("userStartedSpeaking", () => {
- // nothing to do here
- })
- .on("userStoppedSpeaking", () => {
- // nothing to do here
- })
- .on("botStartedSpeaking", () => {
- botSpeakingRef.current = true
- })
- .on("botStoppedSpeaking", () => {
- botSpeakingRef.current = false
- setRemoteAudioLevel(0)
- })
- .on("connected", () => {
- setIsMicEnabled(voiceClient.isMicEnabled)
- setIsCamEnabled(voiceClient.isCamEnabled)
- })
- .on("trackStarted", (track: MediaStreamTrack, p?: Participant) => {
- if (p?.local && track.kind === 'video'){
- setVideoTrack(track)
- }
- })
- }, [handleError])
-
- const start = useCallback(async (url: string): Promise => {
- const client = createVoiceClient(url)
- setVoiceClient(client)
- setupListeners(client)
- try {
- await client.connect()
- // updating the preferences
- const newSettings = await SettingsManager.getSettings();
- newSettings.backendURL = url
- await SettingsManager.updateSettings(newSettings)
- } catch (error) {
- handleError(error)
- }
- }, [createVoiceClient, setupListeners, handleError])
-
- const leave = useCallback(async (): Promise => {
- if (voiceClient) {
- await voiceClient.disconnect()
- setVoiceClient(null)
- }
- }, [voiceClient])
-
- const toggleMicInput = useCallback(async (): Promise => {
- if (voiceClient) {
- try {
- let enableMic = !isMicEnabled
- voiceClient.enableMic(enableMic)
- setIsMicEnabled(enableMic)
- } catch (e) {
- handleError(e)
- }
- }
- }, [voiceClient, isMicEnabled])
-
- const toggleCamInput = useCallback(async (): Promise => {
- if (voiceClient) {
- try {
- let enableCam = !isCamEnabled
- voiceClient.enableCam(enableCam)
- setIsCamEnabled(enableCam)
- } catch (e) {
- handleError(e)
- }
- }
- }, [voiceClient, isCamEnabled])
-
- const startTimer = (expirationTime: number): void => {
- const currentTime = Math.floor(Date.now() / 1000)
- const leftTime = expirationTime - currentTime
- setTimerCountDown(leftTime)
- meetingTimer = setInterval(() => {
- setTimerCountDown((prevCountDown) => {
- return prevCountDown - 1
- })
- }, 1000)
- }
-
- const stopTimer = (): void => {
- if (meetingTimer) {
- clearInterval(meetingTimer)
- meetingTimer = null
- }
- setTimerCountDown(0)
- }
-
- useEffect(() => {
- return () => {
- if (voiceClient) {
- voiceClient.removeAllListeners() // Cleanup on unmount
- }
- }
- }, [voiceClient])
-
- const contextValue = useMemo(() => ({
- voiceClient,
- inCall,
- currentState,
- botReady,
- isMicEnabled,
- isCamEnabled,
- localAudioLevel,
- remoteAudioLevel,
- videoTrack,
- timerCountDown,
- start,
- leave,
- toggleMicInput,
- toggleCamInput
- }), [voiceClient, inCall, currentState, botReady, isMicEnabled, isCamEnabled, localAudioLevel, remoteAudioLevel, videoTrack, timerCountDown, start, leave, toggleMicInput, toggleCamInput])
-
- return (
-
- {children}
-
- )
-}
-
-export const useVoiceClient = (): VoiceClientContextProps => {
- const context = useContext(VoiceClientContext)
- if (!context) {
- throw new Error('useVoiceClient must be used within a VoiceClientProvider')
- }
- return context
-}
diff --git a/examples/simple-chatbot/client/react-native/src/hooks/useVoiceClientNavigation.ts b/examples/simple-chatbot/client/react-native/src/hooks/useVoiceClientNavigation.ts
deleted file mode 100644
index e548313c4..000000000
--- a/examples/simple-chatbot/client/react-native/src/hooks/useVoiceClientNavigation.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { useEffect } from 'react';
-import { useNavigation, NavigationProp } from '@react-navigation/native';
-import { useVoiceClient } from '../context/VoiceClientContext';
-
-export type RootStackParamList = {
- Meeting: undefined;
- Prejoin: undefined;
-};
-
-export const useVoiceClientNavigation = () => {
- const navigation = useNavigation>();
- const { inCall } = useVoiceClient();
-
- useEffect(() => {
- if (inCall) {
- navigation.navigate('Meeting');
- } else {
- navigation.navigate('Prejoin');
- }
- }, [inCall, navigation]);
-
-};
diff --git a/examples/simple-chatbot/client/react-native/src/settings/SettingsManager.ts b/examples/simple-chatbot/client/react-native/src/settings/SettingsManager.ts
deleted file mode 100644
index 54b2d0008..000000000
--- a/examples/simple-chatbot/client/react-native/src/settings/SettingsManager.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import AsyncStorage from '@react-native-async-storage/async-storage';
-
-export interface SettingsManager {
- enableCam: boolean;
- enableMic: boolean;
- backendURL: string;
-}
-
-// Define the settings object
-const defaultSettings: SettingsManager = {
- enableCam: false,
- enableMic: true,
- backendURL: process.env.EXPO_SIMPLE_CHATBOT_SERVER || "",
-};
-
-export class SettingsManager {
- private static preferencesKey = 'settingsPreference';
-
- static async getSettings(): Promise {
- try {
- const data = await AsyncStorage.getItem(this.preferencesKey);
- if (data !== null) {
- return JSON.parse(data) as SettingsManager;
- } else {
- return defaultSettings;
- }
- } catch (error) {
- console.error("Failed to load settings:", error);
- return defaultSettings;
- }
- }
-
- static async updateSettings(settings: SettingsManager): Promise {
- try {
- const data = JSON.stringify(settings);
- await AsyncStorage.setItem(this.preferencesKey, data);
- } catch (error) {
- console.error("Failed to save settings:", error);
- }
- }
-}
-
diff --git a/examples/simple-chatbot/client/react-native/src/theme/Assets.ts b/examples/simple-chatbot/client/react-native/src/theme/Assets.ts
deleted file mode 100644
index 7486bd389..000000000
--- a/examples/simple-chatbot/client/react-native/src/theme/Assets.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export const Images = {
- dailyBot: require('../../assets/images/pipecat.png'),
-};
-
-export const Icons = {
- vision: require('../../assets/icons/vision.png'),
-};
diff --git a/examples/simple-chatbot/client/react-native/src/theme/Colors.ts b/examples/simple-chatbot/client/react-native/src/theme/Colors.ts
deleted file mode 100644
index 56b7703d7..000000000
--- a/examples/simple-chatbot/client/react-native/src/theme/Colors.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-type ColorsType = {
- white: string;
- black: string;
- backgroundCircle: string;
- backgroundCircleNotConnected: string;
- backgroundApp: string;
- buttonsBorder: string;
- micVolume: string;
- timer: string;
- disabledMic: string;
- disabledVision: string;
-};
-
-const Colors: ColorsType = {
- white: '#ffffff',
- black: '#000000',
- backgroundCircle: '#374151',
- backgroundCircleNotConnected: '#D1D5DB',
- backgroundApp: '#F9FAFB',
- buttonsBorder: '#E5E7EB',
- micVolume: '#86EFAC',
- timer: '#E5E7EB',
- disabledMic: '#ee6b6e',
- disabledVision: '#BBF7D0',
-};
-
-export default Colors;
diff --git a/examples/simple-chatbot/client/react-native/src/theme/CustomButton.tsx b/examples/simple-chatbot/client/react-native/src/theme/CustomButton.tsx
deleted file mode 100644
index 648a8ff4e..000000000
--- a/examples/simple-chatbot/client/react-native/src/theme/CustomButton.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import React from 'react';
-import { TouchableOpacity, Text, StyleSheet, ViewStyle, TextStyle, GestureResponderEvent } from 'react-native';
-import { MaterialIcons } from '@expo/vector-icons';
-
-interface CustomButtonProps {
- title: string;
- onPress: (event: GestureResponderEvent) => void;
- backgroundColor?: string; // Optional prop for background color
- textColor?: string; // Optional prop for text color
- style?: ViewStyle; // Optional additional styles for the button container
- textStyle?: TextStyle; // Optional additional styles for the text
- iconName?: string; // Optional prop for the icon name from MaterialIcons
- iconPosition?: 'left' | 'right'; // Optional prop to control icon position
- iconSize?: number; // Optional prop for icon size
- iconColor?: string; // Optional prop for icon color
-}
-
-const CustomButton: React.FC = ({
- title,
- onPress,
- backgroundColor = 'black',
- textColor = 'white',
- style,
- textStyle,
- iconName,
- iconPosition = 'left',
- iconSize = 24,
- iconColor = 'white',
-}) => {
- return (
-
- {iconName && iconPosition === 'left' && (
-
- )}
- {title}
- {iconName && iconPosition === 'right' && (
-
- )}
-
- );
-};
-
-const styles = StyleSheet.create({
- button: {
- padding: 12,
- borderRadius: 8,
- alignItems: 'center',
- justifyContent: 'center',
- flexDirection: 'row', // Ensures icon and text are aligned in a row
- },
- text: {
- fontSize: 16,
- fontWeight: 'bold',
- },
- icon: {
- marginHorizontal: 5, // Adds space between the icon and text
- },
-});
-
-export default CustomButton;
diff --git a/examples/simple-chatbot/client/react-native/src/views/MeetingView.tsx b/examples/simple-chatbot/client/react-native/src/views/MeetingView.tsx
deleted file mode 100644
index 1c0ccd91b..000000000
--- a/examples/simple-chatbot/client/react-native/src/views/MeetingView.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import {
- View,
- StyleSheet,
- Text,
- Image,
- TouchableOpacity,
-} from 'react-native';
-
-import React from "react"
-
-import { useVoiceClient } from '../context/VoiceClientContext';
-
-import { Images } from '../theme/Assets';
-import { MaterialIcons } from '@expo/vector-icons';
-
-import WaveformView from '../components/WaveformView';
-import MicrophoneView from '../components/MicrophoneView';
-import { SafeAreaView } from 'react-native-safe-area-context';
-import Colors from '../theme/Colors';
-import CustomButton from '../theme/CustomButton';
-
-const MeetingView: React.FC = () => {
-
- const { leave, toggleMicInput, toggleCamInput, timerCountDown } = useVoiceClient();
-
- const timerString = (count: number): string => {
- const hours = Math.floor(count / 3600);
- const minutes = Math.floor((count % 3600) / 60);
- const seconds = count % 60;
- return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
- };
-
- return (
-
-
-
-
-
-
- {timerString(timerCountDown)}
-
-
-
-
-
-
-
-
-
-
-
-
- {/* Bottom Panel */}
-
-
-
-
-
- );
-};
-
-const styles = StyleSheet.create({
- safeArea: {
- flex: 1,
- width: "100%",
- backgroundColor: Colors.backgroundApp,
- },
- container: {
- flex: 1,
- padding: 20,
- },
- header: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'space-between',
- paddingBottom: 10,
- },
- botImage: {
- width: 48,
- height: 48,
- },
- timerContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- backgroundColor: Colors.timer,
- padding: 10,
- borderRadius: 12,
- },
- timerText: {
- color: 'black',
- fontWeight: '500',
- fontSize: 18,
- marginLeft: 5,
- },
- mainPanel: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- },
- bottomControls: {
- flexDirection: 'row',
- justifyContent: 'center',
- alignItems: 'center',
- width: '100%',
- paddingBottom: 20,
- },
- microphone: {
- width: 160,
- height: 160,
- },
- camera: {
- width: 120,
- height: 120,
- },
- bottomPanel: {
- paddingVertical: 10,
- },
- endButton: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- backgroundColor: 'black',
- borderRadius: 12,
- padding: 10,
- },
- endText: {
- marginLeft: 5,
- color: 'white',
- },
-});
-
-export default MeetingView;
diff --git a/examples/simple-chatbot/client/react-native/src/views/PreJoinView.tsx b/examples/simple-chatbot/client/react-native/src/views/PreJoinView.tsx
deleted file mode 100644
index 36ab20666..000000000
--- a/examples/simple-chatbot/client/react-native/src/views/PreJoinView.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import {
- View,
- StyleSheet,
- Text,
- TextInput,
- Image
-} from "react-native"
-
-import React, { useEffect, useState } from 'react';
-
-import { useVoiceClient } from '../context/VoiceClientContext';
-
-import Colors from '../theme/Colors';
-import { Images } from '../theme/Assets';
-import CustomButton from '../theme/CustomButton';
-import { SettingsManager } from '../settings/SettingsManager';
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- padding: 20,
- backgroundColor: Colors.backgroundApp,
- justifyContent: 'center',
- alignItems: 'center',
- },
- image: {
- width: 64,
- height: 64,
- marginBottom: 20,
- },
- header: {
- fontSize: 18,
- fontWeight: 'bold',
- marginBottom: 20,
- },
- textInput: {
- width: '100%',
- padding: 10,
- borderColor: Colors.buttonsBorder,
- backgroundColor: Colors.white,
- borderWidth: 1,
- borderRadius: 5,
- marginBottom: 10,
- },
- lastTextInput: {
- marginBottom: 20,
- },
-});
-
-const PreJoinView: React.FC = () => {
- const { start } = useVoiceClient();
-
- const [backendURL, setBackendURL] = useState('')
-
- useEffect(() => {
- const loadSettings = async () => {
- const loadedSettings = await SettingsManager.getSettings();
- setBackendURL(loadedSettings.backendURL)
- };
- loadSettings();
- }, []);
-
- return (
-
-
- Connect to Pipecat.
-
- start(backendURL)}
- backgroundColor={Colors.backgroundCircle}
- />
-
- )
-};
-
-export default PreJoinView;
diff --git a/examples/simple-chatbot/client/react-native/tsconfig.json b/examples/simple-chatbot/client/react-native/tsconfig.json
deleted file mode 100644
index b04c1ecbd..000000000
--- a/examples/simple-chatbot/client/react-native/tsconfig.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "compilerOptions": {
- "rootDir": ".",
- "allowUnreachableCode": false,
- "allowUnusedLabels": false,
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "jsx": "react-jsx",
- "lib": [
- "ESNext"
- ],
- "module": "ESNext",
- "moduleResolution": "Bundler",
- "noEmit": true,
- "noFallthroughCasesInSwitch": true,
- "noImplicitReturns": true,
- "noImplicitUseStrict": false,
- "noStrictGenericChecks": false,
- "noUncheckedIndexedAccess": true,
- "noUnusedLocals": false,
- "noUnusedParameters": true,
- "resolveJsonModule": true,
- "skipLibCheck": true,
- "strict": true,
- "target": "ESNext",
- "verbatimModuleSyntax": false
- },
- "extends": "expo/tsconfig.base"
-}
diff --git a/examples/simple-chatbot/client/react-native/yarn.lock b/examples/simple-chatbot/client/react-native/yarn.lock
deleted file mode 100644
index 99b493af4..000000000
--- a/examples/simple-chatbot/client/react-native/yarn.lock
+++ /dev/null
@@ -1,4979 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@0no-co/graphql.web@^1.0.5", "@0no-co/graphql.web@^1.0.8":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.1.2.tgz#9af8deaf3f236c1c6ee99cc5349051475e5dcc83"
- integrity sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==
-
-"@ampproject/remapping@^2.2.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
- integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
- dependencies:
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.24"
-
-"@babel/code-frame@7.10.4", "@babel/code-frame@~7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
- integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
- dependencies:
- "@babel/highlight" "^7.10.4"
-
-"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
- integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
- dependencies:
- "@babel/helper-validator-identifier" "^7.27.1"
- js-tokens "^4.0.0"
- picocolors "^1.1.1"
-
-"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.1.tgz#db7cf122745e0a332c44e847ddc4f5e5221a43f6"
- integrity sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==
-
-"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.0", "@babel/core@^7.25.2", "@babel/core@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6"
- integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.27.1"
- "@babel/generator" "^7.27.1"
- "@babel/helper-compilation-targets" "^7.27.1"
- "@babel/helper-module-transforms" "^7.27.1"
- "@babel/helpers" "^7.27.1"
- "@babel/parser" "^7.27.1"
- "@babel/template" "^7.27.1"
- "@babel/traverse" "^7.27.1"
- "@babel/types" "^7.27.1"
- convert-source-map "^2.0.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.3"
- semver "^6.3.1"
-
-"@babel/generator@^7.20.5", "@babel/generator@^7.25.0", "@babel/generator@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230"
- integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==
- dependencies:
- "@babel/parser" "^7.27.1"
- "@babel/types" "^7.27.1"
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.25"
- jsesc "^3.0.2"
-
-"@babel/helper-annotate-as-pure@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz#4345d81a9a46a6486e24d069469f13e60445c05d"
- integrity sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==
- dependencies:
- "@babel/types" "^7.27.1"
-
-"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz#eac1096c7374f161e4f33fc8ae38f4ddf122087a"
- integrity sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==
- dependencies:
- "@babel/compat-data" "^7.27.1"
- "@babel/helper-validator-option" "^7.27.1"
- browserslist "^4.24.0"
- lru-cache "^5.1.1"
- semver "^6.3.1"
-
-"@babel/helper-create-class-features-plugin@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz#5bee4262a6ea5ddc852d0806199eb17ca3de9281"
- integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.27.1"
- "@babel/helper-member-expression-to-functions" "^7.27.1"
- "@babel/helper-optimise-call-expression" "^7.27.1"
- "@babel/helper-replace-supers" "^7.27.1"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
- "@babel/traverse" "^7.27.1"
- semver "^6.3.1"
-
-"@babel/helper-create-regexp-features-plugin@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53"
- integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.27.1"
- regexpu-core "^6.2.0"
- semver "^6.3.1"
-
-"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4":
- version "0.6.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab"
- integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==
- dependencies:
- "@babel/helper-compilation-targets" "^7.22.6"
- "@babel/helper-plugin-utils" "^7.22.5"
- debug "^4.1.1"
- lodash.debounce "^4.0.8"
- resolve "^1.14.2"
-
-"@babel/helper-member-expression-to-functions@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44"
- integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==
- dependencies:
- "@babel/traverse" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/helper-module-imports@^7.25.9", "@babel/helper-module-imports@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
- integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
- dependencies:
- "@babel/traverse" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/helper-module-transforms@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f"
- integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==
- dependencies:
- "@babel/helper-module-imports" "^7.27.1"
- "@babel/helper-validator-identifier" "^7.27.1"
- "@babel/traverse" "^7.27.1"
-
-"@babel/helper-optimise-call-expression@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200"
- integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==
- dependencies:
- "@babel/types" "^7.27.1"
-
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
- integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
-
-"@babel/helper-remap-async-to-generator@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6"
- integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.27.1"
- "@babel/helper-wrap-function" "^7.27.1"
- "@babel/traverse" "^7.27.1"
-
-"@babel/helper-replace-supers@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0"
- integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==
- dependencies:
- "@babel/helper-member-expression-to-functions" "^7.27.1"
- "@babel/helper-optimise-call-expression" "^7.27.1"
- "@babel/traverse" "^7.27.1"
-
-"@babel/helper-skip-transparent-expression-wrappers@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56"
- integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==
- dependencies:
- "@babel/traverse" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/helper-string-parser@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
- integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
-
-"@babel/helper-validator-identifier@^7.25.9", "@babel/helper-validator-identifier@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
- integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
-
-"@babel/helper-validator-option@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
- integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
-
-"@babel/helper-wrap-function@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz#b88285009c31427af318d4fe37651cd62a142409"
- integrity sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==
- dependencies:
- "@babel/template" "^7.27.1"
- "@babel/traverse" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/helpers@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4"
- integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==
- dependencies:
- "@babel/template" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/highlight@^7.10.4":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6"
- integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==
- dependencies:
- "@babel/helper-validator-identifier" "^7.25.9"
- chalk "^2.4.2"
- js-tokens "^4.0.0"
- picocolors "^1.0.0"
-
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.3", "@babel/parser@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.1.tgz#c55d5bed74449d1223701f1869b9ee345cc94cc9"
- integrity sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==
- dependencies:
- "@babel/types" "^7.27.1"
-
-"@babel/plugin-proposal-decorators@^7.12.9":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz#3686f424b2f8b2fee7579aa4df133a4f5244a596"
- integrity sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/plugin-syntax-decorators" "^7.27.1"
-
-"@babel/plugin-proposal-export-default-from@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz#59b050b0e5fdc366162ab01af4fcbac06ea40919"
- integrity sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-syntax-async-generators@^7.8.4":
- version "7.8.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
- integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-bigint@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
- integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-class-properties@^7.12.13":
- version "7.12.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
- integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.12.13"
-
-"@babel/plugin-syntax-class-static-block@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
- integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/plugin-syntax-decorators@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz#ee7dd9590aeebc05f9d4c8c0560007b05979a63d"
- integrity sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-syntax-dynamic-import@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
- integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-export-default-from@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.27.1.tgz#8efed172e79ab657c7fa4d599224798212fb7e18"
- integrity sha512-eBC/3KSekshx19+N40MzjWqJd7KTEdOoLesAfa4IDFI8eRz5a47i5Oszus6zG/cwIXN63YhgLOMSSNJx49sENg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz#6c83cf0d7d635b716827284b7ecd5aead9237662"
- integrity sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-syntax-import-attributes@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07"
- integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-syntax-import-meta@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
- integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
- dependencies:
- "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-json-strings@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
- integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-jsx@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c"
- integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
- integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
- dependencies:
- "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
- integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-numeric-separator@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
- integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
- dependencies:
- "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-object-rest-spread@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
- integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
- integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-chaining@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
- integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-private-property-in-object@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
- integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/plugin-syntax-top-level-await@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
- integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.14.5"
-
-"@babel/plugin-syntax-typescript@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18"
- integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-arrow-functions@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a"
- integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-async-generator-functions@^7.25.4":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz#ca433df983d68e1375398e7ca71bf2a4f6fd89d7"
- integrity sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-remap-async-to-generator" "^7.27.1"
- "@babel/traverse" "^7.27.1"
-
-"@babel/plugin-transform-async-to-generator@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7"
- integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==
- dependencies:
- "@babel/helper-module-imports" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-remap-async-to-generator" "^7.27.1"
-
-"@babel/plugin-transform-block-scoping@^7.25.0":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz#bc0dbe8ac6de5602981ba58ef68c6df8ef9bfbb3"
- integrity sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-class-properties@^7.25.4":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925"
- integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-classes@^7.25.4":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz#03bb04bea2c7b2f711f0db7304a8da46a85cced4"
- integrity sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.27.1"
- "@babel/helper-compilation-targets" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-replace-supers" "^7.27.1"
- "@babel/traverse" "^7.27.1"
- globals "^11.1.0"
-
-"@babel/plugin-transform-computed-properties@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa"
- integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/template" "^7.27.1"
-
-"@babel/plugin-transform-destructuring@^7.24.8":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz#d5916ef7089cb254df0418ae524533c1b72ba656"
- integrity sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-export-namespace-from@^7.25.9":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23"
- integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-flow-strip-types@^7.25.2":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz#5def3e1e7730f008d683144fb79b724f92c5cdf9"
- integrity sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/plugin-syntax-flow" "^7.27.1"
-
-"@babel/plugin-transform-for-of@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a"
- integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
-
-"@babel/plugin-transform-function-name@^7.25.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7"
- integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==
- dependencies:
- "@babel/helper-compilation-targets" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/traverse" "^7.27.1"
-
-"@babel/plugin-transform-literals@^7.25.2":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24"
- integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-logical-assignment-operators@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa"
- integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-modules-commonjs@^7.24.8", "@babel/plugin-transform-modules-commonjs@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832"
- integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==
- dependencies:
- "@babel/helper-module-transforms" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1"
- integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==
- dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d"
- integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-numeric-separator@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6"
- integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-object-rest-spread@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.1.tgz#845bdcd74c87b8f565c25cc6812f7f4f43c9ed79"
- integrity sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA==
- dependencies:
- "@babel/helper-compilation-targets" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/plugin-transform-parameters" "^7.27.1"
-
-"@babel/plugin-transform-optional-catch-binding@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c"
- integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-optional-chaining@^7.24.8":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f"
- integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
-
-"@babel/plugin-transform-parameters@^7.24.7", "@babel/plugin-transform-parameters@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz#80334b54b9b1ac5244155a0c8304a187a618d5a7"
- integrity sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-private-methods@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af"
- integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-private-property-in-object@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11"
- integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.27.1"
- "@babel/helper-create-class-features-plugin" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-react-display-name@^7.24.7", "@babel/plugin-transform-react-display-name@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz#43af31362d71f7848cfac0cbc212882b1a16e80f"
- integrity sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-react-jsx-development@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz#47ff95940e20a3a70e68ad3d4fcb657b647f6c98"
- integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==
- dependencies:
- "@babel/plugin-transform-react-jsx" "^7.27.1"
-
-"@babel/plugin-transform-react-jsx-self@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz#af678d8506acf52c577cac73ff7fe6615c85fc92"
- integrity sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-react-jsx-source@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz#dcfe2c24094bb757bf73960374e7c55e434f19f0"
- integrity sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-react-jsx@^7.25.2", "@babel/plugin-transform-react-jsx@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz#1023bc94b78b0a2d68c82b5e96aed573bcfb9db0"
- integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.27.1"
- "@babel/helper-module-imports" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/plugin-syntax-jsx" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/plugin-transform-react-pure-annotations@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz#339f1ce355eae242e0649f232b1c68907c02e879"
- integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-regenerator@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz#0a471df9213416e44cd66bf67176b66f65768401"
- integrity sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-runtime@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz#f9fbf71949a209eb26b3e60375b1d956937b8be9"
- integrity sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw==
- dependencies:
- "@babel/helper-module-imports" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- babel-plugin-polyfill-corejs2 "^0.4.10"
- babel-plugin-polyfill-corejs3 "^0.11.0"
- babel-plugin-polyfill-regenerator "^0.6.1"
- semver "^6.3.1"
-
-"@babel/plugin-transform-shorthand-properties@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90"
- integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-spread@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08"
- integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
-
-"@babel/plugin-transform-sticky-regex@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280"
- integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-typescript@^7.25.2", "@babel/plugin-transform-typescript@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz#d3bb65598bece03f773111e88cc4e8e5070f1140"
- integrity sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.27.1"
- "@babel/helper-create-class-features-plugin" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
- "@babel/plugin-syntax-typescript" "^7.27.1"
-
-"@babel/plugin-transform-unicode-regex@^7.24.7":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97"
- integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==
- dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/preset-react@^7.22.15":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.27.1.tgz#86ea0a5ca3984663f744be2fd26cb6747c3fd0ec"
- integrity sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-validator-option" "^7.27.1"
- "@babel/plugin-transform-react-display-name" "^7.27.1"
- "@babel/plugin-transform-react-jsx" "^7.27.1"
- "@babel/plugin-transform-react-jsx-development" "^7.27.1"
- "@babel/plugin-transform-react-pure-annotations" "^7.27.1"
-
-"@babel/preset-typescript@^7.23.0":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912"
- integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-validator-option" "^7.27.1"
- "@babel/plugin-syntax-jsx" "^7.27.1"
- "@babel/plugin-transform-modules-commonjs" "^7.27.1"
- "@babel/plugin-transform-typescript" "^7.27.1"
-
-"@babel/runtime@^7.12.5", "@babel/runtime@^7.20.0", "@babel/runtime@^7.25.0":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541"
- integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==
-
-"@babel/template@^7.25.0", "@babel/template@^7.27.1", "@babel/template@^7.3.3":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.1.tgz#b9e4f55c17a92312774dfbdde1b3c01c547bbae2"
- integrity sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==
- dependencies:
- "@babel/code-frame" "^7.27.1"
- "@babel/parser" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291"
- integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==
- dependencies:
- "@babel/code-frame" "^7.27.1"
- "@babel/generator" "^7.27.1"
- "@babel/parser" "^7.27.1"
- "@babel/template" "^7.27.1"
- "@babel/types" "^7.27.1"
- debug "^4.3.1"
- globals "^11.1.0"
-
-"@babel/traverse@^7.25.3", "@babel/traverse@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291"
- integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==
- dependencies:
- "@babel/code-frame" "^7.27.1"
- "@babel/generator" "^7.27.1"
- "@babel/parser" "^7.27.1"
- "@babel/template" "^7.27.1"
- "@babel/types" "^7.27.1"
- debug "^4.3.1"
- globals "^11.1.0"
-
-"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.25.2", "@babel/types@^7.27.1", "@babel/types@^7.3.3":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560"
- integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==
- dependencies:
- "@babel/helper-string-parser" "^7.27.1"
- "@babel/helper-validator-identifier" "^7.27.1"
-
-"@config-plugins/react-native-webrtc@^10.0.0":
- version "10.0.0"
- resolved "https://registry.yarnpkg.com/@config-plugins/react-native-webrtc/-/react-native-webrtc-10.0.0.tgz#66c7d34bb783b26bc7ebcec9ccb021fa1a55433c"
- integrity sha512-q6owBOwQo3HRx4/b0FteE06Ymlcx7pK5bw+Stg77wgTWyxWAJ90yfVvvdMckzxuxMwDd78o9yCLKIONTulHD4A==
-
-"@daily-co/config-plugin-rn-daily-js@0.0.7":
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/@daily-co/config-plugin-rn-daily-js/-/config-plugin-rn-daily-js-0.0.7.tgz#89069c4f662d1d2758b426193e7da510dcb6f812"
- integrity sha512-8j6itEb2sxkxPDOnaO0FKpGIKvbvtLho0l25CdS01aa4VEAUKHWrxyUO6OVQkt2btfifsugBD6oUpO0X1fCbKQ==
- dependencies:
- expo-build-properties "~0.8.3"
-
-"@daily-co/daily-js@^0.79.0":
- version "0.79.0"
- resolved "https://registry.yarnpkg.com/@daily-co/daily-js/-/daily-js-0.79.0.tgz#6628c145951f9951ea213c65e916d6e8a3934b45"
- integrity sha512-Ii/Zi6cfTl2EZBpX8msRPNkkCHcajA+ErXpbN2Xe2KySd1Nb4IzC/QWJlSl9VA9pIlYPQicRTDoZnoym/0uEAw==
- dependencies:
- "@babel/runtime" "^7.12.5"
- "@sentry/browser" "^8.33.1"
- bowser "^2.8.1"
- dequal "^2.0.3"
- events "^3.1.0"
-
-"@daily-co/react-native-daily-js@^0.76.0":
- version "0.76.0"
- resolved "https://registry.yarnpkg.com/@daily-co/react-native-daily-js/-/react-native-daily-js-0.76.0.tgz#63a7f55bce975e8af30ca3f7ac4a8018e935bb5e"
- integrity sha512-/W8FJVIKAF8wgZMJdPyNaRw06r4UHh4MYNlMQS8eQMmIdskFN7kLL3Vpd/9qm3VaH65Aev6RH/n4X/p/yoc4Ug==
- dependencies:
- "@daily-co/daily-js" "^0.79.0"
- "@types/react-native-background-timer" "^2.0.0"
- base-64 "^1.0.0"
- react-native-url-polyfill "^1.1.2"
-
-"@daily-co/react-native-webrtc@^118.0.3-daily.2":
- version "118.0.3-daily.2"
- resolved "https://registry.yarnpkg.com/@daily-co/react-native-webrtc/-/react-native-webrtc-118.0.3-daily.2.tgz#d21960894e5fef72f9d360eee17d4f34d214da9f"
- integrity sha512-Ofwvnx0WL+Q21tQBJOWNKvV1gk/5kwPerwUCD7hCREuBDVRfSNtpRhQcuISNjmn7Z2eV405hgK0c9kOUu8vDQg==
- dependencies:
- "@types/react" "17.0.40"
- "@types/react-native" "0.67.3"
- base64-js "1.5.1"
- debug "4.3.4"
- event-target-shim "6.0.2"
-
-"@egjs/hammerjs@^2.0.17":
- version "2.0.17"
- resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124"
- integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==
- dependencies:
- "@types/hammerjs" "^2.0.36"
-
-"@expo/cli@0.24.11":
- version "0.24.11"
- resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.24.11.tgz#a200b5b63c909fe72ded0d3cfcf971f84c0f346a"
- integrity sha512-bQtXdonOgg2OgPjHd7D5IkiPObKyiLs+HVM2A1VFV1pOT/8kc2kF/I4lN/Y5uce03FC8v0VRv6rKrDQPlTVWlg==
- dependencies:
- "@0no-co/graphql.web" "^1.0.8"
- "@babel/runtime" "^7.20.0"
- "@expo/code-signing-certificates" "^0.0.5"
- "@expo/config" "~11.0.8"
- "@expo/config-plugins" "~10.0.2"
- "@expo/devcert" "^1.1.2"
- "@expo/env" "~1.0.5"
- "@expo/image-utils" "^0.7.4"
- "@expo/json-file" "^9.1.4"
- "@expo/metro-config" "~0.20.13"
- "@expo/osascript" "^2.2.4"
- "@expo/package-manager" "^1.8.4"
- "@expo/plist" "^0.3.4"
- "@expo/prebuild-config" "^9.0.5"
- "@expo/spawn-async" "^1.7.2"
- "@expo/ws-tunnel" "^1.0.1"
- "@expo/xcpretty" "^4.3.0"
- "@react-native/dev-middleware" "0.79.2"
- "@urql/core" "^5.0.6"
- "@urql/exchange-retry" "^1.3.0"
- accepts "^1.3.8"
- arg "^5.0.2"
- better-opn "~3.0.2"
- bplist-creator "0.1.0"
- bplist-parser "^0.3.1"
- chalk "^4.0.0"
- ci-info "^3.3.0"
- compression "^1.7.4"
- connect "^3.7.0"
- debug "^4.3.4"
- env-editor "^0.4.1"
- freeport-async "^2.0.0"
- getenv "^1.0.0"
- glob "^10.4.2"
- lan-network "^0.1.4"
- minimatch "^9.0.0"
- node-forge "^1.3.1"
- npm-package-arg "^11.0.0"
- ora "^3.4.0"
- picomatch "^3.0.1"
- pretty-bytes "^5.6.0"
- pretty-format "^29.7.0"
- progress "^2.0.3"
- prompts "^2.3.2"
- qrcode-terminal "0.11.0"
- require-from-string "^2.0.2"
- requireg "^0.2.2"
- resolve "^1.22.2"
- resolve-from "^5.0.0"
- resolve.exports "^2.0.3"
- semver "^7.6.0"
- send "^0.19.0"
- slugify "^1.3.4"
- source-map-support "~0.5.21"
- stacktrace-parser "^0.1.10"
- structured-headers "^0.4.1"
- tar "^7.4.3"
- terminal-link "^2.1.1"
- undici "^6.18.2"
- wrap-ansi "^7.0.0"
- ws "^8.12.1"
-
-"@expo/code-signing-certificates@^0.0.5":
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz#a693ff684fb20c4725dade4b88a6a9f96b02496c"
- integrity sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==
- dependencies:
- node-forge "^1.2.1"
- nullthrows "^1.1.1"
-
-"@expo/config-plugins@~10.0.2":
- version "10.0.2"
- resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-10.0.2.tgz#040867991e9c8c527b4f5c13a47bcf040a7479fe"
- integrity sha512-TzUn3pPdpwCS0yYaSlZOClgDmCX8N4I2lfgitX5oStqmvpPtB+vqtdyqsVM02fQ2tlJIAqwBW+NHaHqqy8Jv7g==
- dependencies:
- "@expo/config-types" "^53.0.3"
- "@expo/json-file" "~9.1.4"
- "@expo/plist" "^0.3.4"
- "@expo/sdk-runtime-versions" "^1.0.0"
- chalk "^4.1.2"
- debug "^4.3.5"
- getenv "^1.0.0"
- glob "^10.4.2"
- resolve-from "^5.0.0"
- semver "^7.5.4"
- slash "^3.0.0"
- slugify "^1.6.6"
- xcode "^3.0.1"
- xml2js "0.6.0"
-
-"@expo/config-types@^53.0.3":
- version "53.0.3"
- resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-53.0.3.tgz#d083d9b095972e89eee96c41d085feb5b92d2749"
- integrity sha512-V1e6CiM4TXtGxG/W2Msjp/QOx/vikLo5IUGMvEMjgAglBfGYx3PXfqsUb5aZDt6kqA3bDDwFuZoS5vNm/SYwSg==
-
-"@expo/config@~11.0.6", "@expo/config@~11.0.7", "@expo/config@~11.0.8":
- version "11.0.8"
- resolved "https://registry.yarnpkg.com/@expo/config/-/config-11.0.8.tgz#658538d4321cf6edf6741f8b8506fda0046d5e94"
- integrity sha512-udLrpW4SvXUwF+ntJ0RzEjRbFoSS7Tr/rMrvhfISHWGbcZ09+c+QkI0O8y1sEBWQDpI/IlC9REPqGm5b7HweDw==
- dependencies:
- "@babel/code-frame" "~7.10.4"
- "@expo/config-plugins" "~10.0.2"
- "@expo/config-types" "^53.0.3"
- "@expo/json-file" "^9.1.4"
- deepmerge "^4.3.1"
- getenv "^1.0.0"
- glob "^10.4.2"
- require-from-string "^2.0.2"
- resolve-from "^5.0.0"
- resolve-workspace-root "^2.0.0"
- semver "^7.6.0"
- slugify "^1.3.4"
- sucrase "3.35.0"
-
-"@expo/devcert@^1.1.2":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@expo/devcert/-/devcert-1.2.0.tgz#7b32c2d959e36baaa0649433395e5170c808b44f"
- integrity sha512-Uilcv3xGELD5t/b0eM4cxBFEKQRIivB3v7i+VhWLV/gL98aw810unLKKJbGAxAIhY6Ipyz8ChWibFsKFXYwstA==
- dependencies:
- "@expo/sudo-prompt" "^9.3.1"
- debug "^3.1.0"
- glob "^10.4.2"
-
-"@expo/env@~1.0.5":
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/@expo/env/-/env-1.0.5.tgz#b3b1aa18ab9838d8f40468e0321affc4c54377a2"
- integrity sha512-dtEZ4CAMaVrFu2+tezhU3FoGWtbzQl50xV+rNJE5lYVRjUflWiZkVHlHkWUlPAwDPifLy4TuissVfScGGPWR5g==
- dependencies:
- chalk "^4.0.0"
- debug "^4.3.4"
- dotenv "~16.4.5"
- dotenv-expand "~11.0.6"
- getenv "^1.0.0"
-
-"@expo/fingerprint@0.12.4":
- version "0.12.4"
- resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.12.4.tgz#d4cc4de50e7b6d4e03b0d38850d1e4a136b74c8c"
- integrity sha512-HOJVvjiQYVHIouCOfFf4JRrQvBDIV/12GVG2iwbw1iGwmpQVkPgEXa9lN0f2yuS4J3QXHs73wr9jvuCjMmJlfw==
- dependencies:
- "@expo/spawn-async" "^1.7.2"
- arg "^5.0.2"
- chalk "^4.1.2"
- debug "^4.3.4"
- find-up "^5.0.0"
- getenv "^1.0.0"
- minimatch "^9.0.0"
- p-limit "^3.1.0"
- resolve-from "^5.0.0"
- semver "^7.6.0"
-
-"@expo/image-utils@^0.7.4":
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.7.4.tgz#8f19e53cfc3b66293d9b0749f703e667080895d0"
- integrity sha512-LcZ82EJy/t/a1avwIboeZbO6hlw8CvsIRh2k6SWPcAOvW0RqynyKFzUJsvnjWlhUzfBEn4oI7y/Pu5Xkw3KkkA==
- dependencies:
- "@expo/spawn-async" "^1.7.2"
- chalk "^4.0.0"
- getenv "^1.0.0"
- jimp-compact "0.16.1"
- parse-png "^2.1.0"
- resolve-from "^5.0.0"
- semver "^7.6.0"
- temp-dir "~2.0.0"
- unique-string "~2.0.0"
-
-"@expo/json-file@^9.1.4", "@expo/json-file@~9.1.4":
- version "9.1.4"
- resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-9.1.4.tgz#e719d092c08afb3234643f9285e57c6a24989327"
- integrity sha512-7Bv86X27fPERGhw8aJEZvRcH9sk+9BenDnEmrI3ZpywKodYSBgc8lX9Y32faNVQ/p0YbDK9zdJ0BfAKNAOyi0A==
- dependencies:
- "@babel/code-frame" "~7.10.4"
- json5 "^2.2.3"
-
-"@expo/metro-config@0.20.13", "@expo/metro-config@~0.20.13":
- version "0.20.13"
- resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.20.13.tgz#2de0ee17b7e8b79e57b8115b95ff13e6d55f992b"
- integrity sha512-yyhyBBX2HaqFpuGq8r73d9eB1nJeUWDrNDrPANWuXNwfM/fd5pCT1GXmlRe4CWPQ4dPOlYnBIyrEn5c2FI5J4w==
- dependencies:
- "@babel/core" "^7.20.0"
- "@babel/generator" "^7.20.5"
- "@babel/parser" "^7.20.0"
- "@babel/types" "^7.20.0"
- "@expo/config" "~11.0.8"
- "@expo/env" "~1.0.5"
- "@expo/json-file" "~9.1.4"
- "@expo/spawn-async" "^1.7.2"
- chalk "^4.1.0"
- debug "^4.3.2"
- dotenv "~16.4.5"
- dotenv-expand "~11.0.6"
- getenv "^1.0.0"
- glob "^10.4.2"
- jsc-safe-url "^0.2.4"
- lightningcss "~1.27.0"
- minimatch "^9.0.0"
- postcss "~8.4.32"
- resolve-from "^5.0.0"
-
-"@expo/osascript@^2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@expo/osascript/-/osascript-2.2.4.tgz#4414d97f91e29260a9b361529d20875430dc0af5"
- integrity sha512-Q+Oyj+1pdRiHHpev9YjqfMZzByFH8UhKvSszxa0acTveijjDhQgWrq4e9T/cchBHi0GWZpGczWyiyJkk1wM1dg==
- dependencies:
- "@expo/spawn-async" "^1.7.2"
- exec-async "^2.2.0"
-
-"@expo/package-manager@^1.8.4":
- version "1.8.4"
- resolved "https://registry.yarnpkg.com/@expo/package-manager/-/package-manager-1.8.4.tgz#6126d93b25bbfec515436833e6f6ca5677b7e8bd"
- integrity sha512-8H8tLga/NS3iS7QaX/NneRPqbObnHvVCfMCo0ShudreOFmvmgqhYjRlkZTRstSyFqefai8ONaT4VmnLHneRYYg==
- dependencies:
- "@expo/json-file" "^9.1.4"
- "@expo/spawn-async" "^1.7.2"
- chalk "^4.0.0"
- npm-package-arg "^11.0.0"
- ora "^3.4.0"
- resolve-workspace-root "^2.0.0"
-
-"@expo/plist@^0.3.4":
- version "0.3.4"
- resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.3.4.tgz#0c48eeff2158cf26c5c9ed4f681d24997ccfbeca"
- integrity sha512-MhBLaUJNe9FQDDU2xhSNS4SAolr6K2wuyi4+A79vYuXLkAoICsbTwcGEQJN5jPY6D9izO/jsXh5k0h+mIWQMdw==
- dependencies:
- "@xmldom/xmldom" "^0.8.8"
- base64-js "^1.2.3"
- xmlbuilder "^15.1.1"
-
-"@expo/prebuild-config@^9.0.5":
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.5.tgz#b8b864b5e19489a1f66442ae30d5d7295f658297"
- integrity sha512-oiSVU5ePu9lsOvn5p4xplqjzPlcZHzKYwzuonTa9GCH1GxcOEIBsvMVQiHBXHtqvgV2dztjm34kdXV//+9jtCA==
- dependencies:
- "@expo/config" "~11.0.7"
- "@expo/config-plugins" "~10.0.2"
- "@expo/config-types" "^53.0.3"
- "@expo/image-utils" "^0.7.4"
- "@expo/json-file" "^9.1.4"
- "@react-native/normalize-colors" "0.79.2"
- debug "^4.3.1"
- resolve-from "^5.0.0"
- semver "^7.6.0"
- xml2js "0.6.0"
-
-"@expo/sdk-runtime-versions@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c"
- integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==
-
-"@expo/spawn-async@^1.7.2":
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.7.2.tgz#fcfe66c3e387245e72154b1a7eae8cada6a47f58"
- integrity sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==
- dependencies:
- cross-spawn "^7.0.3"
-
-"@expo/sudo-prompt@^9.3.1":
- version "9.3.2"
- resolved "https://registry.yarnpkg.com/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz#0fd2813402a42988e49145cab220e25bea74b308"
- integrity sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==
-
-"@expo/vector-icons@^14.0.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-14.1.0.tgz#d3dddad8b6ea60502e0fe5485b86751827606ce4"
- integrity sha512-7T09UE9h8QDTsUeMGymB4i+iqvtEeaO5VvUjryFB4tugDTG/bkzViWA74hm5pfjjDEhYMXWaX112mcvhccmIwQ==
-
-"@expo/ws-tunnel@^1.0.1":
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz#92b70e7264ad42ea07f28a20f2f540b91d07bdd9"
- integrity sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==
-
-"@expo/xcpretty@^4.3.0":
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/@expo/xcpretty/-/xcpretty-4.3.2.tgz#12dba1295167a9c8dde4be783d74f7e81648ca5d"
- integrity sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==
- dependencies:
- "@babel/code-frame" "7.10.4"
- chalk "^4.1.0"
- find-up "^5.0.0"
- js-yaml "^4.1.0"
-
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
- dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-
-"@isaacs/fs-minipass@^4.0.0":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
- integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
- dependencies:
- minipass "^7.0.4"
-
-"@isaacs/ttlcache@^1.4.1":
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz#21fb23db34e9b6220c6ba023a0118a2dd3461ea2"
- integrity sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==
-
-"@istanbuljs/load-nyc-config@^1.0.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
- integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
- dependencies:
- camelcase "^5.3.1"
- find-up "^4.1.0"
- get-package-type "^0.1.0"
- js-yaml "^3.13.1"
- resolve-from "^5.0.0"
-
-"@istanbuljs/schema@^0.1.2":
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
- integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
-
-"@jest/create-cache-key-function@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0"
- integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==
- dependencies:
- "@jest/types" "^29.6.3"
-
-"@jest/environment@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7"
- integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==
- dependencies:
- "@jest/fake-timers" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- jest-mock "^29.7.0"
-
-"@jest/fake-timers@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565"
- integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==
- dependencies:
- "@jest/types" "^29.6.3"
- "@sinonjs/fake-timers" "^10.0.2"
- "@types/node" "*"
- jest-message-util "^29.7.0"
- jest-mock "^29.7.0"
- jest-util "^29.7.0"
-
-"@jest/schemas@^29.6.3":
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
- integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
- dependencies:
- "@sinclair/typebox" "^0.27.8"
-
-"@jest/transform@^29.7.0":
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c"
- integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==
- dependencies:
- "@babel/core" "^7.11.6"
- "@jest/types" "^29.6.3"
- "@jridgewell/trace-mapping" "^0.3.18"
- babel-plugin-istanbul "^6.1.1"
- chalk "^4.0.0"
- convert-source-map "^2.0.0"
- fast-json-stable-stringify "^2.1.0"
- graceful-fs "^4.2.9"
- jest-haste-map "^29.7.0"
- jest-regex-util "^29.6.3"
- jest-util "^29.7.0"
- micromatch "^4.0.4"
- pirates "^4.0.4"
- slash "^3.0.0"
- write-file-atomic "^4.0.2"
-
-"@jest/types@^29.6.3":
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59"
- integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==
- dependencies:
- "@jest/schemas" "^29.6.3"
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^3.0.0"
- "@types/node" "*"
- "@types/yargs" "^17.0.8"
- chalk "^4.0.0"
-
-"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
- integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
- dependencies:
- "@jridgewell/set-array" "^1.2.1"
- "@jridgewell/sourcemap-codec" "^1.4.10"
- "@jridgewell/trace-mapping" "^0.3.24"
-
-"@jridgewell/resolve-uri@^3.1.0":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
- integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
-
-"@jridgewell/set-array@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
- integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
-
-"@jridgewell/source-map@^0.3.3":
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a"
- integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==
- dependencies:
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.25"
-
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
- integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
-
-"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
- version "0.3.25"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
- integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
- dependencies:
- "@jridgewell/resolve-uri" "^3.1.0"
- "@jridgewell/sourcemap-codec" "^1.4.14"
-
-"@pipecat-ai/client-js@^0.3.5":
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/@pipecat-ai/client-js/-/client-js-0.3.5.tgz#70610e093097784dbfd777f071a5f21a601cd15f"
- integrity sha512-qmhnDjwY2XUtLjww35ShsYf5TF9BCuAk0tIj0oHjpTe6v6QOlgKQt8JVCAdc32p5ycouzSZOeDFtBd2aNWuq1g==
- dependencies:
- "@types/events" "^3.0.3"
- clone-deep "^4.0.1"
- events "^3.3.0"
- typed-emitter "^2.1.0"
- uuid "^10.0.0"
-
-"@pipecat-ai/react-native-daily-transport@^0.3.5":
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/@pipecat-ai/react-native-daily-transport/-/react-native-daily-transport-0.3.5.tgz#b88fff52ff498049cc5889816ab528791073c8f3"
- integrity sha512-L/Ynj6PACy2//Q9Yv3UqTfvf7070LhcavKI67yy0tSQ0wj8C7l2OIziPIAm8woP2BNGbaP7J88M5QRfPOp9F4Q==
- dependencies:
- "@pipecat-ai/client-js" "^0.3.5"
-
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-
-"@react-native-async-storage/async-storage@1.24.0":
- version "1.24.0"
- resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.24.0.tgz#888efbc62a26f7d9464b32f4d3027b7f2771999b"
- integrity sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g==
- dependencies:
- merge-options "^3.0.4"
-
-"@react-native/assets-registry@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.79.2.tgz#731963e664c8543f5b277e56c058bde612b69f50"
- integrity sha512-5h2Z7/+/HL/0h88s0JHOdRCW4CXMCJoROxqzHqxdrjGL6EBD1DdaB4ZqkCOEVSW4Vjhir5Qb97C8i/MPWEYPtg==
-
-"@react-native/babel-plugin-codegen@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.2.tgz#f3f86766a01487aaaa623ec62514af4c84400953"
- integrity sha512-d+NB7Uosn2ZWd4O4+7ZkB6q1a+0z2opD/4+Bzhk/Tv6fc5FrSftK2Noqxvo3/bhbdGFVPxf0yvLE8et4W17x/Q==
- dependencies:
- "@babel/traverse" "^7.25.3"
- "@react-native/codegen" "0.79.2"
-
-"@react-native/babel-preset@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.79.2.tgz#5a683a6efeea357a326f70c84a881be2bafbeae3"
- integrity sha512-/HNu869oUq4FUXizpiNWrIhucsYZqu0/0spudJEzk9SEKar0EjVDP7zkg/sKK+KccNypDQGW7nFXT8onzvQ3og==
- dependencies:
- "@babel/core" "^7.25.2"
- "@babel/plugin-proposal-export-default-from" "^7.24.7"
- "@babel/plugin-syntax-dynamic-import" "^7.8.3"
- "@babel/plugin-syntax-export-default-from" "^7.24.7"
- "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
- "@babel/plugin-syntax-optional-chaining" "^7.8.3"
- "@babel/plugin-transform-arrow-functions" "^7.24.7"
- "@babel/plugin-transform-async-generator-functions" "^7.25.4"
- "@babel/plugin-transform-async-to-generator" "^7.24.7"
- "@babel/plugin-transform-block-scoping" "^7.25.0"
- "@babel/plugin-transform-class-properties" "^7.25.4"
- "@babel/plugin-transform-classes" "^7.25.4"
- "@babel/plugin-transform-computed-properties" "^7.24.7"
- "@babel/plugin-transform-destructuring" "^7.24.8"
- "@babel/plugin-transform-flow-strip-types" "^7.25.2"
- "@babel/plugin-transform-for-of" "^7.24.7"
- "@babel/plugin-transform-function-name" "^7.25.1"
- "@babel/plugin-transform-literals" "^7.25.2"
- "@babel/plugin-transform-logical-assignment-operators" "^7.24.7"
- "@babel/plugin-transform-modules-commonjs" "^7.24.8"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7"
- "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7"
- "@babel/plugin-transform-numeric-separator" "^7.24.7"
- "@babel/plugin-transform-object-rest-spread" "^7.24.7"
- "@babel/plugin-transform-optional-catch-binding" "^7.24.7"
- "@babel/plugin-transform-optional-chaining" "^7.24.8"
- "@babel/plugin-transform-parameters" "^7.24.7"
- "@babel/plugin-transform-private-methods" "^7.24.7"
- "@babel/plugin-transform-private-property-in-object" "^7.24.7"
- "@babel/plugin-transform-react-display-name" "^7.24.7"
- "@babel/plugin-transform-react-jsx" "^7.25.2"
- "@babel/plugin-transform-react-jsx-self" "^7.24.7"
- "@babel/plugin-transform-react-jsx-source" "^7.24.7"
- "@babel/plugin-transform-regenerator" "^7.24.7"
- "@babel/plugin-transform-runtime" "^7.24.7"
- "@babel/plugin-transform-shorthand-properties" "^7.24.7"
- "@babel/plugin-transform-spread" "^7.24.7"
- "@babel/plugin-transform-sticky-regex" "^7.24.7"
- "@babel/plugin-transform-typescript" "^7.25.2"
- "@babel/plugin-transform-unicode-regex" "^7.24.7"
- "@babel/template" "^7.25.0"
- "@react-native/babel-plugin-codegen" "0.79.2"
- babel-plugin-syntax-hermes-parser "0.25.1"
- babel-plugin-transform-flow-enums "^0.0.2"
- react-refresh "^0.14.0"
-
-"@react-native/codegen@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.79.2.tgz#75270d8162e78c02b0272396a3c6942e39e8703d"
- integrity sha512-8JTlGLuLi1p8Jx2N/enwwEd7/2CfrqJpv90Cp77QLRX3VHF2hdyavRIxAmXMwN95k+Me7CUuPtqn2X3IBXOWYg==
- dependencies:
- glob "^7.1.1"
- hermes-parser "0.25.1"
- invariant "^2.2.4"
- nullthrows "^1.1.1"
- yargs "^17.6.2"
-
-"@react-native/community-cli-plugin@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.2.tgz#d3a0efbdfb554cf3a7e9bfb27865a7caeeeaa1b3"
- integrity sha512-E+YEY2dL+68HyR2iahsZdyBKBUi9QyPyaN9vsnda1jNgCjNpSPk2yAF5cXsho+zKK5ZQna3JSeE1Kbi2IfGJbw==
- dependencies:
- "@react-native/dev-middleware" "0.79.2"
- chalk "^4.0.0"
- debug "^2.2.0"
- invariant "^2.2.4"
- metro "^0.82.0"
- metro-config "^0.82.0"
- metro-core "^0.82.0"
- semver "^7.1.3"
-
-"@react-native/debugger-frontend@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.79.2.tgz#1377de6d9cabe5455bf332e06408167da5f60c19"
- integrity sha512-cGmC7X6kju76DopSBNc+PRAEetbd7TWF9J9o84hOp/xL3ahxR2kuxJy0oJX8Eg8oehhGGEXTuMKHzNa3rDBeSg==
-
-"@react-native/dev-middleware@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.79.2.tgz#f09f1a75b4cd0b56dfd82a07bf41157a9c45619c"
- integrity sha512-9q4CpkklsAs1L0Bw8XYCoqqyBSrfRALGEw4/r0EkR38Y/6fVfNfdsjSns0pTLO6h0VpxswK34L/hm4uK3MoLHw==
- dependencies:
- "@isaacs/ttlcache" "^1.4.1"
- "@react-native/debugger-frontend" "0.79.2"
- chrome-launcher "^0.15.2"
- chromium-edge-launcher "^0.2.0"
- connect "^3.6.5"
- debug "^2.2.0"
- invariant "^2.2.4"
- nullthrows "^1.1.1"
- open "^7.0.3"
- serve-static "^1.16.2"
- ws "^6.2.3"
-
-"@react-native/gradle-plugin@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.79.2.tgz#d41d4e2c63baf688a2b47652c6260f2a2f1ec091"
- integrity sha512-6MJFemrwR0bOT0QM+2BxX9k3/pvZQNmJ3Js5pF/6owsA0cUDiCO57otiEU8Fz+UywWEzn1FoQfOfQ8vt2GYmoA==
-
-"@react-native/js-polyfills@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.79.2.tgz#15eb4da0fe9e8d61d2980d08fd06b5f49e133b0f"
- integrity sha512-IaY87Ckd4GTPMkO1/Fe8fC1IgIx3vc3q9Tyt/6qS3Mtk9nC0x9q4kSR5t+HHq0/MuvGtu8HpdxXGy5wLaM+zUw==
-
-"@react-native/normalize-colors@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.79.2.tgz#9ab70ca257c7411e4ab74cf7f91332c27d39cc6f"
- integrity sha512-+b+GNrupWrWw1okHnEENz63j7NSMqhKeFMOyzYLBwKcprG8fqJQhDIGXfizKdxeIa5NnGSAevKL1Ev1zJ56X8w==
-
-"@react-native/virtualized-lists@0.79.2":
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.79.2.tgz#ed5a419a30b7ddec978b7816ff698a9d85507e15"
- integrity sha512-9G6ROJeP+rdw9Bvr5ruOlag11ET7j1z/En1riFFNo6W3xZvJY+alCuH1ttm12y9+zBm4n8jwCk4lGhjYaV4dKw==
- dependencies:
- invariant "^2.2.4"
- nullthrows "^1.1.1"
-
-"@react-navigation/core@^7.9.1":
- version "7.9.1"
- resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-7.9.1.tgz#885a5133229588469ebfd5fc1e2d1d65cd861c81"
- integrity sha512-HfbsYyfD5EzTicZVv1Zpw3loYguhHSs9Ztq9K3WccyfuV4Y/+XRrMgIv7B5n6ySfQGyviPcdCEl3d1A109FhUQ==
- dependencies:
- "@react-navigation/routers" "^7.3.7"
- escape-string-regexp "^4.0.0"
- nanoid "^3.3.11"
- query-string "^7.1.3"
- react-is "^19.1.0"
- use-latest-callback "^0.2.3"
- use-sync-external-store "^1.5.0"
-
-"@react-navigation/elements@^2.4.1":
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-2.4.1.tgz#c43777d9be06dbf506a9842cd41e3482a49ac5e9"
- integrity sha512-L10zs15NSgx+Msd6UmUfPx8+bEe/KnhcNFKsoPbz0U49sJdU6qogcbNAPi1RUs4UDtfnnubUhbXZxfaYJTCwCA==
- dependencies:
- color "^4.2.3"
-
-"@react-navigation/native@^7.0.14":
- version "7.1.8"
- resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-7.1.8.tgz#402b3da515795e886f5a719426624d7c72d6a413"
- integrity sha512-ryKd/qNigi1pUp6mBb2pq75ese7AZ/Cl3xEmTG6PcUGMfMqAMMrmmVbgiys0h8zCGY2tSBSqnDHbGW1/ZtOoKg==
- dependencies:
- "@react-navigation/core" "^7.9.1"
- escape-string-regexp "^4.0.0"
- fast-deep-equal "^3.1.3"
- nanoid "^3.3.11"
- use-latest-callback "^0.2.3"
-
-"@react-navigation/routers@^7.3.7":
- version "7.3.7"
- resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-7.3.7.tgz#6ca658f2a4ff9cfaf33b678a3a04cc28a2e92481"
- integrity sha512-5ffgrefOs2zWqcCVX+OKn+RDx0puopQtxqetegFrTfWQ6pGXdY/5v4kBpPwaOFrNEeE/LPbHt9IJaJuvyhB7RA==
- dependencies:
- nanoid "^3.3.11"
-
-"@react-navigation/stack@^7.1.1":
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-7.3.1.tgz#9d922c7840950f226c90321e37e4e8b0b0f9d2c9"
- integrity sha512-JXMbqdM7XT8H9hh2wcoCblfusBcG6iM18iRAp3VddMEvu1cBnW3D9DQINy3japQrtClafAcznRWUyy0MYjabKg==
- dependencies:
- "@react-navigation/elements" "^2.4.1"
- color "^4.2.3"
-
-"@sentry-internal/browser-utils@8.55.0":
- version "8.55.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz#d89bae423edd29c39f01285c8e2d59ce9289d9a6"
- integrity sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==
- dependencies:
- "@sentry/core" "8.55.0"
-
-"@sentry-internal/feedback@8.55.0":
- version "8.55.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-8.55.0.tgz#170b8e96a36ce6f71f53daad680f1a0c98381314"
- integrity sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==
- dependencies:
- "@sentry/core" "8.55.0"
-
-"@sentry-internal/replay-canvas@8.55.0":
- version "8.55.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz#e65430207a2f18e4a07c25c669ec758d11282aaf"
- integrity sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==
- dependencies:
- "@sentry-internal/replay" "8.55.0"
- "@sentry/core" "8.55.0"
-
-"@sentry-internal/replay@8.55.0":
- version "8.55.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/replay/-/replay-8.55.0.tgz#4c00b22cdf58cac5b3e537f8d4f675f2b021f475"
- integrity sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==
- dependencies:
- "@sentry-internal/browser-utils" "8.55.0"
- "@sentry/core" "8.55.0"
-
-"@sentry/browser@^8.33.1":
- version "8.55.0"
- resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-8.55.0.tgz#9a489e2a54d29c65e6271b4ee594b43679cab7bd"
- integrity sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==
- dependencies:
- "@sentry-internal/browser-utils" "8.55.0"
- "@sentry-internal/feedback" "8.55.0"
- "@sentry-internal/replay" "8.55.0"
- "@sentry-internal/replay-canvas" "8.55.0"
- "@sentry/core" "8.55.0"
-
-"@sentry/core@8.55.0":
- version "8.55.0"
- resolved "https://registry.yarnpkg.com/@sentry/core/-/core-8.55.0.tgz#4964920229fcf649237ef13b1533dfc4b9f6b22e"
- integrity sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==
-
-"@sinclair/typebox@^0.27.8":
- version "0.27.8"
- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
- integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
-
-"@sinonjs/commons@^3.0.0":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd"
- integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==
- dependencies:
- type-detect "4.0.8"
-
-"@sinonjs/fake-timers@^10.0.2":
- version "10.3.0"
- resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66"
- integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==
- dependencies:
- "@sinonjs/commons" "^3.0.0"
-
-"@types/babel__core@^7.1.14":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
- integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
- dependencies:
- "@babel/parser" "^7.20.7"
- "@babel/types" "^7.20.7"
- "@types/babel__generator" "*"
- "@types/babel__template" "*"
- "@types/babel__traverse" "*"
-
-"@types/babel__generator@*":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9"
- integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==
- dependencies:
- "@babel/types" "^7.0.0"
-
-"@types/babel__template@*":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
- integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
- dependencies:
- "@babel/parser" "^7.1.0"
- "@babel/types" "^7.0.0"
-
-"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2"
- integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==
- dependencies:
- "@babel/types" "^7.20.7"
-
-"@types/events@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.3.tgz#a8ef894305af28d1fc6d2dfdfc98e899591ea529"
- integrity sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==
-
-"@types/graceful-fs@^4.1.3":
- version "4.1.9"
- resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4"
- integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==
- dependencies:
- "@types/node" "*"
-
-"@types/hammerjs@^2.0.36":
- version "2.0.46"
- resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.46.tgz#381daaca1360ff8a7c8dff63f32e69745b9fb1e1"
- integrity sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==
-
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
- integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
-
-"@types/istanbul-lib-report@*":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf"
- integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
- dependencies:
- "@types/istanbul-lib-coverage" "*"
-
-"@types/istanbul-reports@^3.0.0":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54"
- integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==
- dependencies:
- "@types/istanbul-lib-report" "*"
-
-"@types/node@*":
- version "22.15.8"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.8.tgz#d84fc99205d1d550d138abce87c7bcd5a9618f4f"
- integrity sha512-VINDWfc4C3DGAa1J+riYRHjzt+IFj5eRaEl768ze7ZqXcjyN/4WHxPLAWMLTwmODpPvFyzuMTAT6A4RMOHlg5g==
- dependencies:
- undici-types "~6.21.0"
-
-"@types/prop-types@*":
- version "15.7.14"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2"
- integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==
-
-"@types/react-native-background-timer@^2.0.0":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@types/react-native-background-timer/-/react-native-background-timer-2.0.2.tgz#22f9126124068a0ee6a812e16f98e270c2b9b2c7"
- integrity sha512-cMAep0M5yqUHjiiRPvGiviqiJYdI45KSjbI5ufsIFSQGFwHwrHJC/8yawNhy0G3Gix6fufWLsEj6jC5niUNHiQ==
-
-"@types/react-native@0.67.3", "@types/react-native@^0.73.0":
- version "0.73.0"
- resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.73.0.tgz#b316be230745779814caa533360262140b0f5984"
- integrity sha512-6ZRPQrYM72qYKGWidEttRe6M5DZBEV5F+MHMHqd4TTYx0tfkcdrUFGdef6CCxY0jXU7wldvd/zA/b0A/kTeJmA==
- dependencies:
- react-native "*"
-
-"@types/react@17.0.40":
- version "17.0.40"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.40.tgz#dc010cee6254d5239a138083f3799a16638e6bad"
- integrity sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ==
- dependencies:
- "@types/prop-types" "*"
- "@types/scheduler" "*"
- csstype "^3.0.2"
-
-"@types/scheduler@*":
- version "0.26.0"
- resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.26.0.tgz#2b7183b9bbb622d130b23bedf06899b7fec7eed5"
- integrity sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==
-
-"@types/stack-utils@^2.0.0":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
- integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
-
-"@types/yargs-parser@*":
- version "21.0.3"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
- integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
-
-"@types/yargs@^17.0.8":
- version "17.0.33"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d"
- integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==
- dependencies:
- "@types/yargs-parser" "*"
-
-"@urql/core@^5.0.6", "@urql/core@^5.1.1":
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/@urql/core/-/core-5.1.1.tgz#d83c405451806a5936dabbd3f10a22967199e2f5"
- integrity sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==
- dependencies:
- "@0no-co/graphql.web" "^1.0.5"
- wonka "^6.3.2"
-
-"@urql/exchange-retry@^1.3.0":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@urql/exchange-retry/-/exchange-retry-1.3.1.tgz#b2538afd5f568081f6260fada3cb1a50a7af009f"
- integrity sha512-EEmtFu8JTuwsInqMakhLq+U3qN8ZMd5V3pX44q0EqD2imqTDsa8ikZqJ1schVrN8HljOdN+C08cwZ1/r5uIgLw==
- dependencies:
- "@urql/core" "^5.1.1"
- wonka "^6.3.2"
-
-"@xmldom/xmldom@^0.8.8":
- version "0.8.10"
- resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
- integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
-
-abort-controller@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
- integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
- dependencies:
- event-target-shim "^5.0.0"
-
-accepts@^1.3.7, accepts@^1.3.8:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
- integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
- dependencies:
- mime-types "~2.1.34"
- negotiator "0.6.3"
-
-acorn@^8.8.2:
- version "8.14.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb"
- integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
-
-agent-base@^7.1.2:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1"
- integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==
-
-ajv@8.11.0:
- version "8.11.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
- integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
- dependencies:
- fast-deep-equal "^3.1.1"
- json-schema-traverse "^1.0.0"
- require-from-string "^2.0.2"
- uri-js "^4.2.2"
-
-ajv@^8.11.0:
- version "8.17.1"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6"
- integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
- dependencies:
- fast-deep-equal "^3.1.3"
- fast-uri "^3.0.1"
- json-schema-traverse "^1.0.0"
- require-from-string "^2.0.2"
-
-anser@^1.4.9:
- version "1.4.10"
- resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b"
- integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==
-
-ansi-escapes@^4.2.1:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
- integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
- dependencies:
- type-fest "^0.21.3"
-
-ansi-regex@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
- integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
-
-ansi-regex@^5.0.0, ansi-regex@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
- integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-regex@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
- integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-styles@^4.0.0, ansi-styles@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
- dependencies:
- color-convert "^2.0.1"
-
-ansi-styles@^5.0.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
- integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-
-ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
-any-promise@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
- integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
-
-anymatch@^3.0.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
- integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-arg@^5.0.2:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
- integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
-
-argparse@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
- dependencies:
- sprintf-js "~1.0.2"
-
-argparse@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
- integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-
-asap@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
- integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
-
-async-limiter@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
- integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
-
-babel-jest@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5"
- integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==
- dependencies:
- "@jest/transform" "^29.7.0"
- "@types/babel__core" "^7.1.14"
- babel-plugin-istanbul "^6.1.1"
- babel-preset-jest "^29.6.3"
- chalk "^4.0.0"
- graceful-fs "^4.2.9"
- slash "^3.0.0"
-
-babel-plugin-istanbul@^6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
- integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@istanbuljs/load-nyc-config" "^1.0.0"
- "@istanbuljs/schema" "^0.1.2"
- istanbul-lib-instrument "^5.0.4"
- test-exclude "^6.0.0"
-
-babel-plugin-jest-hoist@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626"
- integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==
- dependencies:
- "@babel/template" "^7.3.3"
- "@babel/types" "^7.3.3"
- "@types/babel__core" "^7.1.14"
- "@types/babel__traverse" "^7.0.6"
-
-babel-plugin-polyfill-corejs2@^0.4.10:
- version "0.4.13"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz#7d445f0e0607ebc8fb6b01d7e8fb02069b91dd8b"
- integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==
- dependencies:
- "@babel/compat-data" "^7.22.6"
- "@babel/helper-define-polyfill-provider" "^0.6.4"
- semver "^6.3.1"
-
-babel-plugin-polyfill-corejs3@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6"
- integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==
- dependencies:
- "@babel/helper-define-polyfill-provider" "^0.6.3"
- core-js-compat "^3.40.0"
-
-babel-plugin-polyfill-regenerator@^0.6.1:
- version "0.6.4"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz#428c615d3c177292a22b4f93ed99e358d7906a9b"
- integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==
- dependencies:
- "@babel/helper-define-polyfill-provider" "^0.6.4"
-
-babel-plugin-react-native-web@~0.19.13:
- version "0.19.13"
- resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz#bf919bd6f18c4689dd1a528a82bda507363b953d"
- integrity sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==
-
-babel-plugin-syntax-hermes-parser@0.25.1, babel-plugin-syntax-hermes-parser@^0.25.1:
- version "0.25.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz#58b539df973427fcfbb5176a3aec7e5dee793cb0"
- integrity sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==
- dependencies:
- hermes-parser "0.25.1"
-
-babel-plugin-transform-flow-enums@^0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz#d1d0cc9bdc799c850ca110d0ddc9f21b9ec3ef25"
- integrity sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==
- dependencies:
- "@babel/plugin-syntax-flow" "^7.12.1"
-
-babel-preset-current-node-syntax@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30"
- integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==
- dependencies:
- "@babel/plugin-syntax-async-generators" "^7.8.4"
- "@babel/plugin-syntax-bigint" "^7.8.3"
- "@babel/plugin-syntax-class-properties" "^7.12.13"
- "@babel/plugin-syntax-class-static-block" "^7.14.5"
- "@babel/plugin-syntax-import-attributes" "^7.24.7"
- "@babel/plugin-syntax-import-meta" "^7.10.4"
- "@babel/plugin-syntax-json-strings" "^7.8.3"
- "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
- "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
- "@babel/plugin-syntax-numeric-separator" "^7.10.4"
- "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
- "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
- "@babel/plugin-syntax-optional-chaining" "^7.8.3"
- "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
- "@babel/plugin-syntax-top-level-await" "^7.14.5"
-
-babel-preset-expo@~13.1.11:
- version "13.1.11"
- resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-13.1.11.tgz#de81e6a621c9f40dcb1e0bf5f1fe111f82c10496"
- integrity sha512-jigWjvhRVdm9UTPJ1wjLYJ0OJvD5vLZ8YYkEknEl6+9S1JWORO/y3xtHr/hNj5n34nOilZqdXrmNFcqKc8YTsg==
- dependencies:
- "@babel/helper-module-imports" "^7.25.9"
- "@babel/plugin-proposal-decorators" "^7.12.9"
- "@babel/plugin-proposal-export-default-from" "^7.24.7"
- "@babel/plugin-syntax-export-default-from" "^7.24.7"
- "@babel/plugin-transform-export-namespace-from" "^7.25.9"
- "@babel/plugin-transform-flow-strip-types" "^7.25.2"
- "@babel/plugin-transform-modules-commonjs" "^7.24.8"
- "@babel/plugin-transform-object-rest-spread" "^7.24.7"
- "@babel/plugin-transform-parameters" "^7.24.7"
- "@babel/plugin-transform-private-methods" "^7.24.7"
- "@babel/plugin-transform-private-property-in-object" "^7.24.7"
- "@babel/plugin-transform-runtime" "^7.24.7"
- "@babel/preset-react" "^7.22.15"
- "@babel/preset-typescript" "^7.23.0"
- "@react-native/babel-preset" "0.79.2"
- babel-plugin-react-native-web "~0.19.13"
- babel-plugin-syntax-hermes-parser "^0.25.1"
- babel-plugin-transform-flow-enums "^0.0.2"
- debug "^4.3.4"
- react-refresh "^0.14.2"
- resolve-from "^5.0.0"
-
-babel-preset-jest@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c"
- integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==
- dependencies:
- babel-plugin-jest-hoist "^29.6.3"
- babel-preset-current-node-syntax "^1.0.0"
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-base-64@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/base-64/-/base-64-1.0.0.tgz#09d0f2084e32a3fd08c2475b973788eee6ae8f4a"
- integrity sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==
-
-base64-js@1.5.1, base64-js@^1.2.3, base64-js@^1.3.1, base64-js@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
-better-opn@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817"
- integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==
- dependencies:
- open "^8.0.4"
-
-big-integer@1.6.x:
- version "1.6.52"
- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
- integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
-
-bowser@^2.8.1:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f"
- integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==
-
-bplist-creator@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e"
- integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==
- dependencies:
- stream-buffers "2.2.x"
-
-bplist-parser@0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1"
- integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==
- dependencies:
- big-integer "1.6.x"
-
-bplist-parser@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.2.tgz#3ac79d67ec52c4c107893e0237eb787cbacbced7"
- integrity sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==
- dependencies:
- big-integer "1.6.x"
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
- dependencies:
- balanced-match "^1.0.0"
-
-braces@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
- integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
- dependencies:
- fill-range "^7.1.1"
-
-browserslist@^4.24.0, browserslist@^4.24.4:
- version "4.24.5"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b"
- integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==
- dependencies:
- caniuse-lite "^1.0.30001716"
- electron-to-chromium "^1.5.149"
- node-releases "^2.0.19"
- update-browserslist-db "^1.1.3"
-
-bser@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
- integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
- dependencies:
- node-int64 "^0.4.0"
-
-buffer-from@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
- integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
-buffer@^5.4.3:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
- integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
- dependencies:
- base64-js "^1.3.1"
- ieee754 "^1.1.13"
-
-bytes@3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
- integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
-
-caller-callsite@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
- integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==
- dependencies:
- callsites "^2.0.0"
-
-caller-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
- integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==
- dependencies:
- caller-callsite "^2.0.0"
-
-callsites@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
- integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==
-
-camelcase@^5.3.1:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-camelcase@^6.2.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
- integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-
-caniuse-lite@^1.0.30001716:
- version "1.0.30001717"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz#5d9fec5ce09796a1893013825510678928aca129"
- integrity sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==
-
-chalk@^2.0.1, chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-chownr@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
- integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
-
-chrome-launcher@^0.15.2:
- version "0.15.2"
- resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.15.2.tgz#4e6404e32200095fdce7f6a1e1004f9bd36fa5da"
- integrity sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==
- dependencies:
- "@types/node" "*"
- escape-string-regexp "^4.0.0"
- is-wsl "^2.2.0"
- lighthouse-logger "^1.0.0"
-
-chromium-edge-launcher@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz#0c378f28c99aefc360705fa155de0113997f62fc"
- integrity sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==
- dependencies:
- "@types/node" "*"
- escape-string-regexp "^4.0.0"
- is-wsl "^2.2.0"
- lighthouse-logger "^1.0.0"
- mkdirp "^1.0.4"
- rimraf "^3.0.2"
-
-ci-info@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
- integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
-
-ci-info@^3.2.0, ci-info@^3.3.0:
- version "3.9.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
- integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
-
-cli-cursor@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
- integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==
- dependencies:
- restore-cursor "^2.0.0"
-
-cli-spinners@^2.0.0:
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
- integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
-
-cliui@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
- integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
- dependencies:
- string-width "^4.2.0"
- strip-ansi "^6.0.1"
- wrap-ansi "^7.0.0"
-
-clone-deep@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
- integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
- dependencies:
- is-plain-object "^2.0.4"
- kind-of "^6.0.2"
- shallow-clone "^3.0.0"
-
-clone@^1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
- integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-convert@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
- dependencies:
- color-name "~1.1.4"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
-color-name@^1.0.0, color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-color-string@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
- integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
- dependencies:
- color-name "^1.0.0"
- simple-swizzle "^0.2.2"
-
-color@^4.2.3:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
- integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
- dependencies:
- color-convert "^2.0.1"
- color-string "^1.9.0"
-
-commander@^12.0.0:
- version "12.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
- integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==
-
-commander@^2.20.0:
- version "2.20.3"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
- integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
-commander@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
- integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
-
-commander@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
- integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-
-compressible@~2.0.18:
- version "2.0.18"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
- integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
- dependencies:
- mime-db ">= 1.43.0 < 2"
-
-compression@^1.7.4:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.0.tgz#09420efc96e11a0f44f3a558de59e321364180f7"
- integrity sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==
- dependencies:
- bytes "3.1.2"
- compressible "~2.0.18"
- debug "2.6.9"
- negotiator "~0.6.4"
- on-headers "~1.0.2"
- safe-buffer "5.2.1"
- vary "~1.1.2"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-
-connect@^3.6.5, connect@^3.7.0:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
- integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
- dependencies:
- debug "2.6.9"
- finalhandler "1.1.2"
- parseurl "~1.3.3"
- utils-merge "1.0.1"
-
-convert-source-map@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
- integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
-
-core-js-compat@^3.40.0:
- version "3.42.0"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.42.0.tgz#ce19c29706ee5806e26d3cb3c542d4cfc0ed51bb"
- integrity sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==
- dependencies:
- browserslist "^4.24.4"
-
-cosmiconfig@^5.0.5:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
- integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
- dependencies:
- import-fresh "^2.0.0"
- is-directory "^0.3.1"
- js-yaml "^3.13.1"
- parse-json "^4.0.0"
-
-cross-spawn@^7.0.3, cross-spawn@^7.0.6:
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
- integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
-crypto-random-string@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
- integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
-
-csstype@^3.0.2:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
- integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
-
-debug@2.6.9, debug@^2.2.0, debug@^2.6.9:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
- integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
- dependencies:
- ms "^2.1.3"
-
-debug@^3.1.0:
- version "3.2.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
- integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
- dependencies:
- ms "^2.1.1"
-
-decode-uri-component@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
- integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
-
-deep-extend@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
- integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
-deepmerge@^4.3.1:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
- integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-
-defaults@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
- integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
- dependencies:
- clone "^1.0.2"
-
-define-lazy-prop@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
- integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-
-depd@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
- integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
-
-dequal@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
- integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
-
-destroy@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
- integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
-
-detect-libc@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
- integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
-
-dotenv-expand@~11.0.6:
- version "11.0.7"
- resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08"
- integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==
- dependencies:
- dotenv "^16.4.5"
-
-dotenv@^16.4.5:
- version "16.5.0"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692"
- integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==
-
-dotenv@~16.4.5:
- version "16.4.7"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26"
- integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==
-
-eastasianwidth@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
- integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
-ee-first@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
- integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
-
-electron-to-chromium@^1.5.149:
- version "1.5.150"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz#3120bf34453a7a82cb4d9335df20680b2bb40649"
- integrity sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
-encodeurl@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
- integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-
-encodeurl@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
- integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
-
-env-editor@^0.4.1:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861"
- integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==
-
-error-ex@^1.3.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
- integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
- dependencies:
- is-arrayish "^0.2.1"
-
-error-stack-parser@^2.0.6:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
- integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==
- dependencies:
- stackframe "^1.3.4"
-
-escalade@^3.1.1, escalade@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
- integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
-
-escape-html@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
- integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
-
-escape-string-regexp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
- integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
-
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-esprima@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
- integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-etag@~1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
- integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
-
-event-target-shim@6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-6.0.2.tgz#ea5348c3618ee8b62ff1d344f01908ee2b8a2b71"
- integrity sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==
-
-event-target-shim@^5.0.0, event-target-shim@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
- integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
-
-events@^3.1.0, events@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
- integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-
-exec-async@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/exec-async/-/exec-async-2.2.0.tgz#c7c5ad2eef3478d38390c6dd3acfe8af0efc8301"
- integrity sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==
-
-expo-asset@~11.1.5:
- version "11.1.5"
- resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-11.1.5.tgz#5cad3d781c9d0edec31b9b3adbba574eb4d5dd3e"
- integrity sha512-GEQDCqC25uDBoXHEnXeBuwpeXvI+3fRGvtzwwt0ZKKzWaN+TgeF8H7c76p3Zi4DfBMFDcduM0CmOvJX+yCCLUQ==
- dependencies:
- "@expo/image-utils" "^0.7.4"
- expo-constants "~17.1.5"
-
-expo-build-properties@~0.14.6:
- version "0.14.6"
- resolved "https://registry.yarnpkg.com/expo-build-properties/-/expo-build-properties-0.14.6.tgz#bb1db4b53683c6064bea4e8625c5abaf934f6941"
- integrity sha512-46+gcnFxb2Dz2TFEhFlEJ11qT85THlPtFgkRKQ3a11S3+stgDzDBC2WwbXS5/GMINLIDdBFbbZlajgVND0tMnQ==
- dependencies:
- ajv "^8.11.0"
- semver "^7.6.0"
-
-expo-build-properties@~0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/expo-build-properties/-/expo-build-properties-0.8.3.tgz#fbfa156e9619bebda71c66af9a26ebc3490b2365"
- integrity sha512-kEDDuAadHqJTkvCGK4fXYHVrePiJO1DjyW95AicmwuGwQvGJydYFbuoauf9ybAU+4UH4arhbce8gHI3ZpIj3Jw==
- dependencies:
- ajv "^8.11.0"
- semver "^7.5.3"
-
-expo-constants@~17.1.5:
- version "17.1.5"
- resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-17.1.5.tgz#7c39c0208a8401217cc2bb44c21b9d354dbc6c4f"
- integrity sha512-9kjfQjVG6RgBQjFOo7LewxuZgTnYufXPuqpF00Ju5q2dAFW9Eh1SyJpFxbt7KoN+Wwu0hcIr/nQ0lPQugkg07Q==
- dependencies:
- "@expo/config" "~11.0.7"
- "@expo/env" "~1.0.5"
-
-expo-dev-client@~5.1.8:
- version "5.1.8"
- resolved "https://registry.yarnpkg.com/expo-dev-client/-/expo-dev-client-5.1.8.tgz#53380ec440f26af65b94bcd8e66df3f448ff9bf7"
- integrity sha512-IopYPgBi3JflksO5ieTphbKsbYHy9iIVdT/d69It++y0iBMSm0oBIoDmUijrHKjE3fV6jnrwrm8luU13/mzIQQ==
- dependencies:
- expo-dev-launcher "5.1.11"
- expo-dev-menu "6.1.10"
- expo-dev-menu-interface "1.10.0"
- expo-manifests "~0.16.4"
- expo-updates-interface "~1.1.0"
-
-expo-dev-launcher@5.1.11:
- version "5.1.11"
- resolved "https://registry.yarnpkg.com/expo-dev-launcher/-/expo-dev-launcher-5.1.11.tgz#059e09152f94593e09b8adff853234565604433b"
- integrity sha512-bN0+nv5H038s8Gzf8i16hwCyD3sWDmHp7vb+QbL1i6B3XNnICCKS/H/3VH6H3PRMvCmoLGPlg+ODDqGlf0nu3g==
- dependencies:
- ajv "8.11.0"
- expo-dev-menu "6.1.10"
- expo-manifests "~0.16.4"
- resolve-from "^5.0.0"
-
-expo-dev-menu-interface@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/expo-dev-menu-interface/-/expo-dev-menu-interface-1.10.0.tgz#04671bda3c163d1d7b9438ce7095c3913a3f53f9"
- integrity sha512-NxtM/qot5Rh2cY333iOE87dDg1S8CibW+Wu4WdLua3UMjy81pXYzAGCZGNOeY7k9GpNFqDPNDXWyBSlk9r2pBg==
-
-expo-dev-menu@6.1.10:
- version "6.1.10"
- resolved "https://registry.yarnpkg.com/expo-dev-menu/-/expo-dev-menu-6.1.10.tgz#7970c03748d08cab12222eec0b7da6bc0aa90232"
- integrity sha512-LaI0Bw5zzw5XefjYSX6YaMydzk0YBysjqQoxzj6ufDyKgwAfPmFwOLkZ03DOSerc9naezGLNAGgTEN6QTgMmgQ==
- dependencies:
- expo-dev-menu-interface "1.10.0"
-
-expo-file-system@~18.1.9:
- version "18.1.9"
- resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-18.1.9.tgz#0fa1f6bd491ef820abfb00dd9d5fac9c2dc7c4b0"
- integrity sha512-2i8IpaXpLVSI/dmT6TBfvRkl1+YkbWI07NCsQX1Myh33AF8xaJ4jv3Hz6WK1JArqDagCmrQUB2mW9SYnWYqLHg==
-
-expo-font@~13.3.1:
- version "13.3.1"
- resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-13.3.1.tgz#ed69ae14f263a4c447efb2615b60d9e045372e68"
- integrity sha512-d+xrHYvSM9WB42wj8vP9OOFWyxed5R1evphfDb6zYBmC1dA9Hf89FpT7TNFtj2Bk3clTnpmVqQTCYbbA2P3CLg==
- dependencies:
- fontfaceobserver "^2.1.0"
-
-expo-json-utils@~0.15.0:
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/expo-json-utils/-/expo-json-utils-0.15.0.tgz#6723574814b9e6b0a90e4e23662be76123ab6ae9"
- integrity sha512-duRT6oGl80IDzH2LD2yEFWNwGIC2WkozsB6HF3cDYNoNNdUvFk6uN3YiwsTsqVM/D0z6LEAQ01/SlYvN+Fw0JQ==
-
-expo-keep-awake@~14.1.4:
- version "14.1.4"
- resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-14.1.4.tgz#80197728563e0e17523e5a606fbd6fbed9639503"
- integrity sha512-wU9qOnosy4+U4z/o4h8W9PjPvcFMfZXrlUoKTMBW7F4pLqhkkP/5G4EviPZixv4XWFMjn1ExQ5rV6BX8GwJsWA==
-
-expo-manifests@~0.16.4:
- version "0.16.4"
- resolved "https://registry.yarnpkg.com/expo-manifests/-/expo-manifests-0.16.4.tgz#d1a648bab0068a2712cf49009a5f26377a585849"
- integrity sha512-zB6ohgnsNbJDaLI/KRZQXxEHadhMJt+gA4LCqbiZQNa3P4FJq4JFRXPV6QQjgjJ998g9vY7eDCTduxTJYBqUaA==
- dependencies:
- "@expo/config" "~11.0.6"
- expo-json-utils "~0.15.0"
-
-expo-modules-autolinking@2.1.9:
- version "2.1.9"
- resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-2.1.9.tgz#7bf8338d4b7a1b6e8eccab51634de9b339e90c04"
- integrity sha512-54InfnWy1BR54IDZoawqdFAaF2lyLHe9J+2dZ7y91/36jVpBtAval39ZKt2IISFJZ7TVglsojl4P5BDcDGcvjQ==
- dependencies:
- "@expo/spawn-async" "^1.7.2"
- chalk "^4.1.0"
- commander "^7.2.0"
- find-up "^5.0.0"
- glob "^10.4.2"
- require-from-string "^2.0.2"
- resolve-from "^5.0.0"
-
-expo-modules-core@2.3.12:
- version "2.3.12"
- resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-2.3.12.tgz#1c06402564c02b32f192adfe6946e671d8a95e79"
- integrity sha512-bOm83mskw1S7xuDX50DlLdx68u0doQ6BZHSU2qTv8P1/5QYeAae3pCgFLq2hoptUNeMF7W+68ShJFTOHAe68BQ==
- dependencies:
- invariant "^2.2.4"
-
-expo-splash-screen@~0.30.8:
- version "0.30.8"
- resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.30.8.tgz#2e960ccff053bc8ace85eb56f7d6745e4ddfc6b6"
- integrity sha512-2eh+uA543brfeG5HILXmtNKA7E2/pfywKzNumzy3Ef6OtDjYy6zJUGNSbhnZRbVEjUZo3/QNRs0JRBfY80okZg==
- dependencies:
- "@expo/prebuild-config" "^9.0.5"
-
-expo-status-bar@~2.2.3:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-2.2.3.tgz#09385a866732328e0af3b4588c4f349a15fd7cd0"
- integrity sha512-+c8R3AESBoduunxTJ8353SqKAKpxL6DvcD8VKBuh81zzJyUUbfB4CVjr1GufSJEKsMzNPXZU+HJwXx7Xh7lx8Q==
- dependencies:
- react-native-edge-to-edge "1.6.0"
- react-native-is-edge-to-edge "^1.1.6"
-
-expo-updates-interface@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/expo-updates-interface/-/expo-updates-interface-1.1.0.tgz#62497d4647b381da9fdb68868ed180203ae737ef"
- integrity sha512-DeB+fRe0hUDPZhpJ4X4bFMAItatFBUPjw/TVSbJsaf3Exeami+2qbbJhWkcTMoYHOB73nOIcaYcWXYJnCJXO0w==
-
-expo@^53.0.7:
- version "53.0.7"
- resolved "https://registry.yarnpkg.com/expo/-/expo-53.0.7.tgz#7bdb537a8f87e89228a2a8eb65291005b070657b"
- integrity sha512-ghX529ZG/PnDtSQTzcl3qtt6/i9ktW1Ie8BE5u936MWCiPMwydxzZ/bilM3XlckLqKEsGsqmmpA1eVcWxkm1Ow==
- dependencies:
- "@babel/runtime" "^7.20.0"
- "@expo/cli" "0.24.11"
- "@expo/config" "~11.0.8"
- "@expo/config-plugins" "~10.0.2"
- "@expo/fingerprint" "0.12.4"
- "@expo/metro-config" "0.20.13"
- "@expo/vector-icons" "^14.0.0"
- babel-preset-expo "~13.1.11"
- expo-asset "~11.1.5"
- expo-constants "~17.1.5"
- expo-file-system "~18.1.9"
- expo-font "~13.3.1"
- expo-keep-awake "~14.1.4"
- expo-modules-autolinking "2.1.9"
- expo-modules-core "2.3.12"
- react-native-edge-to-edge "1.6.0"
- whatwg-url-without-unicode "8.0.0-3"
-
-exponential-backoff@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91"
- integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==
-
-fast-base64-decode@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418"
- integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==
-
-fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
- integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-
-fast-json-stable-stringify@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-fast-uri@^3.0.1:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748"
- integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==
-
-fb-watchman@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
- integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
- dependencies:
- bser "2.1.1"
-
-fill-range@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
- integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
- dependencies:
- to-regex-range "^5.0.1"
-
-filter-obj@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
- integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==
-
-finalhandler@1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
- integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
- 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"
-
-find-up@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
- integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
- dependencies:
- locate-path "^5.0.0"
- path-exists "^4.0.0"
-
-find-up@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
- integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
- dependencies:
- locate-path "^6.0.0"
- path-exists "^4.0.0"
-
-flow-enums-runtime@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz#5bb0cd1b0a3e471330f4d109039b7eba5cb3e787"
- integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==
-
-fontfaceobserver@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz#5fb392116e75d5024b7ec8e4f2ce92106d1488c8"
- integrity sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==
-
-foreground-child@^3.1.0:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f"
- integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==
- dependencies:
- cross-spawn "^7.0.6"
- signal-exit "^4.0.1"
-
-freeport-async@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/freeport-async/-/freeport-async-2.0.0.tgz#6adf2ec0c629d11abff92836acd04b399135bab4"
- integrity sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==
-
-fresh@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
- integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-
-fsevents@^2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
- integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-
-function-bind@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
- integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-
-gensync@^1.0.0-beta.2:
- version "1.0.0-beta.2"
- resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
- integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-
-get-caller-file@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-package-type@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
- integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-
-getenv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31"
- integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==
-
-glob@^10.3.10, glob@^10.4.2:
- version "10.4.5"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
- integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^3.1.2"
- minimatch "^9.0.4"
- minipass "^7.1.2"
- package-json-from-dist "^1.0.0"
- path-scurry "^1.11.1"
-
-glob@^7.1.1, glob@^7.1.3, glob@^7.1.4:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
- integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.1.1"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-globals@^11.1.0:
- version "11.12.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
- integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
-graceful-fs@^4.2.4, graceful-fs@^4.2.9:
- version "4.2.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
- integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
-
-has-flag@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
- integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-
-hasown@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
- integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
- dependencies:
- function-bind "^1.1.2"
-
-hermes-estree@0.25.1:
- version "0.25.1"
- resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480"
- integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==
-
-hermes-estree@0.28.1:
- version "0.28.1"
- resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.28.1.tgz#631e6db146b06e62fc1c630939acf4a3c77d1b24"
- integrity sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==
-
-hermes-parser@0.25.1:
- version "0.25.1"
- resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1"
- integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==
- dependencies:
- hermes-estree "0.25.1"
-
-hermes-parser@0.28.1:
- version "0.28.1"
- resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.28.1.tgz#17b9e6377f334b6870a1f6da2e123fdcd0b605ac"
- integrity sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==
- dependencies:
- hermes-estree "0.28.1"
-
-hoist-non-react-statics@^3.3.0:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
- integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
- dependencies:
- react-is "^16.7.0"
-
-hosted-git-info@^7.0.0:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17"
- integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==
- dependencies:
- lru-cache "^10.0.1"
-
-http-errors@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
- integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
- dependencies:
- depd "2.0.0"
- inherits "2.0.4"
- setprototypeof "1.2.0"
- statuses "2.0.1"
- toidentifier "1.0.1"
-
-https-proxy-agent@^7.0.5:
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
- integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
- dependencies:
- agent-base "^7.1.2"
- debug "4"
-
-ieee754@^1.1.13:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
- integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
-image-size@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.2.1.tgz#ee118aedfe666db1a6ee12bed5821cde3740276d"
- integrity sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==
- dependencies:
- queue "6.0.2"
-
-import-fresh@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
- integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==
- dependencies:
- caller-path "^2.0.0"
- resolve-from "^3.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@2.0.4, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ini@~1.3.0:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
- integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-
-invariant@^2.2.4:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
- integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
- dependencies:
- loose-envify "^1.0.0"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
- integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
-
-is-arrayish@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
- integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
-
-is-core-module@^2.16.0:
- version "2.16.1"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
- integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
- dependencies:
- hasown "^2.0.2"
-
-is-directory@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
- integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==
-
-is-docker@^2.0.0, is-docker@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-plain-obj@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
- integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
-
-is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
-is-wsl@^2.1.1, is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
- dependencies:
- is-docker "^2.0.0"
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-
-isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
-
-istanbul-lib-coverage@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
- integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
-
-istanbul-lib-instrument@^5.0.4:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d"
- integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
- dependencies:
- "@babel/core" "^7.12.3"
- "@babel/parser" "^7.14.7"
- "@istanbuljs/schema" "^0.1.2"
- istanbul-lib-coverage "^3.2.0"
- semver "^6.3.0"
-
-jackspeak@^3.1.2:
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a"
- integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
-jest-environment-node@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376"
- integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==
- dependencies:
- "@jest/environment" "^29.7.0"
- "@jest/fake-timers" "^29.7.0"
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- jest-mock "^29.7.0"
- jest-util "^29.7.0"
-
-jest-get-type@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1"
- integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==
-
-jest-haste-map@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104"
- integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==
- dependencies:
- "@jest/types" "^29.6.3"
- "@types/graceful-fs" "^4.1.3"
- "@types/node" "*"
- anymatch "^3.0.3"
- fb-watchman "^2.0.0"
- graceful-fs "^4.2.9"
- jest-regex-util "^29.6.3"
- jest-util "^29.7.0"
- jest-worker "^29.7.0"
- micromatch "^4.0.4"
- walker "^1.0.8"
- optionalDependencies:
- fsevents "^2.3.2"
-
-jest-message-util@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3"
- integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@jest/types" "^29.6.3"
- "@types/stack-utils" "^2.0.0"
- chalk "^4.0.0"
- graceful-fs "^4.2.9"
- micromatch "^4.0.4"
- pretty-format "^29.7.0"
- slash "^3.0.0"
- stack-utils "^2.0.3"
-
-jest-mock@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347"
- integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==
- dependencies:
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- jest-util "^29.7.0"
-
-jest-regex-util@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52"
- integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==
-
-jest-util@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc"
- integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==
- dependencies:
- "@jest/types" "^29.6.3"
- "@types/node" "*"
- chalk "^4.0.0"
- ci-info "^3.2.0"
- graceful-fs "^4.2.9"
- picomatch "^2.2.3"
-
-jest-validate@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c"
- integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==
- dependencies:
- "@jest/types" "^29.6.3"
- camelcase "^6.2.0"
- chalk "^4.0.0"
- jest-get-type "^29.6.3"
- leven "^3.1.0"
- pretty-format "^29.7.0"
-
-jest-worker@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a"
- integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==
- dependencies:
- "@types/node" "*"
- jest-util "^29.7.0"
- merge-stream "^2.0.0"
- supports-color "^8.0.0"
-
-jimp-compact@0.16.1:
- version "0.16.1"
- resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
- integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==
-
-"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-js-yaml@^3.13.1:
- version "3.14.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
- integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-js-yaml@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
- integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
- dependencies:
- argparse "^2.0.1"
-
-jsc-safe-url@^0.2.2, jsc-safe-url@^0.2.4:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz#141c14fbb43791e88d5dc64e85a374575a83477a"
- integrity sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==
-
-jsesc@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
- integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
-
-jsesc@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
- integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
-
-json-parse-better-errors@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json-schema-traverse@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
- integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
-
-json5@^2.2.3:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
- integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
-
-kind-of@^6.0.2:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-kleur@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
- integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-
-lan-network@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/lan-network/-/lan-network-0.1.5.tgz#e781889b7bd4dbedd9126fff3ceddd809a83c3ff"
- integrity sha512-CV3k7l8jW0Z1b+G41tB7JInVyJEKQzh/YPl2v9uXpZMusp0aa+rh3OqG77xWuX7+eVBa8PsdTuMznTAssF4qwg==
-
-leven@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
- integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-
-lighthouse-logger@^1.0.0:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa"
- integrity sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==
- dependencies:
- debug "^2.6.9"
- marky "^1.2.2"
-
-lightningcss-darwin-arm64@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz#565bd610533941cba648a70e105987578d82f996"
- integrity sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==
-
-lightningcss-darwin-x64@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz#c906a267237b1c7fe08bff6c5ac032c099bc9482"
- integrity sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==
-
-lightningcss-freebsd-x64@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz#a7c3c4d6ee18dffeb8fa69f14f8f9267f7dc0c34"
- integrity sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==
-
-lightningcss-linux-arm-gnueabihf@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz#c7c16432a571ec877bf734fe500e4a43d48c2814"
- integrity sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==
-
-lightningcss-linux-arm64-gnu@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz#cfd9e18df1cd65131da286ddacfa3aee6862a752"
- integrity sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==
-
-lightningcss-linux-arm64-musl@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz#6682ff6b9165acef9a6796bd9127a8e1247bb0ed"
- integrity sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==
-
-lightningcss-linux-x64-gnu@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz#714221212ad184ddfe974bbb7dbe9300dfde4bc0"
- integrity sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==
-
-lightningcss-linux-x64-musl@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz#247958daf622a030a6dc2285afa16b7184bdf21e"
- integrity sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==
-
-lightningcss-win32-arm64-msvc@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz#64cfe473c264ef5dc275a4d57a516d77fcac6bc9"
- integrity sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==
-
-lightningcss-win32-x64-msvc@1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz#237d0dc87d9cdc9cf82536bcbc07426fa9f3f422"
- integrity sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==
-
-lightningcss@~1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.27.0.tgz#d4608e63044343836dd9769f6c8b5d607867649a"
- integrity sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==
- dependencies:
- detect-libc "^1.0.3"
- optionalDependencies:
- lightningcss-darwin-arm64 "1.27.0"
- lightningcss-darwin-x64 "1.27.0"
- lightningcss-freebsd-x64 "1.27.0"
- lightningcss-linux-arm-gnueabihf "1.27.0"
- lightningcss-linux-arm64-gnu "1.27.0"
- lightningcss-linux-arm64-musl "1.27.0"
- lightningcss-linux-x64-gnu "1.27.0"
- lightningcss-linux-x64-musl "1.27.0"
- lightningcss-win32-arm64-msvc "1.27.0"
- lightningcss-win32-x64-msvc "1.27.0"
-
-lines-and-columns@^1.1.6:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
- integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-
-locate-path@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
- integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
- dependencies:
- p-locate "^4.1.0"
-
-locate-path@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
- integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
- dependencies:
- p-locate "^5.0.0"
-
-lodash.debounce@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
- integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
-
-lodash.throttle@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
- integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
-
-log-symbols@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
- integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
- dependencies:
- chalk "^2.0.1"
-
-loose-envify@^1.0.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
- integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
- dependencies:
- js-tokens "^3.0.0 || ^4.0.0"
-
-lru-cache@^10.0.1, lru-cache@^10.2.0:
- version "10.4.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
- integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
-
-lru-cache@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
- integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
- dependencies:
- yallist "^3.0.2"
-
-makeerror@1.0.12:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
- integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
- dependencies:
- tmpl "1.0.5"
-
-marky@^1.2.2:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/marky/-/marky-1.3.0.tgz#422b63b0baf65022f02eda61a238eccdbbc14997"
- integrity sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==
-
-memoize-one@^5.0.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
- integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
-
-merge-options@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7"
- integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==
- dependencies:
- is-plain-obj "^2.1.0"
-
-merge-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-metro-babel-transformer@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.82.2.tgz#acb89a300a070b685cadbfdc3aa3f809b52de9fc"
- integrity sha512-c2gesA7/B4dovPmmYC2HziNXb4XFG3YkQ9FjEzwRnR6KH2hT7nJn6mkcri1h85r3sMttpnmoBuZ8WDz980Zhlw==
- dependencies:
- "@babel/core" "^7.25.2"
- flow-enums-runtime "^0.0.6"
- hermes-parser "0.28.1"
- nullthrows "^1.1.1"
-
-metro-cache-key@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.82.2.tgz#d1b73cd4849e9ed3984aeb2386e5b198f8f59fad"
- integrity sha512-lfjC9zzSri+rS7lkoCh04LniFga8JQVUqSuscD9KraIm9zRzwIwvaMx8V6Oogiezs+FAJUOSnVNhHcHc9l8H2Q==
- dependencies:
- flow-enums-runtime "^0.0.6"
-
-metro-cache@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.82.2.tgz#2d5427164a8bf9f15c6fb96484666cd1187eda6b"
- integrity sha512-MxY4xvPKuE68NYpKJjH8YvVVugDL2QcuTracHsV5/30ZIaRr0v1QuAX5vt45OCQDQQWeh1rDv3E4JB6AbIvnZQ==
- dependencies:
- exponential-backoff "^3.1.1"
- flow-enums-runtime "^0.0.6"
- https-proxy-agent "^7.0.5"
- metro-core "0.82.2"
-
-metro-config@0.82.2, metro-config@^0.82.0:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.82.2.tgz#0766d13f9707d60367a824f506fdd5144f7cb53b"
- integrity sha512-0dG3qCFLoE3ddNexAxSLJ7FbGjEbwUjDNOgYeCLoPSkKB01k5itvvr2HFfl2HisOCfLcpjpVzF5NtB/O71lxfA==
- dependencies:
- connect "^3.6.5"
- cosmiconfig "^5.0.5"
- flow-enums-runtime "^0.0.6"
- jest-validate "^29.7.0"
- metro "0.82.2"
- metro-cache "0.82.2"
- metro-core "0.82.2"
- metro-runtime "0.82.2"
-
-metro-core@0.82.2, metro-core@^0.82.0:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.82.2.tgz#8c95128a247848f750835c184c29ca23905892ab"
- integrity sha512-d2XMkWbRh6PdPV1OZ8OyUyDWrtEbQ1m5ASpKtemLPbujfoE4RlwFZdl4ljfBNVVZ1s0z7tgsSFwKMyTeXgjtSg==
- dependencies:
- flow-enums-runtime "^0.0.6"
- lodash.throttle "^4.1.1"
- metro-resolver "0.82.2"
-
-metro-file-map@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.82.2.tgz#acb98d73701373e12f1294f1998b983749e4c7cb"
- integrity sha512-pax0WA80eRH096YO0kwox+ZD5im3V0Vswr2x1YqdMcZVWlr6uwXgQdo9q+mpcvJ1k77J+hmY5HIg71bqrUptVg==
- dependencies:
- debug "^4.4.0"
- fb-watchman "^2.0.0"
- flow-enums-runtime "^0.0.6"
- graceful-fs "^4.2.4"
- invariant "^2.2.4"
- jest-worker "^29.7.0"
- micromatch "^4.0.4"
- nullthrows "^1.1.1"
- walker "^1.0.7"
-
-metro-minify-terser@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.82.2.tgz#9afd1d486357065edfd01b5e9a9f1e18a93018e9"
- integrity sha512-+nveaEdQUvsoi0OSr4Cp+btevZsg2DKsu8kUJsvyLIcRRFPUw9CwzF3V2cA5b55DY5LcIJyAcZf4D9ARKfoilQ==
- dependencies:
- flow-enums-runtime "^0.0.6"
- terser "^5.15.0"
-
-metro-resolver@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.82.2.tgz#994ebdbf23970fc460c50e47d39bf74db3b87e57"
- integrity sha512-Who2hGzq2aCGSsBaQBU0L3SADiy/kj/gv0coujNWziRY4SKq7ECKzWqtVk1JlEF7IGXDDRDxEgFuLmPV6mZGVQ==
- dependencies:
- flow-enums-runtime "^0.0.6"
-
-metro-runtime@0.82.2, metro-runtime@^0.82.0:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.82.2.tgz#4a86e48cdb124dd5f53fa42befadfd0838c58fdb"
- integrity sha512-gEcb2AfDs3GRs2SFjtEmG0k61B/cZEVCbh6cSmkjJpyHr+VRjw77MnDpX9AUcJYa4bCT63E7IEySOMM0Z8p87g==
- dependencies:
- "@babel/runtime" "^7.25.0"
- flow-enums-runtime "^0.0.6"
-
-metro-source-map@0.82.2, metro-source-map@^0.82.0:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.82.2.tgz#19c1cb06e462a9f19ff76dfc3827c2561cbebf63"
- integrity sha512-S26xPdz1/EeAY0HqaPXfny8CeiY0Dvl4sBLQiXGXhoES4gUDAuMhA1tioKrv5F+x68Sod8cp8Js6EGqbMXeqMA==
- dependencies:
- "@babel/traverse" "^7.25.3"
- "@babel/traverse--for-generate-function-map" "npm:@babel/traverse@^7.25.3"
- "@babel/types" "^7.25.2"
- flow-enums-runtime "^0.0.6"
- invariant "^2.2.4"
- metro-symbolicate "0.82.2"
- nullthrows "^1.1.1"
- ob1 "0.82.2"
- source-map "^0.5.6"
- vlq "^1.0.0"
-
-metro-symbolicate@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.82.2.tgz#1e16d60fb9b96e7067527cfb2257f2b46406a4f6"
- integrity sha512-iheanMnOMned6gjt6sKSfU5AoNyV6pJyQAWydwuHcjhGpa/kiAM0kKmw23qHejELK89Yw8HDZ3Fd/5l1jxpFVA==
- dependencies:
- flow-enums-runtime "^0.0.6"
- invariant "^2.2.4"
- metro-source-map "0.82.2"
- nullthrows "^1.1.1"
- source-map "^0.5.6"
- vlq "^1.0.0"
-
-metro-transform-plugins@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.82.2.tgz#2948a012ef40b36ad272fc986920fd7e9b552be4"
- integrity sha512-kEveuEVxghTEXkDiyY0MT5QRqei092KJG46nduo0VghFgI6QFodbAjFit1ULyWsn2VOTGSUDJ3VgHBMy7MaccA==
- dependencies:
- "@babel/core" "^7.25.2"
- "@babel/generator" "^7.25.0"
- "@babel/template" "^7.25.0"
- "@babel/traverse" "^7.25.3"
- flow-enums-runtime "^0.0.6"
- nullthrows "^1.1.1"
-
-metro-transform-worker@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.82.2.tgz#4eb09c95c2d9cda1cf0e8e201bd899c0da5b0a0c"
- integrity sha512-MJQNz6cGjqewCRqFmPrsHu6Oe93v2B6zgHkrNxQ6XdPMJz5VHD33m8q+8UsNJOH8wUMoRu5JmYtuUTIVIFxh2A==
- dependencies:
- "@babel/core" "^7.25.2"
- "@babel/generator" "^7.25.0"
- "@babel/parser" "^7.25.3"
- "@babel/types" "^7.25.2"
- flow-enums-runtime "^0.0.6"
- metro "0.82.2"
- metro-babel-transformer "0.82.2"
- metro-cache "0.82.2"
- metro-cache-key "0.82.2"
- metro-minify-terser "0.82.2"
- metro-source-map "0.82.2"
- metro-transform-plugins "0.82.2"
- nullthrows "^1.1.1"
-
-metro@0.82.2, metro@^0.82.0:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/metro/-/metro-0.82.2.tgz#3fdf2eb2558d930ba9f156967e861dee8b026081"
- integrity sha512-hOBd4O4Cn/tLf3jz7IjSgD/A66MqMzgZuyF1I/pmNwYcY3q3j2vbh7Fa09KIbvUq5Yz7BewU356XboaEtEXPgA==
- dependencies:
- "@babel/code-frame" "^7.24.7"
- "@babel/core" "^7.25.2"
- "@babel/generator" "^7.25.0"
- "@babel/parser" "^7.25.3"
- "@babel/template" "^7.25.0"
- "@babel/traverse" "^7.25.3"
- "@babel/types" "^7.25.2"
- accepts "^1.3.7"
- chalk "^4.0.0"
- ci-info "^2.0.0"
- connect "^3.6.5"
- debug "^4.4.0"
- error-stack-parser "^2.0.6"
- flow-enums-runtime "^0.0.6"
- graceful-fs "^4.2.4"
- hermes-parser "0.28.1"
- image-size "^1.0.2"
- invariant "^2.2.4"
- jest-worker "^29.7.0"
- jsc-safe-url "^0.2.2"
- lodash.throttle "^4.1.1"
- metro-babel-transformer "0.82.2"
- metro-cache "0.82.2"
- metro-cache-key "0.82.2"
- metro-config "0.82.2"
- metro-core "0.82.2"
- metro-file-map "0.82.2"
- metro-resolver "0.82.2"
- metro-runtime "0.82.2"
- metro-source-map "0.82.2"
- metro-symbolicate "0.82.2"
- metro-transform-plugins "0.82.2"
- metro-transform-worker "0.82.2"
- mime-types "^2.1.27"
- nullthrows "^1.1.1"
- serialize-error "^2.1.0"
- source-map "^0.5.6"
- throat "^5.0.0"
- ws "^7.5.10"
- yargs "^17.6.2"
-
-micromatch@^4.0.4:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
- integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
- dependencies:
- braces "^3.0.3"
- picomatch "^2.3.1"
-
-mime-db@1.52.0:
- version "1.52.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
- integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-
-"mime-db@>= 1.43.0 < 2":
- version "1.54.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
- integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
-
-mime-types@^2.1.27, mime-types@~2.1.34:
- version "2.1.35"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
- integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
- dependencies:
- mime-db "1.52.0"
-
-mime@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mimic-fn@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
- integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-
-minimatch@^3.0.4, minimatch@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimatch@^9.0.0, minimatch@^9.0.4:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
- integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
- dependencies:
- brace-expansion "^2.0.1"
-
-minimist@^1.2.0:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
- integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
- integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-
-minizlib@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.2.tgz#f33d638eb279f664439aa38dc5f91607468cb574"
- integrity sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==
- dependencies:
- minipass "^7.1.2"
-
-mkdirp@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-mkdirp@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50"
- integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-
-ms@2.1.3, ms@^2.1.1, ms@^2.1.3:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-mz@^2.7.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
- integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
- dependencies:
- any-promise "^1.0.0"
- object-assign "^4.0.1"
- thenify-all "^1.0.0"
-
-nanoid@^3.3.11, nanoid@^3.3.7:
- version "3.3.11"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
- integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
-
-negotiator@0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
- integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
-
-negotiator@~0.6.4:
- version "0.6.4"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
- integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
-
-nested-error-stacks@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b"
- integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==
-
-node-forge@^1.2.1, node-forge@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
- integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
-
-node-int64@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
- integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
-
-node-releases@^2.0.19:
- version "2.0.19"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
- integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
-
-normalize-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-npm-package-arg@^11.0.0:
- version "11.0.3"
- resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d"
- integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==
- dependencies:
- hosted-git-info "^7.0.0"
- proc-log "^4.0.0"
- semver "^7.3.5"
- validate-npm-package-name "^5.0.0"
-
-nullthrows@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
- integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
-
-ob1@0.82.2:
- version "0.82.2"
- resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.82.2.tgz#ca2478f9cd904a4a91381fbfa729996c40ed567b"
- integrity sha512-sfUaYpjkAdHgu8cXLAyWXO98jW1EUOStTDNslfC9eb3tBLExe67PRqh09J0xdD6AlFKHFGTvXPbuHGvlrZNJNA==
- dependencies:
- flow-enums-runtime "^0.0.6"
-
-object-assign@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-
-on-finished@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
- integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
- dependencies:
- ee-first "1.1.1"
-
-on-finished@~2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
- integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
- dependencies:
- ee-first "1.1.1"
-
-on-headers@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
- integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
-
-once@^1.3.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
-onetime@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
- integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==
- dependencies:
- mimic-fn "^1.0.0"
-
-open@^7.0.3:
- version "7.4.2"
- resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
- integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==
- dependencies:
- is-docker "^2.0.0"
- is-wsl "^2.1.1"
-
-open@^8.0.4:
- version "8.4.2"
- resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
- integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
- dependencies:
- define-lazy-prop "^2.0.0"
- is-docker "^2.1.1"
- is-wsl "^2.2.0"
-
-ora@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
- integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==
- dependencies:
- chalk "^2.4.2"
- cli-cursor "^2.1.0"
- cli-spinners "^2.0.0"
- log-symbols "^2.2.0"
- strip-ansi "^5.2.0"
- wcwidth "^1.0.1"
-
-p-limit@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
-
-p-limit@^3.0.2, p-limit@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
- integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
- dependencies:
- yocto-queue "^0.1.0"
-
-p-locate@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
- integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
- dependencies:
- p-limit "^2.2.0"
-
-p-locate@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
- integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
- dependencies:
- p-limit "^3.0.2"
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-package-json-from-dist@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
- integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
-
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
- integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
-parse-png@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338"
- integrity sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==
- dependencies:
- pngjs "^3.3.0"
-
-parseurl@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
- integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-path-exists@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
- integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-
-path-key@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-parse@^1.0.5, path-parse@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
- integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-path-scurry@^1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
- integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
- dependencies:
- lru-cache "^10.2.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
-picocolors@^1.0.0, picocolors@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
- integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
-
-picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
- integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-
-picomatch@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-3.0.1.tgz#817033161def55ec9638567a2f3bbc876b3e7516"
- integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==
-
-pirates@^4.0.1, pirates@^4.0.4:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22"
- integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==
-
-plist@^3.0.5:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
- integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==
- dependencies:
- "@xmldom/xmldom" "^0.8.8"
- base64-js "^1.5.1"
- xmlbuilder "^15.1.1"
-
-pngjs@^3.3.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
- integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
-
-postcss@~8.4.32:
- version "8.4.49"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19"
- integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==
- dependencies:
- nanoid "^3.3.7"
- picocolors "^1.1.1"
- source-map-js "^1.2.1"
-
-pretty-bytes@^5.6.0:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
- integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
-
-pretty-format@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
- integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
- dependencies:
- "@jest/schemas" "^29.6.3"
- ansi-styles "^5.0.0"
- react-is "^18.0.0"
-
-proc-log@^4.0.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034"
- integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==
-
-progress@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
- integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
-promise@^8.3.0:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a"
- integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==
- dependencies:
- asap "~2.0.6"
-
-prompts@^2.3.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
- integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
- dependencies:
- kleur "^3.0.3"
- sisteransi "^1.0.5"
-
-punycode@^2.1.0, punycode@^2.1.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
- integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
-
-qrcode-terminal@0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e"
- integrity sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==
-
-query-string@^7.1.3:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328"
- integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==
- dependencies:
- decode-uri-component "^0.2.2"
- filter-obj "^1.1.0"
- split-on-first "^1.0.0"
- strict-uri-encode "^2.0.0"
-
-queue@6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
- integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
- dependencies:
- inherits "~2.0.3"
-
-range-parser@~1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
- integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-
-rc@~1.2.7:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
- dependencies:
- deep-extend "^0.6.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-react-devtools-core@^6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-6.1.1.tgz#7dac74773d039273134c360f8b65cf4f6c795c49"
- integrity sha512-TFo1MEnkqE6hzAbaztnyR5uLTMoz6wnEWwWBsCUzNt+sVXJycuRJdDqvL078M4/h65BI/YO5XWTaxZDWVsW0fw==
- dependencies:
- shell-quote "^1.6.1"
- ws "^7"
-
-react-freeze@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/react-freeze/-/react-freeze-1.0.4.tgz#cbbea2762b0368b05cbe407ddc9d518c57c6f3ad"
- integrity sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==
-
-react-is@^16.7.0:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
- integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-react-is@^18.0.0:
- version "18.3.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
- integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
-
-react-is@^19.1.0:
- version "19.1.0"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.0.tgz#805bce321546b7e14c084989c77022351bbdd11b"
- integrity sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==
-
-react-native-background-timer@^2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/react-native-background-timer/-/react-native-background-timer-2.4.1.tgz#a3bc1cafa8c1e3aeefd0611de120298b67978a0f"
- integrity sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g==
-
-react-native-edge-to-edge@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/react-native-edge-to-edge/-/react-native-edge-to-edge-1.6.0.tgz#2ba63b941704a7f713e298185c26cde4d9e4b973"
- integrity sha512-2WCNdE3Qd6Fwg9+4BpbATUxCLcouF6YRY7K+J36KJ4l3y+tWN6XCqAC4DuoGblAAbb2sLkhEDp4FOlbOIot2Og==
-
-react-native-gesture-handler@^2.25.0:
- version "2.25.0"
- resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.25.0.tgz#3a5a8912ea4f5e68ab211a9fa5a191c08ad50883"
- integrity sha512-NPjJi6mislXxvjxQPU9IYwBjb1Uejp8GvAbE1Lhh+xMIMEvmgAvVIp5cz1P+xAbV6uYcRRArm278+tEInGOqWg==
- dependencies:
- "@egjs/hammerjs" "^2.0.17"
- hoist-non-react-statics "^3.3.0"
- invariant "^2.2.4"
-
-react-native-get-random-values@^1.11.0:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz#1ca70d1271f4b08af92958803b89dccbda78728d"
- integrity sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==
- dependencies:
- fast-base64-decode "^1.0.0"
-
-react-native-is-edge-to-edge@^1.1.6:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.1.7.tgz#28947688f9fafd584e73a4f935ea9603bd9b1939"
- integrity sha512-EH6i7E8epJGIcu7KpfXYXiV2JFIYITtq+rVS8uEb+92naMRBdxhTuS8Wn2Q7j9sqyO0B+Xbaaf9VdipIAmGW4w==
-
-react-native-safe-area-context@^5.4.0:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-5.4.0.tgz#04b51940408c114f75628a12a93569d30c525454"
- integrity sha512-JaEThVyJcLhA+vU0NU8bZ0a1ih6GiF4faZ+ArZLqpYbL6j7R3caRqj+mE3lEtKCuHgwjLg3bCxLL1GPUJZVqUA==
-
-react-native-screens@^4.10.0:
- version "4.10.0"
- resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-4.10.0.tgz#40634aead590c6b7034ded6a9f92465d1d611906"
- integrity sha512-Tw21NGuXm3PbiUGtZd0AnXirUixaAbPXDjNR0baBH7/WJDaDTTELLcQ7QRXuqAWbmr/EVCrKj1348ei1KFIr8A==
- dependencies:
- react-freeze "^1.0.0"
- warn-once "^0.1.0"
-
-react-native-toast-message@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/react-native-toast-message/-/react-native-toast-message-2.3.0.tgz#c25fb40d7af4388f6a798efbfca479d53916ed00"
- integrity sha512-d7LldTK1ei1Bl7RFhoOYw8hVQ4oKPQHORYI//xR9Pyz3HxSlFlvQbueE5X3KLoemRRgBrOUg3zY6DxXnxrVLRg==
-
-react-native-url-polyfill@^1.1.2:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz#c1763de0f2a8c22cc3e959b654c8790622b6ef6a"
- integrity sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==
- dependencies:
- whatwg-url-without-unicode "8.0.0-3"
-
-react-native@*, react-native@0.79.2:
- version "0.79.2"
- resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.2.tgz#f1a53099701c1736d09e441eb79f97cfc90dd202"
- integrity sha512-AnGzb56JvU5YCL7cAwg10+ewDquzvmgrMddiBM0GAWLwQM/6DJfGd2ZKrMuKKehHerpDDZgG+EY64gk3x3dEkw==
- dependencies:
- "@jest/create-cache-key-function" "^29.7.0"
- "@react-native/assets-registry" "0.79.2"
- "@react-native/codegen" "0.79.2"
- "@react-native/community-cli-plugin" "0.79.2"
- "@react-native/gradle-plugin" "0.79.2"
- "@react-native/js-polyfills" "0.79.2"
- "@react-native/normalize-colors" "0.79.2"
- "@react-native/virtualized-lists" "0.79.2"
- abort-controller "^3.0.0"
- anser "^1.4.9"
- ansi-regex "^5.0.0"
- babel-jest "^29.7.0"
- babel-plugin-syntax-hermes-parser "0.25.1"
- base64-js "^1.5.1"
- chalk "^4.0.0"
- commander "^12.0.0"
- event-target-shim "^5.0.1"
- flow-enums-runtime "^0.0.6"
- glob "^7.1.1"
- invariant "^2.2.4"
- jest-environment-node "^29.7.0"
- memoize-one "^5.0.0"
- metro-runtime "^0.82.0"
- metro-source-map "^0.82.0"
- nullthrows "^1.1.1"
- pretty-format "^29.7.0"
- promise "^8.3.0"
- react-devtools-core "^6.1.1"
- react-refresh "^0.14.0"
- regenerator-runtime "^0.13.2"
- scheduler "0.25.0"
- semver "^7.1.3"
- stacktrace-parser "^0.1.10"
- whatwg-fetch "^3.0.0"
- ws "^6.2.3"
- yargs "^17.6.2"
-
-react-refresh@^0.14.0, react-refresh@^0.14.2:
- version "0.14.2"
- resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
- integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
-
-react@19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd"
- integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==
-
-regenerate-unicode-properties@^10.2.0:
- version "10.2.0"
- resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0"
- integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==
- dependencies:
- regenerate "^1.4.2"
-
-regenerate@^1.4.2:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
- integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
-
-regenerator-runtime@^0.13.2:
- version "0.13.11"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
- integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
-
-regexpu-core@^6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826"
- integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==
- dependencies:
- regenerate "^1.4.2"
- regenerate-unicode-properties "^10.2.0"
- regjsgen "^0.8.0"
- regjsparser "^0.12.0"
- unicode-match-property-ecmascript "^2.0.0"
- unicode-match-property-value-ecmascript "^2.1.0"
-
-regjsgen@^0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab"
- integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==
-
-regjsparser@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc"
- integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==
- dependencies:
- jsesc "~3.0.2"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
-
-require-from-string@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
- integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
-
-requireg@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/requireg/-/requireg-0.2.2.tgz#437e77a5316a54c9bcdbbf5d1f755fe093089830"
- integrity sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==
- dependencies:
- nested-error-stacks "~2.0.1"
- rc "~1.2.7"
- resolve "~1.7.1"
-
-resolve-from@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
- integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==
-
-resolve-from@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
- integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-
-resolve-workspace-root@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz#a0098daa0067cd0efa6eb525c57c8fb4a61e78f8"
- integrity sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==
-
-resolve.exports@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f"
- integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==
-
-resolve@^1.14.2, resolve@^1.22.2:
- version "1.22.10"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
- integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
- dependencies:
- is-core-module "^2.16.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
-resolve@~1.7.1:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3"
- integrity sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==
- dependencies:
- path-parse "^1.0.5"
-
-restore-cursor@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
- integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==
- dependencies:
- onetime "^2.0.0"
- signal-exit "^3.0.2"
-
-rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
-rxjs@^7.5.2:
- version "7.8.2"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b"
- integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==
- dependencies:
- tslib "^2.1.0"
-
-safe-buffer@5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-sax@>=0.6.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
- integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
-
-scheduler@0.25.0:
- version "0.25.0"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015"
- integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==
-
-semver@^6.3.0, semver@^6.3.1:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-semver@^7.1.3, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
- version "7.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
- integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
-
-send@0.19.0:
- version "0.19.0"
- resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
- integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==
- dependencies:
- debug "2.6.9"
- depd "2.0.0"
- destroy "1.2.0"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "2.0.0"
- mime "1.6.0"
- ms "2.1.3"
- on-finished "2.4.1"
- range-parser "~1.2.1"
- statuses "2.0.1"
-
-send@^0.19.0:
- version "0.19.1"
- resolved "https://registry.yarnpkg.com/send/-/send-0.19.1.tgz#1c2563b2ee4fe510b806b21ec46f355005a369f9"
- integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==
- dependencies:
- debug "2.6.9"
- depd "2.0.0"
- destroy "1.2.0"
- encodeurl "~2.0.0"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "2.0.0"
- mime "1.6.0"
- ms "2.1.3"
- on-finished "2.4.1"
- range-parser "~1.2.1"
- statuses "2.0.1"
-
-serialize-error@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
- integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==
-
-serve-static@^1.16.2:
- version "1.16.2"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296"
- integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==
- dependencies:
- encodeurl "~2.0.0"
- escape-html "~1.0.3"
- parseurl "~1.3.3"
- send "0.19.0"
-
-setprototypeof@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
- integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
-
-shallow-clone@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
- integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
- dependencies:
- kind-of "^6.0.2"
-
-shebang-command@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
- dependencies:
- shebang-regex "^3.0.0"
-
-shebang-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-shell-quote@^1.6.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a"
- integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==
-
-signal-exit@^3.0.2, signal-exit@^3.0.7:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
- integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
-simple-plist@^1.1.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017"
- integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==
- dependencies:
- bplist-creator "0.1.0"
- bplist-parser "0.3.1"
- plist "^3.0.5"
-
-simple-swizzle@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
- integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
- dependencies:
- is-arrayish "^0.3.1"
-
-sisteransi@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
- integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
-
-slash@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
- integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
-slugify@^1.3.4, slugify@^1.6.6:
- version "1.6.6"
- resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b"
- integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==
-
-source-map-js@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
- integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
-
-source-map-support@~0.5.20, source-map-support@~0.5.21:
- version "0.5.21"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
- integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map@^0.5.6:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
-
-source-map@^0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-split-on-first@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
- integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
- integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-
-stack-utils@^2.0.3:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
- integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
- dependencies:
- escape-string-regexp "^2.0.0"
-
-stackframe@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
- integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
-
-stacktrace-parser@^0.1.10:
- version "0.1.11"
- resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz#c7c08f9b29ef566b9a6f7b255d7db572f66fabc4"
- integrity sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==
- dependencies:
- type-fest "^0.7.1"
-
-statuses@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
- integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
-
-statuses@~1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
- integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
-
-stream-buffers@2.2.x:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
- integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==
-
-strict-uri-encode@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
- integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
-
-"string-width-cjs@npm:string-width@^4.2.0":
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^5.0.1, string-width@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
- integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
- dependencies:
- eastasianwidth "^0.2.0"
- emoji-regex "^9.2.2"
- strip-ansi "^7.0.1"
-
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
- dependencies:
- ansi-regex "^4.1.0"
-
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^7.0.1:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
- dependencies:
- ansi-regex "^6.0.1"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
- integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
-
-structured-headers@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/structured-headers/-/structured-headers-0.4.1.tgz#77abd9410622c6926261c09b9d16cf10592694d1"
- integrity sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==
-
-sucrase@3.35.0:
- version "3.35.0"
- resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
- integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
- dependencies:
- "@jridgewell/gen-mapping" "^0.3.2"
- commander "^4.0.0"
- glob "^10.3.10"
- lines-and-columns "^1.1.6"
- mz "^2.7.0"
- pirates "^4.0.1"
- ts-interface-checker "^0.1.9"
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^7.0.0, supports-color@^7.1.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
- integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
- dependencies:
- has-flag "^4.0.0"
-
-supports-color@^8.0.0:
- version "8.1.1"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
- integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
- dependencies:
- has-flag "^4.0.0"
-
-supports-hyperlinks@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
- integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
- dependencies:
- has-flag "^4.0.0"
- supports-color "^7.0.0"
-
-supports-preserve-symlinks-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
- integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-
-tar@^7.4.3:
- version "7.4.3"
- resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571"
- integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==
- dependencies:
- "@isaacs/fs-minipass" "^4.0.0"
- chownr "^3.0.0"
- minipass "^7.1.2"
- minizlib "^3.0.1"
- mkdirp "^3.0.1"
- yallist "^5.0.0"
-
-temp-dir@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
- integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==
-
-terminal-link@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
- integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
- dependencies:
- ansi-escapes "^4.2.1"
- supports-hyperlinks "^2.0.0"
-
-terser@^5.15.0:
- version "5.39.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.39.0.tgz#0e82033ed57b3ddf1f96708d123cca717d86ca3a"
- integrity sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==
- dependencies:
- "@jridgewell/source-map" "^0.3.3"
- acorn "^8.8.2"
- commander "^2.20.0"
- source-map-support "~0.5.20"
-
-test-exclude@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
- integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
- dependencies:
- "@istanbuljs/schema" "^0.1.2"
- glob "^7.1.4"
- minimatch "^3.0.4"
-
-thenify-all@^1.0.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
- integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
- dependencies:
- thenify ">= 3.1.0 < 4"
-
-"thenify@>= 3.1.0 < 4":
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
- integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
- dependencies:
- any-promise "^1.0.0"
-
-throat@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
- integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
-
-tmpl@1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
- integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-toidentifier@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
- integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
-
-ts-interface-checker@^0.1.9:
- version "0.1.13"
- resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
- integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
-
-tslib@^2.1.0:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
- integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-
-type-detect@4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
- integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-
-type-fest@^0.21.3:
- version "0.21.3"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
- integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
-
-type-fest@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
- integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
-
-typed-emitter@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/typed-emitter/-/typed-emitter-2.1.0.tgz#ca78e3d8ef1476f228f548d62e04e3d4d3fd77fb"
- integrity sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==
- optionalDependencies:
- rxjs "^7.5.2"
-
-typescript@~5.8.3:
- version "5.8.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e"
- integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==
-
-undici-types@~6.21.0:
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
- integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
-
-undici@^6.18.2:
- version "6.21.2"
- resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.2.tgz#49c5884e8f9039c65a89ee9018ef3c8e2f1f4928"
- integrity sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==
-
-unicode-canonical-property-names-ecmascript@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2"
- integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==
-
-unicode-match-property-ecmascript@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
- integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
- dependencies:
- unicode-canonical-property-names-ecmascript "^2.0.0"
- unicode-property-aliases-ecmascript "^2.0.0"
-
-unicode-match-property-value-ecmascript@^2.1.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71"
- integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==
-
-unicode-property-aliases-ecmascript@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
- integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
-
-unique-string@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
- integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
- dependencies:
- crypto-random-string "^2.0.0"
-
-unpipe@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
- integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-
-update-browserslist-db@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
- integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
- dependencies:
- escalade "^3.2.0"
- picocolors "^1.1.1"
-
-uri-js@^4.2.2:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
- integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
- dependencies:
- punycode "^2.1.0"
-
-use-latest-callback@^0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.2.3.tgz#2d644d3063040b9bc2d4c55bb525a13ae3de9e16"
- integrity sha512-7vI3fBuyRcP91pazVboc4qu+6ZqM8izPWX9k7cRnT8hbD5svslcknsh3S9BUhaK11OmgTV4oWZZVSeQAiV53SQ==
-
-use-sync-external-store@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0"
- integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==
-
-utils-merge@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
- integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
-
-uuid@^10.0.0:
- version "10.0.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294"
- integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==
-
-uuid@^7.0.3:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
- integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
-
-validate-npm-package-name@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8"
- integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==
-
-vary@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
- integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
-
-vlq@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468"
- integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==
-
-walker@^1.0.7, walker@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
- integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
- dependencies:
- makeerror "1.0.12"
-
-warn-once@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/warn-once/-/warn-once-0.1.1.tgz#952088f4fb56896e73fd4e6a3767272a3fccce43"
- integrity sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==
-
-wcwidth@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
- integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
- dependencies:
- defaults "^1.0.3"
-
-webidl-conversions@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
- integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
-
-whatwg-fetch@^3.0.0:
- version "3.6.20"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70"
- integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==
-
-whatwg-url-without-unicode@8.0.0-3:
- version "8.0.0-3"
- resolved "https://registry.yarnpkg.com/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz#ab6df4bf6caaa6c85a59f6e82c026151d4bb376b"
- integrity sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==
- dependencies:
- buffer "^5.4.3"
- punycode "^2.1.1"
- webidl-conversions "^5.0.0"
-
-which@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
- dependencies:
- isexe "^2.0.0"
-
-wonka@^6.3.2:
- version "6.3.5"
- resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.5.tgz#33fa54ea700ff3e87b56fe32202112a9e8fea1a2"
- integrity sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==
-
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
- integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
- dependencies:
- ansi-styles "^6.1.0"
- string-width "^5.0.1"
- strip-ansi "^7.0.1"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
-write-file-atomic@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
- integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
- dependencies:
- imurmurhash "^0.1.4"
- signal-exit "^3.0.7"
-
-ws@^6.2.3:
- version "6.2.3"
- resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee"
- integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==
- dependencies:
- async-limiter "~1.0.0"
-
-ws@^7, ws@^7.5.10:
- version "7.5.10"
- resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9"
- integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
-
-ws@^8.12.1:
- version "8.18.2"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a"
- integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==
-
-xcode@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c"
- integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==
- dependencies:
- simple-plist "^1.1.0"
- uuid "^7.0.3"
-
-xml2js@0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.0.tgz#07afc447a97d2bd6507a1f76eeadddb09f7a8282"
- integrity sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~11.0.0"
-
-xmlbuilder@^15.1.1:
- version "15.1.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
- integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
-
-xmlbuilder@~11.0.0:
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
- integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
-
-y18n@^5.0.5:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
- integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
-
-yallist@^3.0.2:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
- integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yallist@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
- integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
-
-yargs-parser@^21.1.1:
- version "21.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
- integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-
-yargs@^17.6.2:
- version "17.7.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
- integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
- dependencies:
- cliui "^8.0.1"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.3"
- y18n "^5.0.5"
- yargs-parser "^21.1.1"
-
-yocto-queue@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
- integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/examples/simple-chatbot/client/react/.gitignore b/examples/simple-chatbot/client/react/.gitignore
deleted file mode 100644
index a547bf36d..000000000
--- a/examples/simple-chatbot/client/react/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/examples/simple-chatbot/client/react/README.md b/examples/simple-chatbot/client/react/README.md
deleted file mode 100644
index d6947aceb..000000000
--- a/examples/simple-chatbot/client/react/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# React Implementation
-
-Basic implementation using the [Pipecat React SDK](https://docs.pipecat.ai/client/react/introduction).
-
-## Setup
-
-1. Run the bot server; see [README](../../README).
-
-2. Navigate to the `client/react` directory:
-
-```bash
-cd client/react
-```
-
-3. Install dependencies:
-
-```bash
-npm install
-```
-
-4. Run the client app:
-
-```
-npm run dev
-```
-
-5. Visit http://localhost:5173 in your browser.
diff --git a/examples/simple-chatbot/client/react/eslint.config.js b/examples/simple-chatbot/client/react/eslint.config.js
deleted file mode 100644
index 092408a9f..000000000
--- a/examples/simple-chatbot/client/react/eslint.config.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import js from '@eslint/js'
-import globals from 'globals'
-import reactHooks from 'eslint-plugin-react-hooks'
-import reactRefresh from 'eslint-plugin-react-refresh'
-import tseslint from 'typescript-eslint'
-
-export default tseslint.config(
- { ignores: ['dist'] },
- {
- extends: [js.configs.recommended, ...tseslint.configs.recommended],
- files: ['**/*.{ts,tsx}'],
- languageOptions: {
- ecmaVersion: 2020,
- globals: globals.browser,
- },
- plugins: {
- 'react-hooks': reactHooks,
- 'react-refresh': reactRefresh,
- },
- rules: {
- ...reactHooks.configs.recommended.rules,
- 'react-refresh/only-export-components': [
- 'warn',
- { allowConstantExport: true },
- ],
- },
- },
-)
diff --git a/examples/simple-chatbot/client/react/index.html b/examples/simple-chatbot/client/react/index.html
deleted file mode 100644
index 154e0a75a..000000000
--- a/examples/simple-chatbot/client/react/index.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
- Pipecat React Client
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/simple-chatbot/client/react/package-lock.json b/examples/simple-chatbot/client/react/package-lock.json
deleted file mode 100644
index fb9598ed9..000000000
--- a/examples/simple-chatbot/client/react/package-lock.json
+++ /dev/null
@@ -1,3701 +0,0 @@
-{
- "name": "react",
- "version": "0.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "react",
- "version": "0.0.0",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/client-react": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0",
- "react": "^18.3.1",
- "react-dom": "^18.3.1"
- },
- "devDependencies": {
- "@eslint/js": "^9.15.0",
- "@types/react": "^18.3.12",
- "@types/react-dom": "^18.3.1",
- "@vitejs/plugin-react": "^4.3.4",
- "eslint": "^9.15.0",
- "eslint-plugin-react-hooks": "^5.0.0",
- "eslint-plugin-react-refresh": "^0.4.14",
- "globals": "^15.12.0",
- "typescript": "~5.6.2",
- "typescript-eslint": "^8.15.0",
- "vite": "^6.3.5"
- }
- },
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz",
- "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz",
- "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.0",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.27.3",
- "@babel/helpers": "^7.27.6",
- "@babel/parser": "^7.28.0",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.0",
- "@babel/types": "^7.28.0",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz",
- "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.28.0",
- "@babel/types": "^7.28.0",
- "@jridgewell/gen-mapping": "^0.3.12",
- "@jridgewell/trace-mapping": "^0.3.28",
- "jsesc": "^3.0.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.27.2",
- "@babel/helper-validator-option": "^7.27.1",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
- "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.27.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
- "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
- "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.27.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz",
- "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.0"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx-self": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
- "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx-source": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
- "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz",
- "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.0",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.0",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.0",
- "debug": "^4.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz",
- "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.77.0.tgz",
- "integrity": "sha512-icNXKieKAkRR/C5dcPjrCkL1jQGFp5C5WtLHy5uHAdTztm+mo9wlPJuehbWaGOM3TV24mgWHZ/+8jOys1G0I4w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
- "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
- "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
- "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
- "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
- "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
- "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
- "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
- "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
- "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
- "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
- "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
- "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
- "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
- "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
- "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
- "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
- "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
- "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
- "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
- "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
- "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
- "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
- "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
- "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
- "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/config-array": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
- "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/object-schema": "^2.1.6",
- "debug": "^4.3.1",
- "minimatch": "^3.1.2"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/config-helpers": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
- "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/core": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
- "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
- "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^10.0.1",
- "globals": "^14.0.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@eslint/js": {
- "version": "9.30.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz",
- "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- }
- },
- "node_modules/@eslint/object-schema": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
- "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/plugin-kit": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz",
- "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^0.15.1",
- "levn": "^0.4.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
- "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@humanfs/core": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
- "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node": {
- "version": "0.16.6",
- "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
- "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanfs/core": "^0.19.1",
- "@humanwhocodes/retry": "^0.3.0"
- },
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
- "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/retry": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
- "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
- "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
- "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.29",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
- "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/client-react": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-react/-/client-react-1.0.0.tgz",
- "integrity": "sha512-vhyKeFnQlN6311w4f+g+45rLQcn6Qmd5CI933T7wV8Yti8qHi2Tf54mQ9CS7X1lU0wgl7KLDMi/8p+7JaUoTfg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "jotai": "^2.9.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "*",
- "react": ">=18",
- "react-dom": ">=18"
- }
- },
- "node_modules/@pipecat-ai/daily-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/daily-transport/-/daily-transport-1.0.0.tgz",
- "integrity": "sha512-iXmv9Et/TGPvJoeOY+ZBPv+a3pbqT502jco2MBHl8l2VrtztkidjDwiOkPfPdD191CCwaSbV5laSYALsD0AyxA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.77.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.19",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz",
- "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz",
- "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz",
- "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz",
- "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz",
- "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz",
- "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz",
- "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz",
- "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz",
- "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz",
- "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz",
- "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz",
- "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz",
- "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz",
- "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz",
- "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz",
- "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
- "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz",
- "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz",
- "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz",
- "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz",
- "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@types/babel__core": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
- "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "node_modules/@types/babel__generator": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
- "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
- "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__traverse": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
- "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.20.7"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.15",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
- "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/@types/react": {
- "version": "18.3.23",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz",
- "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "18.3.7",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
- "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^18.0.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.36.0.tgz",
- "integrity": "sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/type-utils": "8.36.0",
- "@typescript-eslint/utils": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "graphemer": "^1.4.0",
- "ignore": "^7.0.0",
- "natural-compare": "^1.4.0",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^8.36.0",
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.36.0.tgz",
- "integrity": "sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/typescript-estree": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/project-service": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.36.0.tgz",
- "integrity": "sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.36.0",
- "@typescript-eslint/types": "^8.36.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.36.0.tgz",
- "integrity": "sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.36.0.tgz",
- "integrity": "sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.36.0.tgz",
- "integrity": "sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "8.36.0",
- "@typescript-eslint/utils": "8.36.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.36.0.tgz",
- "integrity": "sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.36.0.tgz",
- "integrity": "sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/project-service": "8.36.0",
- "@typescript-eslint/tsconfig-utils": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.36.0.tgz",
- "integrity": "sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/typescript-estree": "8.36.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.36.0.tgz",
- "integrity": "sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.36.0",
- "eslint-visitor-keys": "^4.2.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@vitejs/plugin-react": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.6.0.tgz",
- "integrity": "sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.27.4",
- "@babel/plugin-transform-react-jsx-self": "^7.27.1",
- "@babel/plugin-transform-react-jsx-source": "^7.27.1",
- "@rolldown/pluginutils": "1.0.0-beta.19",
- "@types/babel__core": "^7.20.5",
- "react-refresh": "^0.17.0"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "peerDependencies": {
- "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0"
- }
- },
- "node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.25.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
- "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "caniuse-lite": "^1.0.30001726",
- "electron-to-chromium": "^1.5.173",
- "node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.3"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001727",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz",
- "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.180",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.180.tgz",
- "integrity": "sha512-ED+GEyEh3kYMwt2faNmgMB0b8O5qtATGgR4RmRsIp4T6p7B8vdMbIedYndnvZfsaXvSzegtpfqRMDNCjjiSduA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/esbuild": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
- "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.6",
- "@esbuild/android-arm": "0.25.6",
- "@esbuild/android-arm64": "0.25.6",
- "@esbuild/android-x64": "0.25.6",
- "@esbuild/darwin-arm64": "0.25.6",
- "@esbuild/darwin-x64": "0.25.6",
- "@esbuild/freebsd-arm64": "0.25.6",
- "@esbuild/freebsd-x64": "0.25.6",
- "@esbuild/linux-arm": "0.25.6",
- "@esbuild/linux-arm64": "0.25.6",
- "@esbuild/linux-ia32": "0.25.6",
- "@esbuild/linux-loong64": "0.25.6",
- "@esbuild/linux-mips64el": "0.25.6",
- "@esbuild/linux-ppc64": "0.25.6",
- "@esbuild/linux-riscv64": "0.25.6",
- "@esbuild/linux-s390x": "0.25.6",
- "@esbuild/linux-x64": "0.25.6",
- "@esbuild/netbsd-arm64": "0.25.6",
- "@esbuild/netbsd-x64": "0.25.6",
- "@esbuild/openbsd-arm64": "0.25.6",
- "@esbuild/openbsd-x64": "0.25.6",
- "@esbuild/openharmony-arm64": "0.25.6",
- "@esbuild/sunos-x64": "0.25.6",
- "@esbuild/win32-arm64": "0.25.6",
- "@esbuild/win32-ia32": "0.25.6",
- "@esbuild/win32-x64": "0.25.6"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "9.30.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz",
- "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.0",
- "@eslint/config-helpers": "^0.3.0",
- "@eslint/core": "^0.14.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.30.1",
- "@eslint/plugin-kit": "^0.3.1",
- "@humanfs/node": "^0.16.6",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.2",
- "@types/estree": "^1.0.6",
- "@types/json-schema": "^7.0.15",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.6",
- "debug": "^4.3.2",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.4.0",
- "eslint-visitor-keys": "^4.2.1",
- "espree": "^10.4.0",
- "esquery": "^1.5.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- },
- "peerDependencies": {
- "jiti": "*"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
- "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
- }
- },
- "node_modules/eslint-plugin-react-refresh": {
- "version": "0.4.20",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz",
- "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "eslint": ">=8.40"
- }
- },
- "node_modules/eslint-scope": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
- "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.15.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fastq": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
- "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^4.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.4"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "15.15.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
- "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jotai": {
- "version": "2.12.5",
- "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.12.5.tgz",
- "integrity": "sha512-G8m32HW3lSmcz/4mbqx0hgJIQ0ekndKWiYP7kWVKi0p6saLXdSoye+FZiOFyonnd7Q482LCzm8sMDl7Ar1NWDw==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20.0"
- },
- "peerDependencies": {
- "@types/react": ">=17.0.0",
- "react": ">=17.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "react": {
- "optional": true
- }
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-releases": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
- "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
- "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.2"
- },
- "peerDependencies": {
- "react": "^18.3.1"
- }
- },
- "node_modules/react-refresh": {
- "version": "0.17.0",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
- "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rollup": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz",
- "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.44.2",
- "@rollup/rollup-android-arm64": "4.44.2",
- "@rollup/rollup-darwin-arm64": "4.44.2",
- "@rollup/rollup-darwin-x64": "4.44.2",
- "@rollup/rollup-freebsd-arm64": "4.44.2",
- "@rollup/rollup-freebsd-x64": "4.44.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.44.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.44.2",
- "@rollup/rollup-linux-arm64-gnu": "4.44.2",
- "@rollup/rollup-linux-arm64-musl": "4.44.2",
- "@rollup/rollup-linux-loongarch64-gnu": "4.44.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-musl": "4.44.2",
- "@rollup/rollup-linux-s390x-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-musl": "4.44.2",
- "@rollup/rollup-win32-arm64-msvc": "4.44.2",
- "@rollup/rollup-win32-ia32-msvc": "4.44.2",
- "@rollup/rollup-win32-x64-msvc": "4.44.2",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/scheduler": {
- "version": "0.23.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
- "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- },
- "node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
- "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.12"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/typescript": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
- "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/typescript-eslint": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.36.0.tgz",
- "integrity": "sha512-fTCqxthY+h9QbEgSIBfL9iV6CvKDFuoxg6bHPNpJ9HIUzS+jy2lCEyCmGyZRWEBSaykqcDPf1SJ+BfCI8DRopA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/eslint-plugin": "8.36.0",
- "@typescript-eslint/parser": "8.36.0",
- "@typescript-eslint/utils": "8.36.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
- "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- },
- "node_modules/vite/node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/vite/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/examples/simple-chatbot/client/react/package.json b/examples/simple-chatbot/client/react/package.json
deleted file mode 100644
index 27ef123eb..000000000
--- a/examples/simple-chatbot/client/react/package.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "react",
- "private": true,
- "version": "0.0.0",
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "lint": "eslint .",
- "preview": "vite preview"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/client-react": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0",
- "react": "^18.3.1",
- "react-dom": "^18.3.1"
- },
- "devDependencies": {
- "@eslint/js": "^9.15.0",
- "@types/react": "^18.3.12",
- "@types/react-dom": "^18.3.1",
- "@vitejs/plugin-react": "^4.3.4",
- "eslint": "^9.15.0",
- "eslint-plugin-react-hooks": "^5.0.0",
- "eslint-plugin-react-refresh": "^0.4.14",
- "globals": "^15.12.0",
- "typescript": "~5.6.2",
- "typescript-eslint": "^8.15.0",
- "vite": "^6.3.5"
- }
-}
diff --git a/examples/simple-chatbot/client/react/src/App.css b/examples/simple-chatbot/client/react/src/App.css
deleted file mode 100644
index 568839735..000000000
--- a/examples/simple-chatbot/client/react/src/App.css
+++ /dev/null
@@ -1,82 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.app {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-.disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-.video-container {
- width: 640px;
- height: 360px;
- background-color: #ddd;
- margin-bottom: 20px;
- border-radius: 8px;
- overflow: hidden;
-}
-
-.video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.mic-enabled {
- background-color: #4caf50;
- color: white;
-}
-
-.mic-disabled {
- background-color: #f44336;
- color: white;
-}
diff --git a/examples/simple-chatbot/client/react/src/App.tsx b/examples/simple-chatbot/client/react/src/App.tsx
deleted file mode 100644
index 3c625a18c..000000000
--- a/examples/simple-chatbot/client/react/src/App.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import {
- PipecatClientAudio,
- PipecatClientVideo,
- usePipecatClientTransportState,
-} from '@pipecat-ai/client-react';
-import { PipecatProvider } from './providers/PipecatProvider';
-import { ConnectButton } from './components/ConnectButton';
-import { StatusDisplay } from './components/StatusDisplay';
-import { DebugDisplay } from './components/DebugDisplay';
-import './App.css';
-
-function BotVideo() {
- const transportState = usePipecatClientTransportState();
- const isConnected = transportState !== 'disconnected';
-
- return (
-
- );
-}
-
-function AppContent() {
- return (
-
- );
-}
-
-function App() {
- return (
-
-
-
- );
-}
-
-export default App;
diff --git a/examples/simple-chatbot/client/react/src/components/ConnectButton.tsx b/examples/simple-chatbot/client/react/src/components/ConnectButton.tsx
deleted file mode 100644
index 5a330cf56..000000000
--- a/examples/simple-chatbot/client/react/src/components/ConnectButton.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import {
- usePipecatClient,
- usePipecatClientTransportState,
-} from '@pipecat-ai/client-react';
-
-export function ConnectButton() {
- const client = usePipecatClient();
- const transportState = usePipecatClientTransportState();
- const isConnected = ['connected', 'ready'].includes(transportState);
-
- const handleClick = async () => {
- if (!client) {
- console.error('Pipecat client is not initialized');
- return;
- }
-
- try {
- if (isConnected) {
- await client.disconnect();
- } else {
- await client.connect({ endpoint: 'http://localhost:7860/connect' });
- }
- } catch (error) {
- console.error('Connection error:', error);
- }
- };
-
- return (
-
-
- {isConnected ? 'Disconnect' : 'Connect'}
-
-
- );
-}
diff --git a/examples/simple-chatbot/client/react/src/components/DebugDisplay.css b/examples/simple-chatbot/client/react/src/components/DebugDisplay.css
deleted file mode 100644
index a9ecc66e2..000000000
--- a/examples/simple-chatbot/client/react/src/components/DebugDisplay.css
+++ /dev/null
@@ -1,26 +0,0 @@
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-.debug-log {
- height: 200px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
-
-.debug-log div {
- margin-bottom: 4px;
-}
diff --git a/examples/simple-chatbot/client/react/src/components/DebugDisplay.tsx b/examples/simple-chatbot/client/react/src/components/DebugDisplay.tsx
deleted file mode 100644
index 7d3a8639f..000000000
--- a/examples/simple-chatbot/client/react/src/components/DebugDisplay.tsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import { useRef, useCallback } from 'react';
-import {
- Participant,
- RTVIEvent,
- TransportState,
- TranscriptData,
- BotLLMTextData,
-} from '@pipecat-ai/client-js';
-import { usePipecatClient, useRTVIClientEvent } from '@pipecat-ai/client-react';
-import './DebugDisplay.css';
-
-export function DebugDisplay() {
- const debugLogRef = useRef(null);
- const client = usePipecatClient();
-
- const log = useCallback((message: string) => {
- if (!debugLogRef.current) return;
-
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
-
- // Add styling based on message type
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3'; // blue for user
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50'; // green for bot
- }
-
- debugLogRef.current.appendChild(entry);
- debugLogRef.current.scrollTop = debugLogRef.current.scrollHeight;
- }, []);
-
- // Log transport state changes
- useRTVIClientEvent(
- RTVIEvent.TransportStateChanged,
- useCallback(
- (state: TransportState) => {
- log(`Transport state changed: ${state}`);
- },
- [log]
- )
- );
-
- // Log bot connection events
- useRTVIClientEvent(
- RTVIEvent.BotConnected,
- useCallback(
- (participant?: Participant) => {
- log(`Bot connected: ${JSON.stringify(participant)}`);
- },
- [log]
- )
- );
-
- useRTVIClientEvent(
- RTVIEvent.BotDisconnected,
- useCallback(
- (participant?: Participant) => {
- log(`Bot disconnected: ${JSON.stringify(participant)}`);
- },
- [log]
- )
- );
-
- // Log track events
- useRTVIClientEvent(
- RTVIEvent.TrackStarted,
- useCallback(
- (track: MediaStreamTrack, participant?: Participant) => {
- log(
- `Track started: ${track.kind} from ${participant?.name || 'unknown'}`
- );
- },
- [log]
- )
- );
-
- useRTVIClientEvent(
- RTVIEvent.TrackStopped,
- useCallback(
- (track: MediaStreamTrack, participant?: Participant) => {
- log(
- `Track stopped: ${track.kind} from ${participant?.name || 'unknown'}`
- );
- },
- [log]
- )
- );
-
- // Log bot ready state and check tracks
- useRTVIClientEvent(
- RTVIEvent.BotReady,
- useCallback(() => {
- log(`Bot ready`);
-
- if (!client) return;
-
- const tracks = client.tracks();
- log(
- `Available tracks: ${JSON.stringify({
- local: {
- audio: !!tracks.local.audio,
- video: !!tracks.local.video,
- },
- bot: {
- audio: !!tracks.bot?.audio,
- video: !!tracks.bot?.video,
- },
- })}`
- );
- }, [client, log])
- );
-
- // Log transcripts
- useRTVIClientEvent(
- RTVIEvent.UserTranscript,
- useCallback(
- (data: TranscriptData) => {
- // Only log final transcripts
- if (data.final) {
- log(`User: ${data.text}`);
- }
- },
- [log]
- )
- );
-
- useRTVIClientEvent(
- RTVIEvent.BotTranscript,
- useCallback(
- (data: BotLLMTextData) => {
- log(`Bot: ${data.text}`);
- },
- [log]
- )
- );
-
- return (
-
- );
-}
diff --git a/examples/simple-chatbot/client/react/src/components/StatusDisplay.tsx b/examples/simple-chatbot/client/react/src/components/StatusDisplay.tsx
deleted file mode 100644
index f7369e8f7..000000000
--- a/examples/simple-chatbot/client/react/src/components/StatusDisplay.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import { usePipecatClientTransportState } from '@pipecat-ai/client-react';
-
-export function StatusDisplay() {
- const transportState = usePipecatClientTransportState();
-
- return (
-
- Status: {transportState}
-
- );
-}
diff --git a/examples/simple-chatbot/client/react/src/main.tsx b/examples/simple-chatbot/client/react/src/main.tsx
deleted file mode 100644
index 9707d8270..000000000
--- a/examples/simple-chatbot/client/react/src/main.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import App from './App';
-
-ReactDOM.createRoot(document.getElementById('root')!).render(
-
-
-
-);
diff --git a/examples/simple-chatbot/client/react/src/providers/PipecatProvider.tsx b/examples/simple-chatbot/client/react/src/providers/PipecatProvider.tsx
deleted file mode 100644
index 73e1ed5d4..000000000
--- a/examples/simple-chatbot/client/react/src/providers/PipecatProvider.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { type PropsWithChildren } from 'react';
-import { PipecatClient } from '@pipecat-ai/client-js';
-import { DailyTransport } from '@pipecat-ai/daily-transport';
-import { PipecatClientProvider } from '@pipecat-ai/client-react';
-
-const client = new PipecatClient({
- transport: new DailyTransport(),
- enableMic: true,
- enableCam: false,
-});
-
-export function PipecatProvider({ children }: PropsWithChildren) {
- return (
- {children}
- );
-}
diff --git a/examples/simple-chatbot/client/react/tsconfig.json b/examples/simple-chatbot/client/react/tsconfig.json
deleted file mode 100644
index a7fc6fbf2..000000000
--- a/examples/simple-chatbot/client/react/tsconfig.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2020",
- "useDefineForClassFields": true,
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
- "module": "ESNext",
- "skipLibCheck": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "resolveJsonModule": true,
- "isolatedModules": true,
- "noEmit": true,
- "jsx": "react-jsx",
-
- /* Linting */
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": ["src"],
- "references": [{ "path": "./tsconfig.node.json" }]
-}
diff --git a/examples/simple-chatbot/client/react/tsconfig.node.json b/examples/simple-chatbot/client/react/tsconfig.node.json
deleted file mode 100644
index 42872c59f..000000000
--- a/examples/simple-chatbot/client/react/tsconfig.node.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "compilerOptions": {
- "composite": true,
- "skipLibCheck": true,
- "module": "ESNext",
- "moduleResolution": "bundler",
- "allowSyntheticDefaultImports": true
- },
- "include": ["vite.config.ts"]
-}
diff --git a/examples/simple-chatbot/client/react/vite.config.ts b/examples/simple-chatbot/client/react/vite.config.ts
deleted file mode 100644
index 8b0f57b91..000000000
--- a/examples/simple-chatbot/client/react/vite.config.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { defineConfig } from 'vite'
-import react from '@vitejs/plugin-react'
-
-// https://vite.dev/config/
-export default defineConfig({
- plugins: [react()],
-})
diff --git a/examples/simple-chatbot/image.png b/examples/simple-chatbot/image.png
deleted file mode 100644
index 93814fd1e..000000000
Binary files a/examples/simple-chatbot/image.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/Dockerfile b/examples/simple-chatbot/server/Dockerfile
deleted file mode 100644
index 704080eec..000000000
--- a/examples/simple-chatbot/server/Dockerfile
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM python:3.10-bullseye
-
-RUN mkdir /app
-RUN mkdir /app/assets
-RUN mkdir /app/utils
-COPY *.py /app/
-COPY requirements.txt /app/
-copy assets/* /app/assets/
-copy utils/* /app/utils/
-
-WORKDIR /app
-RUN pip3 install -r requirements.txt
-
-EXPOSE 7860
-
-CMD ["python3", "server.py"]
\ No newline at end of file
diff --git a/examples/simple-chatbot/server/README.md b/examples/simple-chatbot/server/README.md
deleted file mode 100644
index 01ea1bff4..000000000
--- a/examples/simple-chatbot/server/README.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# Simple Chatbot Server
-
-A FastAPI server that manages bot instances and provides endpoints for both Daily Prebuilt and Pipecat client connections.
-
-## Endpoints
-
-- `GET /` - Direct browser access, redirects to a Daily Prebuilt room
-- `POST /connect` - Pipecat client connection endpoint
-- `GET /status/{pid}` - Get status of a specific bot process
-
-## Environment Variables
-
-Copy `env.example` to `.env` and configure:
-
-```ini
-# Required API Keys
-DAILY_API_KEY= # Your Daily API key
-OPENAI_API_KEY= # Your OpenAI API key (required for OpenAI bot)
-GEMINI_API_KEY= # Your Gemini API key (required for Gemini bot)
-ELEVENLABS_API_KEY= # Your ElevenLabs API key
-
-# Bot Selection
-BOT_IMPLEMENTATION= # Options: 'openai' or 'gemini'
-
-# Optional Configuration
-DAILY_API_URL= # Optional: Daily API URL (defaults to https://api.daily.co/v1)
-DAILY_SAMPLE_ROOM_URL= # Optional: Fixed room URL for development
-HOST= # Optional: Host address (defaults to 0.0.0.0)
-FAST_API_PORT= # Optional: Port number (defaults to 7860)
-```
-
-## Available Bots
-
-The server supports two bot implementations:
-
-1. **OpenAI Bot** (Default)
-
- - Uses GPT-4 for conversation
- - Requires OPENAI_API_KEY
-
-2. **Gemini Bot**
- - Uses Google's Gemini model
- - Requires GEMINI_API_KEY
-
-Select your preferred bot by setting `BOT_IMPLEMENTATION` in your `.env` file.
-
-## Running the Server
-
-Set up and activate your virtual environment:
-
-```bash
-python3 -m venv venv
-source venv/bin/activate # On Windows: venv\Scripts\activate
-```
-
-Install dependencies:
-
-```bash
-pip install -r requirements.txt
-```
-
-If you want to use the local version of `pipecat` in this repo rather than the last published version, also run:
-
-```bash
-pip install --editable "../../../[daily,elevenlabs,openai,silero,google]"
-```
-
-Run the server:
-
-```bash
-python server.py
-```
-
-## Troubleshooting
-
-If you encounred this error:
-
-```bash
-aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host api.daily.co:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')]
-```
-
-It's because Python cannot verify the SSL certificate from https://api.daily.co when making a POST request to create a room or token.
-
-This is a common issue when the system doesn't have the proper CA certificates.
-
-Install SSL Certificates (macOS): `/Applications/Python\ 3.12/Install\ Certificates.command`
diff --git a/examples/simple-chatbot/server/assets/robot01.png b/examples/simple-chatbot/server/assets/robot01.png
deleted file mode 100644
index 3864411dc..000000000
Binary files a/examples/simple-chatbot/server/assets/robot01.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot010.png b/examples/simple-chatbot/server/assets/robot010.png
deleted file mode 100644
index e389e0933..000000000
Binary files a/examples/simple-chatbot/server/assets/robot010.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot011.png b/examples/simple-chatbot/server/assets/robot011.png
deleted file mode 100644
index c0f0633f3..000000000
Binary files a/examples/simple-chatbot/server/assets/robot011.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot012.png b/examples/simple-chatbot/server/assets/robot012.png
deleted file mode 100644
index e5fb2a7d1..000000000
Binary files a/examples/simple-chatbot/server/assets/robot012.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot013.png b/examples/simple-chatbot/server/assets/robot013.png
deleted file mode 100644
index cd62a2005..000000000
Binary files a/examples/simple-chatbot/server/assets/robot013.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot014.png b/examples/simple-chatbot/server/assets/robot014.png
deleted file mode 100644
index 516ca4e8b..000000000
Binary files a/examples/simple-chatbot/server/assets/robot014.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot015.png b/examples/simple-chatbot/server/assets/robot015.png
deleted file mode 100644
index 9b9242691..000000000
Binary files a/examples/simple-chatbot/server/assets/robot015.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot016.png b/examples/simple-chatbot/server/assets/robot016.png
deleted file mode 100644
index cbd2d9d6f..000000000
Binary files a/examples/simple-chatbot/server/assets/robot016.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot017.png b/examples/simple-chatbot/server/assets/robot017.png
deleted file mode 100644
index 5780fa27a..000000000
Binary files a/examples/simple-chatbot/server/assets/robot017.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot018.png b/examples/simple-chatbot/server/assets/robot018.png
deleted file mode 100644
index 5c983704d..000000000
Binary files a/examples/simple-chatbot/server/assets/robot018.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot019.png b/examples/simple-chatbot/server/assets/robot019.png
deleted file mode 100644
index c0f9bef58..000000000
Binary files a/examples/simple-chatbot/server/assets/robot019.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot02.png b/examples/simple-chatbot/server/assets/robot02.png
deleted file mode 100644
index 267969849..000000000
Binary files a/examples/simple-chatbot/server/assets/robot02.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot020.png b/examples/simple-chatbot/server/assets/robot020.png
deleted file mode 100644
index 88bcfa04a..000000000
Binary files a/examples/simple-chatbot/server/assets/robot020.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot021.png b/examples/simple-chatbot/server/assets/robot021.png
deleted file mode 100644
index 5d30e6029..000000000
Binary files a/examples/simple-chatbot/server/assets/robot021.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot022.png b/examples/simple-chatbot/server/assets/robot022.png
deleted file mode 100644
index 0e2d412ed..000000000
Binary files a/examples/simple-chatbot/server/assets/robot022.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot023.png b/examples/simple-chatbot/server/assets/robot023.png
deleted file mode 100644
index d4bc03938..000000000
Binary files a/examples/simple-chatbot/server/assets/robot023.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot024.png b/examples/simple-chatbot/server/assets/robot024.png
deleted file mode 100644
index 62f60c815..000000000
Binary files a/examples/simple-chatbot/server/assets/robot024.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot025.png b/examples/simple-chatbot/server/assets/robot025.png
deleted file mode 100644
index c2ac6639e..000000000
Binary files a/examples/simple-chatbot/server/assets/robot025.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot03.png b/examples/simple-chatbot/server/assets/robot03.png
deleted file mode 100644
index 1cb8c76d5..000000000
Binary files a/examples/simple-chatbot/server/assets/robot03.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot04.png b/examples/simple-chatbot/server/assets/robot04.png
deleted file mode 100644
index 155d19f47..000000000
Binary files a/examples/simple-chatbot/server/assets/robot04.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot05.png b/examples/simple-chatbot/server/assets/robot05.png
deleted file mode 100644
index b5a5c4b79..000000000
Binary files a/examples/simple-chatbot/server/assets/robot05.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot06.png b/examples/simple-chatbot/server/assets/robot06.png
deleted file mode 100644
index b5733db5f..000000000
Binary files a/examples/simple-chatbot/server/assets/robot06.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot07.png b/examples/simple-chatbot/server/assets/robot07.png
deleted file mode 100644
index 8b5d57655..000000000
Binary files a/examples/simple-chatbot/server/assets/robot07.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot08.png b/examples/simple-chatbot/server/assets/robot08.png
deleted file mode 100644
index f7600a559..000000000
Binary files a/examples/simple-chatbot/server/assets/robot08.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/assets/robot09.png b/examples/simple-chatbot/server/assets/robot09.png
deleted file mode 100644
index 16c1a98ba..000000000
Binary files a/examples/simple-chatbot/server/assets/robot09.png and /dev/null differ
diff --git a/examples/simple-chatbot/server/bot-gemini.py b/examples/simple-chatbot/server/bot-gemini.py
deleted file mode 100644
index 27db5ebde..000000000
--- a/examples/simple-chatbot/server/bot-gemini.py
+++ /dev/null
@@ -1,202 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""Gemini Bot Implementation.
-
-This module implements a chatbot using Google's Gemini Multimodal Live model.
-It includes:
-- Real-time audio/video interaction through Daily
-- Animated robot avatar
-- Speech-to-speech model
-
-The bot runs as part of a pipeline that processes audio/video frames and manages
-the conversation flow using Gemini's streaming capabilities.
-"""
-
-import asyncio
-import os
-import sys
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from PIL import Image
-from runner import configure
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.audio.vad.vad_analyzer import VADParams
-from pipecat.frames.frames import (
- BotStartedSpeakingFrame,
- BotStoppedSpeakingFrame,
- Frame,
- OutputImageRawFrame,
- SpriteFrame,
-)
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.services.gemini_multimodal_live.gemini import GeminiMultimodalLiveLLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-sprites = []
-script_dir = os.path.dirname(__file__)
-
-for i in range(1, 26):
- # Build the full path to the image file
- full_path = os.path.join(script_dir, f"assets/robot0{i}.png")
- # Get the filename without the extension to use as the dictionary key
- # Open the image and convert it to bytes
- with Image.open(full_path) as img:
- sprites.append(OutputImageRawFrame(image=img.tobytes(), size=img.size, format=img.format))
-
-# Create a smooth animation by adding reversed frames
-flipped = sprites[::-1]
-sprites.extend(flipped)
-
-# Define static and animated states
-quiet_frame = sprites[0] # Static frame for when bot is listening
-talking_frame = SpriteFrame(images=sprites) # Animation sequence for when bot is talking
-
-
-class TalkingAnimation(FrameProcessor):
- """Manages the bot's visual animation states.
-
- Switches between static (listening) and animated (talking) states based on
- the bot's current speaking status.
- """
-
- def __init__(self):
- super().__init__()
- self._is_talking = False
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- """Process incoming frames and update animation state.
-
- Args:
- frame: The incoming frame to process
- direction: The direction of frame flow in the pipeline
- """
- await super().process_frame(frame, direction)
-
- # Switch to talking animation when bot starts speaking
- if isinstance(frame, BotStartedSpeakingFrame):
- if not self._is_talking:
- await self.push_frame(talking_frame)
- self._is_talking = True
- # Return to static frame when bot stops speaking
- elif isinstance(frame, BotStoppedSpeakingFrame):
- await self.push_frame(quiet_frame)
- self._is_talking = False
-
- await self.push_frame(frame, direction)
-
-
-async def main():
- """Main bot execution function.
-
- Sets up and runs the bot pipeline including:
- - Daily video transport with specific audio parameters
- - Gemini Live multimodal model integration
- - Voice activity detection
- - Animation processing
- - RTVI event handling
- """
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- # Set up Daily transport with specific audio/video parameters for Gemini
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=True,
- video_out_width=1024,
- video_out_height=576,
- vad_analyzer=SileroVADAnalyzer(params=VADParams(stop_secs=0.5)),
- ),
- )
-
- # Initialize the Gemini Multimodal Live model
- llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GEMINI_API_KEY"),
- voice_id="Puck", # Aoede, Charon, Fenrir, Kore, Puck
- transcribe_user_audio=True,
- )
-
- messages = [
- {
- "role": "user",
- "content": "You are Chatbot, a friendly, helpful robot. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way, but keep your responses brief. Start by introducing yourself.",
- },
- ]
-
- # Set up conversation context and management
- # The context_aggregator will automatically collect conversation context
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- ta = TalkingAnimation()
-
- #
- # RTVI events for Pipecat client UI
- #
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- transport.input(),
- rtvi,
- context_aggregator.user(),
- llm,
- ta,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
- await task.queue_frame(quiet_frame)
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- print(f"Participant joined: {participant}")
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- print(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/simple-chatbot/server/bot-openai.py b/examples/simple-chatbot/server/bot-openai.py
deleted file mode 100644
index 8316d3918..000000000
--- a/examples/simple-chatbot/server/bot-openai.py
+++ /dev/null
@@ -1,231 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""OpenAI Bot Implementation.
-
-This module implements a chatbot using OpenAI's GPT-4 model for natural language
-processing. It includes:
-- Real-time audio/video interaction through Daily
-- Animated robot avatar
-- Text-to-speech using ElevenLabs
-- Support for both English and Spanish
-
-The bot runs as part of a pipeline that processes audio/video frames and manages
-the conversation flow.
-"""
-
-import asyncio
-import os
-import sys
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from PIL import Image
-from runner import configure
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- BotStartedSpeakingFrame,
- BotStoppedSpeakingFrame,
- Frame,
- OutputImageRawFrame,
- SpriteFrame,
-)
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-sprites = []
-script_dir = os.path.dirname(__file__)
-
-# Load sequential animation frames
-for i in range(1, 26):
- # Build the full path to the image file
- full_path = os.path.join(script_dir, f"assets/robot0{i}.png")
- # Get the filename without the extension to use as the dictionary key
- # Open the image and convert it to bytes
- with Image.open(full_path) as img:
- sprites.append(OutputImageRawFrame(image=img.tobytes(), size=img.size, format=img.format))
-
-# Create a smooth animation by adding reversed frames
-flipped = sprites[::-1]
-sprites.extend(flipped)
-
-# Define static and animated states
-quiet_frame = sprites[0] # Static frame for when bot is listening
-talking_frame = SpriteFrame(images=sprites) # Animation sequence for when bot is talking
-
-
-class TalkingAnimation(FrameProcessor):
- """Manages the bot's visual animation states.
-
- Switches between static (listening) and animated (talking) states based on
- the bot's current speaking status.
- """
-
- def __init__(self):
- super().__init__()
- self._is_talking = False
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- """Process incoming frames and update animation state.
-
- Args:
- frame: The incoming frame to process
- direction: The direction of frame flow in the pipeline
- """
- await super().process_frame(frame, direction)
-
- # Switch to talking animation when bot starts speaking
- if isinstance(frame, BotStartedSpeakingFrame):
- if not self._is_talking:
- await self.push_frame(talking_frame)
- self._is_talking = True
- # Return to static frame when bot stops speaking
- elif isinstance(frame, BotStoppedSpeakingFrame):
- await self.push_frame(quiet_frame)
- self._is_talking = False
-
- await self.push_frame(frame, direction)
-
-
-async def main():
- """Main bot execution function.
-
- Sets up and runs the bot pipeline including:
- - Daily video transport
- - Speech-to-text and text-to-speech services
- - Language model integration
- - Animation processing
- - RTVI event handling
- """
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- # Set up Daily transport with video/audio parameters
- transport = DailyTransport(
- room_url,
- token,
- "Chatbot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=True,
- video_out_width=1024,
- video_out_height=576,
- vad_analyzer=SileroVADAnalyzer(),
- transcription_enabled=True,
- #
- # Spanish
- #
- # transcription_settings=DailyTranscriptionSettings(
- # language="es",
- # tier="nova",
- # model="2-general"
- # )
- ),
- )
-
- # Initialize text-to-speech service
- tts = ElevenLabsTTSService(
- api_key=os.getenv("ELEVENLABS_API_KEY"),
- #
- # English
- #
- voice_id="pNInz6obpgDQGcFmaJgB",
- #
- # Spanish
- #
- # model="eleven_multilingual_v2",
- # voice_id="gD1IexrzCvsXPHUuT0s3",
- )
-
- # Initialize LLM service
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- messages = [
- {
- "role": "system",
- #
- # English
- #
- "content": "You are Chatbot, a friendly, helpful robot. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way, but keep your responses brief. Start by introducing yourself.",
- #
- # Spanish
- #
- # "content": "Eres Chatbot, un amigable y รบtil robot. Tu objetivo es demostrar tus capacidades de una manera breve. Tus respuestas se convertiran a audio asรญ que nunca no debes incluir caracteres especiales. Contesta a lo que el usuario pregunte de una manera creativa, รบtil y breve. Empieza por presentarte a ti mismo.",
- },
- ]
-
- # Set up conversation context and management
- # The context_aggregator will automatically collect conversation context
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- ta = TalkingAnimation()
-
- #
- # RTVI events for Pipecat client UI
- #
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- transport.input(),
- rtvi,
- context_aggregator.user(),
- llm,
- tts,
- ta,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
- await task.queue_frame(quiet_frame)
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- print(f"Participant joined: {participant}")
- await transport.capture_participant_transcription(participant["id"])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- print(f"Participant left: {participant}")
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/simple-chatbot/server/env.example b/examples/simple-chatbot/server/env.example
deleted file mode 100644
index 76368a4ab..000000000
--- a/examples/simple-chatbot/server/env.example
+++ /dev/null
@@ -1,7 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (optional: for joining the bot to the same room repeatedly for local dev)
-DAILY_SAMPLE_ROOM_TOKEN=9c8... # (optional: if your room above requires a token)
-DAILY_API_KEY=7df...
-OPENAI_API_KEY=sk-PL...
-GEMINI_API_KEY=AIza...
-ELEVENLABS_API_KEY=aeb...
-BOT_IMPLEMENTATION= # Options: 'openai' or 'gemini'
\ No newline at end of file
diff --git a/examples/simple-chatbot/server/requirements.txt b/examples/simple-chatbot/server/requirements.txt
deleted file mode 100644
index 9102eed26..000000000
--- a/examples/simple-chatbot/server/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[daily,elevenlabs,openai,silero,google]
diff --git a/examples/simple-chatbot/server/runner.py b/examples/simple-chatbot/server/runner.py
deleted file mode 100644
index 9e050c997..000000000
--- a/examples/simple-chatbot/server/runner.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- """Configure the Daily room and Daily REST helper."""
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/simple-chatbot/server/server.py b/examples/simple-chatbot/server/server.py
deleted file mode 100644
index f3395d37d..000000000
--- a/examples/simple-chatbot/server/server.py
+++ /dev/null
@@ -1,246 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""RTVI Bot Server Implementation.
-
-This FastAPI server manages RTVI bot instances and provides endpoints for both
-direct browser access and RTVI client connections. It handles:
-- Creating Daily rooms
-- Managing bot processes
-- Providing connection credentials
-- Monitoring bot status
-
-Requirements:
-- Daily API key (set in .env file)
-- Python 3.10+
-- FastAPI
-- Running bot implementation
-"""
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-from typing import Any, Dict
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-# Load environment variables from .env file
-load_dotenv(override=True)
-
-# Maximum number of bot instances allowed per room
-MAX_BOTS_PER_ROOM = 1
-
-# Dictionary to track bot processes: {pid: (process, room_url)}
-bot_procs = {}
-
-# Store Daily API helpers
-daily_helpers = {}
-
-
-def cleanup():
- """Cleanup function to terminate all bot processes.
-
- Called during server shutdown.
- """
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-def get_bot_file():
- bot_implementation = os.getenv("BOT_IMPLEMENTATION", "openai").lower().strip()
- # If blank or None, default to openai
- if not bot_implementation:
- bot_implementation = "openai"
- if bot_implementation not in ["openai", "gemini"]:
- raise ValueError(
- f"Invalid BOT_IMPLEMENTATION: {bot_implementation}. Must be 'openai' or 'gemini'"
- )
- return f"bot-{bot_implementation}"
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """FastAPI lifespan manager that handles startup and shutdown tasks.
-
- - Creates aiohttp session
- - Initializes Daily API helper
- - Cleans up resources on shutdown
- """
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-# Initialize FastAPI app with lifespan manager
-app = FastAPI(lifespan=lifespan)
-
-# Configure CORS to allow requests from any origin
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-async def create_room_and_token() -> tuple[str, str]:
- """Helper function to create a Daily room and generate an access token.
-
- Returns:
- tuple[str, str]: A tuple containing (room_url, token)
-
- Raises:
- HTTPException: If room creation or token generation fails
- """
- room_url = os.getenv("DAILY_SAMPLE_ROOM_URL", None)
- token = os.getenv("DAILY_SAMPLE_ROOM_TOKEN", None)
- if not room_url:
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- if not room.url:
- raise HTTPException(status_code=500, detail="Failed to create room")
- room_url = room.url
-
- token = await daily_helpers["rest"].get_token(room_url)
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room_url}")
-
- return room_url, token
-
-
-@app.get("/")
-async def start_agent(request: Request):
- """Endpoint for direct browser access to the bot.
-
- Creates a room, starts a bot instance, and redirects to the Daily room URL.
-
- Returns:
- RedirectResponse: Redirects to the Daily room URL
-
- Raises:
- HTTPException: If room creation, token generation, or bot startup fails
- """
- print("Creating room")
- room_url, token = await create_room_and_token()
- print(f"Room URL: {room_url}")
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room_url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limit reached for room: {room_url}")
-
- # Spawn a new bot process
- try:
- bot_file = get_bot_file()
- proc = subprocess.Popen(
- [f"python3 -m {bot_file} -u {room_url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room_url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room_url)
-
-
-@app.post("/connect")
-async def rtvi_connect(request: Request) -> Dict[Any, Any]:
- """RTVI connect endpoint that creates a room and returns connection credentials.
-
- This endpoint is called by RTVI clients to establish a connection.
-
- Returns:
- Dict[Any, Any]: Authentication bundle containing room_url and token
-
- Raises:
- HTTPException: If room creation, token generation, or bot startup fails
- """
- print("Creating room for RTVI connection")
- room_url, token = await create_room_and_token()
- print(f"Room URL: {room_url}")
-
- # Start the bot process
- try:
- bot_file = get_bot_file()
- proc = subprocess.Popen(
- [f"python3 -m {bot_file} -u {room_url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room_url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- # Return the authentication bundle in format expected by DailyTransport
- return {"room_url": room_url, "token": token}
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- """Get the status of a specific bot process.
-
- Args:
- pid (int): Process ID of the bot
-
- Returns:
- JSONResponse: Status information for the bot
-
- Raises:
- HTTPException: If the specified bot process is not found
- """
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- status = "running" if proc[0].poll() is None else "finished"
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- # Parse command line arguments for server configuration
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Storyteller FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- # Start the FastAPI server
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/storytelling-chatbot/.gitignore b/examples/storytelling-chatbot/.gitignore
deleted file mode 100644
index ba9cd4106..000000000
--- a/examples/storytelling-chatbot/.gitignore
+++ /dev/null
@@ -1,158 +0,0 @@
-node_modules/
-.idea/
-
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-.DS_Store
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintainted in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-
-read.html
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/README.md b/examples/storytelling-chatbot/README.md
deleted file mode 100644
index d10620eef..000000000
--- a/examples/storytelling-chatbot/README.md
+++ /dev/null
@@ -1,112 +0,0 @@
-[](https://gemini-storybot.vercel.app/)
-
-# Storytelling Chatbot
-
-
-
-This example shows how to build a voice-driven interactive storytelling experience.
-It periodically prompts the user for input for a 'choose your own adventure' style experience.
-
-We use Gemini 2.0 for creating the story and image prompts, and we add visual elements to the story by generating images using Google's Imagen.
-
----
-
-### It uses the following AI services:
-
-**Deepgram - Speech-to-Text**
-
-Transcribes inbound participant voice media to text.
-
-**Google Gemini 2.0 - LLM**
-
-Our creative writer LLM. You can see the context used to prompt it [here](server/prompts.py)
-
-**ElevenLabs - Text-to-Speech**
-
-Converts and streams the LLM response from text to audio
-
-**Google Imagen - Image Generation**
-
-Adds pictures to our story. Prompting is quite key for style consistency, so we task the LLM to turn each story page into a short image prompt.
-
----
-
-## Setup
-
-### Client
-
-1. Navigate to the client directory:
-
- ```shell
- cd client
- ```
-
-2. Install dependencies:
-
- ```shell
- npm install
- ```
-
-3. Build the client:
-
- ```shell
- npm run build
- ```
-
-### Server
-
-1. Navigate to the server directory
-
- ```shell
- cd ../server
- ```
-
-2. Set up your virtual environment and install requirements
-
- ```shell
- python3 -m venv venv
- source venv/bin/activate
- pip install -r requirements.txt
- ```
-
-3. Create environment file and set variables
-
- ```shell
- mv env.example .env
- ```
-
- You'll need API keys for:
-
- - DAILY_API_KEY
- - ELEVENLABS_API_KEY
- - ELEVENLABS_VOICE_ID
- - GOOGLE_API_KEY
-
-4. (Optional) Deployment:
-
- When deploying to production, to ensure only this app can spawn new bot processes, set your `ENV` to `production`
-
-## Run it locally
-
-1. Navigate back to the demo's root directory:
-
- ```shell
- cd ..
- ```
-
-2. Run the application:
-
- ```shell
- python server/bot_runner.py --host localhost
- ```
-
- You can run with a custom domain or port using: `python server/bot_runner.py --host somehost --p someport`
-
-3. โก๏ธ Open the host URL in your browser: http://localhost:7860
-
----
-
-## Improvements to make
-
-- Wait for track_started event to avoid rushed intro
-- Show 5 minute timer on the UI
diff --git a/examples/storytelling-chatbot/client/.eslintrc.json b/examples/storytelling-chatbot/client/.eslintrc.json
deleted file mode 100644
index bffb357a7..000000000
--- a/examples/storytelling-chatbot/client/.eslintrc.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "next/core-web-vitals"
-}
diff --git a/examples/storytelling-chatbot/client/.gitignore b/examples/storytelling-chatbot/client/.gitignore
deleted file mode 100644
index fd3dbb571..000000000
--- a/examples/storytelling-chatbot/client/.gitignore
+++ /dev/null
@@ -1,36 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-.yarn/install-state.gz
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# local env files
-.env*.local
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
diff --git a/examples/storytelling-chatbot/client/README.md b/examples/storytelling-chatbot/client/README.md
deleted file mode 100644
index c4033664f..000000000
--- a/examples/storytelling-chatbot/client/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
-
-## Getting Started
-
-First, run the development server:
-
-```bash
-npm run dev
-# or
-yarn dev
-# or
-pnpm dev
-# or
-bun dev
-```
-
-Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-
-You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
-
-This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
-
-## Learn More
-
-To learn more about Next.js, take a look at the following resources:
-
-- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
-- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
-
-You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
-
-## Deploy on Vercel
-
-The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
-
-Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/examples/storytelling-chatbot/client/app/favicon.ico b/examples/storytelling-chatbot/client/app/favicon.ico
deleted file mode 100644
index 8c49042df..000000000
Binary files a/examples/storytelling-chatbot/client/app/favicon.ico and /dev/null differ
diff --git a/examples/storytelling-chatbot/client/app/globals.css b/examples/storytelling-chatbot/client/app/globals.css
deleted file mode 100644
index 4ea7806f0..000000000
--- a/examples/storytelling-chatbot/client/app/globals.css
+++ /dev/null
@@ -1,109 +0,0 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-@layer base {
- :root {
- --background: 0 0% 100%;
- --foreground: 224 71.4% 4.1%;
-
- --card: 0 0% 100%;
- --card-foreground: 224 71.4% 4.1%;
-
- --popover: 0 0% 100%;
- --popover-foreground: 224 71.4% 4.1%;
-
- --primary: 220.9 39.3% 11%;
- --primary-foreground: 210 20% 98%;
-
- --secondary: 220 14.3% 95.9%;
- --secondary-foreground: 220.9 39.3% 11%;
-
- --muted: 220 14.3% 95.9%;
- --muted-foreground: 220 8.9% 46.1%;
-
- --accent: 220 14.3% 95.9%;
- --accent-foreground: 220.9 39.3% 11%;
-
- --destructive: 0 84.2% 60.2%;
- --destructive-foreground: 210 20% 98%;
-
- --border: 220 13% 91%;
- --input: 220 13% 91%;
- --ring: 224 71.4% 4.1%;
-
- --radius: 0.5rem;
- }
-
- .dark {
- --background: 224 71.4% 4.1%;
- --foreground: 210 20% 98%;
-
- --card: 224 71.4% 4.1%;
- --card-foreground: 210 20% 98%;
-
- --popover: 224 71.4% 4.1%;
- --popover-foreground: 210 20% 98%;
-
- --primary: 210 20% 98%;
- --primary-foreground: 220.9 39.3% 11%;
-
- --secondary: 215 27.9% 16.9%;
- --secondary-foreground: 210 20% 98%;
-
- --muted: 215 27.9% 16.9%;
- --muted-foreground: 217.9 10.6% 64.9%;
-
- --accent: 215 27.9% 16.9%;
- --accent-foreground: 210 20% 98%;
-
- --destructive: 0 62.8% 30.6%;
- --destructive-foreground: 210 20% 98%;
-
- --border: 215 27.9% 16.9%;
- --input: 215 27.9% 16.9%;
- --ring: 216 12.2% 83.9%;
- }
-}
-
-@layer base {
- * {
- @apply border-border;
- }
- body {
- @apply bg-background text-foreground;
- }
-}
-
-body{
- background: url("/bg.jpg") no-repeat center center;
- background-size: cover;
-}
-
-.cardShadow{
- box-shadow: 0px 124px 35px 0px rgba(0, 0, 0, 0.00), 0px 79px 32px 0px rgba(0, 0, 0, 0.01), 0px 45px 27px 0px rgba(0, 0, 0, 0.05), 0px 20px 20px 0px rgba(0, 0, 0, 0.09), 0px 5px 11px 0px rgba(0, 0, 0, 0.10);
-}
-
-@keyframes fadeInSlideUp {
- 0% {
- opacity: 0;
- transform: translateY(50px);
- }
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-.fade-in {
- animation: fadeIn 1s ease-out;
-}
-
-@keyframes fadeIn {
- 0% {
- opacity: 0;
- }
- 100% {
- opacity: 1;
- }
-}
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/client/app/layout.tsx b/examples/storytelling-chatbot/client/app/layout.tsx
deleted file mode 100644
index e7ca11512..000000000
--- a/examples/storytelling-chatbot/client/app/layout.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import React from "react";
-
-import "./globals.css";
-import type { Metadata } from "next";
-import { Space_Grotesk, Space_Mono } from "next/font/google";
-
-import { cn } from "@/app/utils";
-
-// Font
-const sans = Space_Grotesk({
- subsets: ["latin"],
- weight: ["400", "500", "600"],
- variable: "--font-sans",
-});
-
-const mono = Space_Mono({
- subsets: ["latin"],
- weight: ["400", "700"],
- variable: "--font-mono",
-});
-
-export const metadata: Metadata = {
- title: "Storytelling Chatbot - Daily AI",
- description: "Built with git.new/ai",
- metadataBase: new URL(process.env.SITE_URL || "http://localhost:3000"),
-};
-
-export default function RootLayout({
- children,
-}: Readonly<{
- children: React.ReactNode;
-}>) {
- return (
-
-
- {children}
-
-
- );
-}
diff --git a/examples/storytelling-chatbot/client/app/opengraph-image.png b/examples/storytelling-chatbot/client/app/opengraph-image.png
deleted file mode 100644
index 777b74296..000000000
Binary files a/examples/storytelling-chatbot/client/app/opengraph-image.png and /dev/null differ
diff --git a/examples/storytelling-chatbot/client/app/page.tsx b/examples/storytelling-chatbot/client/app/page.tsx
deleted file mode 100644
index cb395aaf9..000000000
--- a/examples/storytelling-chatbot/client/app/page.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-"use client";
-
-import React from "react";
-import { DailyProvider, useCallObject } from "@daily-co/daily-react";
-
-import App from "../components/App";
-
-export default function Home() {
- const callObject = useCallObject({});
-
- return (
-
-
-
- );
-}
diff --git a/examples/storytelling-chatbot/client/app/twitter-image.png b/examples/storytelling-chatbot/client/app/twitter-image.png
deleted file mode 100644
index 2a747ef9e..000000000
Binary files a/examples/storytelling-chatbot/client/app/twitter-image.png and /dev/null differ
diff --git a/examples/storytelling-chatbot/client/app/utils.ts b/examples/storytelling-chatbot/client/app/utils.ts
deleted file mode 100644
index d084ccade..000000000
--- a/examples/storytelling-chatbot/client/app/utils.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { type ClassValue, clsx } from "clsx"
-import { twMerge } from "tailwind-merge"
-
-export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs))
-}
diff --git a/examples/storytelling-chatbot/client/components.json b/examples/storytelling-chatbot/client/components.json
deleted file mode 100644
index 62fbc68a1..000000000
--- a/examples/storytelling-chatbot/client/components.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "$schema": "https://ui.shadcn.com/schema.json",
- "style": "default",
- "rsc": true,
- "tsx": true,
- "tailwind": {
- "config": "tailwind.config.ts",
- "css": "app/globals.css",
- "baseColor": "gray",
- "cssVariables": true,
- "prefix": ""
- },
- "aliases": {
- "components": "@/components",
- "utils": "@/app"
- }
-}
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/client/components/App.tsx b/examples/storytelling-chatbot/client/components/App.tsx
deleted file mode 100644
index 553a21836..000000000
--- a/examples/storytelling-chatbot/client/components/App.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-"use client";
-
-import React, { useState } from "react";
-
-import { useDaily } from "@daily-co/daily-react";
-import Setup from "./Setup";
-import Story from "./Story";
-
-type State =
- | "idle"
- | "connecting"
- | "connected"
- | "started"
- | "finished"
- | "error";
-
-export default function Call() {
- const daily = useDaily();
-
- const [state, setState] = useState("idle");
- const [room, setRoom] = useState(null);
-
- async function start() {
- setState("connecting");
-
- if (!daily) return;
-
- // Create a new room for the story session
- try {
- const response = await fetch("/", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- });
-
- const { room_url, token } = await response.json();
-
- // Keep a reference to the room url for later
- setRoom(room_url);
-
- // Join the WebRTC session
- await daily.join({
- url: room_url,
- token,
- videoSource: false,
- startAudioOff: true,
- });
-
- setState("connected");
-
- // Disable local audio, the bot will say hello first
- daily.setLocalAudio(false);
-
- setState("started");
- } catch (error) {
- setState("error");
- }
- }
-
- async function leave() {
- await daily?.leave();
- setState("finished");
- }
-
- if (state === "error") {
- return (
-
-
- This demo is currently at capacity. Please try again later.
-
-
- );
- }
-
- if (state === "started") {
- return leave()} />;
- }
-
- return start()} />;
-}
diff --git a/examples/storytelling-chatbot/client/components/AudioIndicator/index.tsx b/examples/storytelling-chatbot/client/components/AudioIndicator/index.tsx
deleted file mode 100644
index 09ca4c402..000000000
--- a/examples/storytelling-chatbot/client/components/AudioIndicator/index.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import {
- useAudioLevel,
- useAudioTrack,
- useLocalSessionId,
-} from "@daily-co/daily-react";
-import { useCallback, useRef } from "react";
-
-export const AudioIndicator: React.FC = () => {
- const localSessionId = useLocalSessionId();
- const audioTrack = useAudioTrack(localSessionId);
- const volRef = useRef(null);
-
- useAudioLevel(
- audioTrack?.persistentTrack,
- useCallback((volume) => {
- // this volume number will be between 0 and 1
- // give it a minimum scale of 0.15 to not completely disappear ๐ป
- if (volRef.current) {
- const v = volume * 1.75;
- volRef.current.style.transform = `scale(${Math.max(0.1, v)})`;
- }
- }, [])
- );
-
- // Your audio track's audio volume visualized in a small circle,
- // whose size changes depending on the volume level
- return (
- <>
-
-
- >
- );
-};
-
-export const AudioIndicatorBar: React.FC = () => {
- const localSessionId = useLocalSessionId();
- const audioTrack = useAudioTrack(localSessionId);
-
- const volRef = useRef(null);
-
- useAudioLevel(
- audioTrack?.persistentTrack,
- useCallback((volume) => {
- if (volRef.current)
- volRef.current.style.width = Math.max(2, volume * 100) + "%";
- }, [])
- );
-
- return (
-
- );
-};
-
-export default AudioIndicator;
diff --git a/examples/storytelling-chatbot/client/components/DevicePicker/index.tsx b/examples/storytelling-chatbot/client/components/DevicePicker/index.tsx
deleted file mode 100644
index cdbc21c5b..000000000
--- a/examples/storytelling-chatbot/client/components/DevicePicker/index.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-"use client";
-
-import { useEffect } from "react";
-import { DailyMeetingState } from "@daily-co/daily-js";
-import { useDaily, useDevices } from "@daily-co/daily-react";
-import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from "@/components/ui/select";
-import { IconMicrophone, IconDeviceSpeaker } from "@tabler/icons-react";
-import { AudioIndicatorBar } from "../AudioIndicator";
-
-interface Props {}
-
-export default function DevicePicker({}: Props) {
- const daily = useDaily();
- const {
- currentMic,
- hasMicError,
- micState,
- microphones,
- setMicrophone,
- currentSpeaker,
- speakers,
- setSpeaker,
- } = useDevices();
-
- const handleMicrophoneChange = (value: string) => {
- setMicrophone(value);
- };
-
- const handleSpeakerChange = (value: string) => {
- setSpeaker(value);
- };
-
- useEffect(() => {
- if (microphones.length > 0 || !daily || daily.isDestroyed()) return;
- const meetingState = daily.meetingState();
- const meetingStatesBeforeJoin: DailyMeetingState[] = [
- "new",
- "loading",
- "loaded",
- ];
- if (meetingStatesBeforeJoin.includes(meetingState)) {
- daily.startCamera({ startVideoOff: true, startAudioOff: false });
- }
- }, [daily, microphones]);
-
- return (
-
-
-
- Microphone:
-
-
-
-
-
-
-
-
-
- {hasMicError && (
-
- No microphone access.
-
- )}
-
- {microphones.map((m) => (
-
- {m.device.label}
-
- ))}
-
-
-
-
-
-
-
-
-
- Speakers:
-
-
-
-
-
-
-
-
- {speakers.map((m) => (
-
- {m.device.label}
-
- ))}
-
-
-
-
- {hasMicError && (
-
- {micState === "blocked" ? (
-
- Please check your browser and system permissions. Make sure that
- this app is allowed to access your microphone.
-
- ) : micState === "in-use" ? (
-
- Your microphone is being used by another app. Please close any
- other apps using your microphone and restart this app.
-
- ) : micState === "not-found" ? (
-
- No microphone seems to be connected. Please connect a microphone.
-
- ) : micState === "not-supported" ? (
-
- This app is not supported on your device. Please update your
- software or use a different device.
-
- ) : (
-
- There seems to be an issue accessing your microphone. Try
- restarting the app or consult a system administrator.
-
- )}
-
- )}
-
- );
-}
diff --git a/examples/storytelling-chatbot/client/components/MicToggle/index.tsx b/examples/storytelling-chatbot/client/components/MicToggle/index.tsx
deleted file mode 100644
index 011e6d06f..000000000
--- a/examples/storytelling-chatbot/client/components/MicToggle/index.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import {
- useDaily,
- useLocalSessionId,
- useMediaTrack,
-} from "@daily-co/daily-react";
-import { useCallback } from "react";
-import { IconMicrophone, IconMicrophoneOff } from "@tabler/icons-react";
-
-export const MicToggle: React.FC = () => {
- const daily = useDaily();
- const localSessionId = useLocalSessionId();
- const audioTrack = useMediaTrack(localSessionId, "audio");
- const isMicMuted =
- audioTrack.state === "blocked" || audioTrack.state === "off";
-
- const handleClick = useCallback(() => {
- if (!daily) return;
- daily.setLocalAudio(isMicMuted);
- }, [daily, isMicMuted]);
-
- const text = isMicMuted ? (
-
- ) : (
-
- );
-
- return (
-
- {text}
-
- );
-};
-
-export default MicToggle;
diff --git a/examples/storytelling-chatbot/client/components/Setup.tsx b/examples/storytelling-chatbot/client/components/Setup.tsx
deleted file mode 100644
index 4b6c35ea6..000000000
--- a/examples/storytelling-chatbot/client/components/Setup.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import React from "react";
-import { Button } from "@/components/ui/button";
-import DevicePicker from "@/components/DevicePicker";
-import { IconAlertCircle, IconEar, IconLoader2 } from "@tabler/icons-react";
-
-type SetupProps = {
- handleStart: () => void;
-};
-
-const buttonLabel = {
- intro: "Next",
- setup: "Let's begin!",
- loading: "Joining...",
-};
-export const Setup: React.FC = ({ handleStart }) => {
- const [state, setState] = React.useState<"intro" | "setup" | "loading">(
- "intro"
- );
-
- return (
-
-
-
-
- Welcome to Storytime
-
- {state === "intro" ? (
- <>
-
- This app demos a voice-controlled storytelling chatbot. It will
- start with the bot asking you what kind of story you'd like
- to hear (e.g. a fairy tale, a mystery, etc.). After each scene,
- the bot will pause to ask for your input. Direct the story any
- way you choose!
-
-
- For best results, try in a quiet
- environment!
-
-
- This demo expires after 5 minutes.
-
- >
- ) : (
- <>
-
- Since you'll be talking to Storybot, we need to make sure
- it can hear you! Please configure your microphone and speakers
- below.
-
-
- >
- )}
-
-
-
{
- if (state === "intro") {
- setState("setup");
- } else {
- setState("loading");
- handleStart();
- }
- }}
- >
- {state === "loading" && (
-
- )}
- {buttonLabel[state]}
-
-
-
-
-
- );
-};
-
-export default Setup;
diff --git a/examples/storytelling-chatbot/client/components/Story.tsx b/examples/storytelling-chatbot/client/components/Story.tsx
deleted file mode 100644
index 49e489e56..000000000
--- a/examples/storytelling-chatbot/client/components/Story.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import React, { useState, useEffect } from "react";
-import {
- useDaily,
- useParticipantIds,
- useAppMessage,
- DailyAudio,
-} from "@daily-co/daily-react";
-import { IconLogout, IconLoader2 } from "@tabler/icons-react";
-
-import VideoTile from "@/components/VideoTile";
-import { Button } from "@/components/ui/button";
-import UserInputIndicator from "@/components/UserInputIndicator";
-import WaveText from "@/components/WaveText";
-
-interface StoryProps {
- handleLeave: () => void;
-}
-
-const Story: React.FC = ({ handleLeave }) => {
- const daily = useDaily();
- const participantIds = useParticipantIds({ filter: "remote" });
- const [storyState, setStoryState] = useState<"user" | "assistant">(
- "assistant"
- );
-
- useAppMessage({
- onAppMessage: (e) => {
- if (!daily || !e.data?.cue) return;
-
- // Determine the UI state from the cue sent by the bot
- if (e.data?.cue === "user_turn") {
- // Delay enabling local mic input to avoid feedback from LLM
- setTimeout(() => daily.setLocalAudio(true), 500);
- setStoryState("user");
- } else {
- // Uncomment the next line to mute the mic while the
- // assistant it talking. Leave it commented to allow for interruptions
- // daily.setLocalAudio(false);
- setStoryState("assistant");
- }
- },
- });
-
- return (
-
- {/* Absolute elements */}
-
-
-
-
- handleLeave()}>
-
- Exit
-
-
-
-
- {/* Static elements */}
-
- {participantIds.length >= 1 ? (
-
- ) : (
-
-
-
- )}
-
-
-
-
- );
-};
-
-export default Story;
diff --git a/examples/storytelling-chatbot/client/components/StoryTranscript/StoryTranscript.module.css b/examples/storytelling-chatbot/client/components/StoryTranscript/StoryTranscript.module.css
deleted file mode 100644
index d8a5816a0..000000000
--- a/examples/storytelling-chatbot/client/components/StoryTranscript/StoryTranscript.module.css
+++ /dev/null
@@ -1,42 +0,0 @@
-.container{
- position: absolute;
- color:white;
- z-index: 50;
- margin: 0 auto;
- display: flex;
- flex-direction: column;
- @apply gap-4 inset-6;
- align-items: center;
- justify-content: end;
- text-align: center;
-}
-
-.transcript{
- @apply font-semibold;
-}
-
-.transcript span{
- box-decoration-break: clone;
- @apply bg-gray-900/80 rounded-md px-4 py-2;
-}
-
-.sentence{
- opacity: 1;
- animation: fadeOut 2.5s linear forwards;
- animation-delay: 1s;
-}
-@keyframes fadeOut {
- 0% {
- opacity: 1;
- transform: scale(1);
- }
- 20% {
- transform: scale(1);
- filter: blur(0);
- }
- 100% {
- transform: scale(0.8) translateY(-50%);
- filter: blur(25px);
- opacity: 0;
- }
-}
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/client/components/StoryTranscript/index.tsx b/examples/storytelling-chatbot/client/components/StoryTranscript/index.tsx
deleted file mode 100644
index 520ca142e..000000000
--- a/examples/storytelling-chatbot/client/components/StoryTranscript/index.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-"use client";
-
-import React, { useEffect, useRef, useState } from "react";
-import { useAppMessage } from "@daily-co/daily-react";
-import { DailyEventObjectAppMessage } from "@daily-co/daily-js";
-
-import styles from "./StoryTranscript.module.css";
-
-export default function StoryTranscript() {
- const [partialText, setPartialText] = useState("");
- const [sentences, setSentences] = useState([]);
- const intervalRef = useRef(null);
-
- useEffect(() => {
- clearInterval(intervalRef.current);
-
- intervalRef.current = setInterval(() => {
- if (sentences.length > 2) {
- setSentences((s) => s.slice(1));
- }
- }, 2500);
-
- return () => clearInterval(intervalRef.current);
- }, [sentences]);
-
- useAppMessage({
- onAppMessage: (e: DailyEventObjectAppMessage) => {
- if (e.fromId && e.fromId === "transcription") {
- // Check for LLM transcripts only
- if (e.data.user_id !== "") {
- setPartialText(e.data.text);
- if (e.data.is_final) {
- setPartialText("");
- setSentences((s) => [...s, e.data.text]);
- }
- }
- }
- },
- });
-
- return (
-
- {sentences.map((sentence, index) => (
-
- {sentence}
-
- ))}
- {partialText && (
-
- {partialText}
-
- )}
-
- );
-}
diff --git a/examples/storytelling-chatbot/client/components/UserInputIndicator/UserInputIndicator.module.css b/examples/storytelling-chatbot/client/components/UserInputIndicator/UserInputIndicator.module.css
deleted file mode 100644
index b1c515345..000000000
--- a/examples/storytelling-chatbot/client/components/UserInputIndicator/UserInputIndicator.module.css
+++ /dev/null
@@ -1,65 +0,0 @@
-.panel{
- width: 100%;
- pointer-events: none;
- color: #ffffff;
- text-align: center;
- position: relative;
- @apply pb-8;
-}
-
-.panel::after{
- content: "";
- position: absolute;
- inset: 0px;
- z-index: 10;
- opacity: 0;
- transition: all 0.3s ease;
- @apply bg-gradient-to-t from-gray-950 to-transparent;
-}
-
-.active::after{ opacity: 1;}
-
-.micIcon{
- position: relative;
- width: 120px;
- height: 120px;
- border-radius: 120px;
- border: 6px solid;
- outline: 6px solid;
- display: flex;
- justify-content: center;
- align-items: center;
- margin: 0 auto;
- z-index: 20;
- transition: all 0.5s ease;
- @apply bg-gray-700/60 border-gray-600 outline-gray-900/20;
-
-}
-
-.micIcon svg{
- position: relative;
- z-index: 20;
- opacity: 0.25;
- transition: opacity 0.5s ease;
-}
-
-.micIconActive{
- @apply bg-teal-950 border-teal-500 outline-teal-500/20;
-}
-
-.micIconActive svg{
- opacity: 1;
-}
-
-.transcript{
- flex: 0;
- align-self: center;
- opacity: 0.25;
- transition: opacity 1s ease;
- transition-delay: 2.5s;
- @apply bg-gray-900/90 font-medium py-1 px-2 rounded-sm mt-4;
-}
-
-.active .transcript{
- opacity: 1;
-}
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/client/components/UserInputIndicator/index.tsx b/examples/storytelling-chatbot/client/components/UserInputIndicator/index.tsx
deleted file mode 100644
index 8120564f9..000000000
--- a/examples/storytelling-chatbot/client/components/UserInputIndicator/index.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React, { useState, useEffect, useRef } from "react";
-
-import { useAppMessage } from "@daily-co/daily-react";
-import { DailyEventObjectAppMessage } from "@daily-co/daily-js";
-import styles from "./UserInputIndicator.module.css";
-import { IconMicrophone } from "@tabler/icons-react";
-import { TypewriterEffect } from "../ui/typewriter";
-import AudioIndicator from "../AudioIndicator";
-
-interface Props {
- active: boolean;
-}
-
-export default function UserInputIndicator({ active }: Props) {
- const [transcription, setTranscription] = useState([]);
- const timeoutRef = useRef();
-
- const resetTimeout = () => {
- if (timeoutRef.current) {
- clearTimeout(timeoutRef.current);
- }
- timeoutRef.current = setTimeout(() => {
- setTranscription([]);
- }, 5000);
- };
-
- useEffect(() => {
- return () => {
- if (timeoutRef.current) {
- clearTimeout(timeoutRef.current);
- }
- };
- }, []);
-
- useAppMessage({
- onAppMessage: (e: DailyEventObjectAppMessage) => {
- if (e.fromId && e.fromId === "transcription") {
- if (e.data.user_id === "" && e.data.is_final) {
- setTranscription((t) => [...t, ...e.data.text.split(" ")]);
- resetTimeout();
- }
- }
- },
- });
-
- useEffect(() => {
- if (active) return;
- const t = setTimeout(() => setTranscription([]), 4000);
- return () => clearTimeout(t);
- }, [active]);
-
- return (
-
- );
-}
diff --git a/examples/storytelling-chatbot/client/components/VideoTile/VideoTile.module.css b/examples/storytelling-chatbot/client/components/VideoTile/VideoTile.module.css
deleted file mode 100644
index 975c8a5bb..000000000
--- a/examples/storytelling-chatbot/client/components/VideoTile/VideoTile.module.css
+++ /dev/null
@@ -1,34 +0,0 @@
-.container{
- position: relative;
- animation: fadeIn 3s ease;
- transition: all 3s ease-out;
-}
-
-.videoTile{
- @apply bg-gray-950;
- width: 760px;
- height: 760px;
- mask-image: url('/alpha-mask.gif');
- mask-size: cover;
- mask-repeat: no-repeat;
- margin:0 auto;
- z-index: 10;
- position: relative;
-}
-
-.inactive{
- opacity: 0.7;
- filter:blur(3px);
- transform: scale(0.95)
-}
-
-@keyframes fadeIn {
- 0% {
- filter: blur(100px);
- opacity: 0;
- }
- 100% {
- filter: blur(0px);
- opacity: 1;
- }
-}
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/client/components/VideoTile/index.tsx b/examples/storytelling-chatbot/client/components/VideoTile/index.tsx
deleted file mode 100644
index af20b198d..000000000
--- a/examples/storytelling-chatbot/client/components/VideoTile/index.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from "react";
-import styles from "./VideoTile.module.css";
-import { DailyVideo } from "@daily-co/daily-react";
-import StoryTranscript from "@/components/StoryTranscript";
-
-interface Props {
- sessionId: string;
- inactive: boolean;
-}
-
-const VideoTile = ({ sessionId, inactive }: Props) => {
- return (
-
- );
-};
-
-export default VideoTile;
diff --git a/examples/storytelling-chatbot/client/components/WaveText/WaveText.module.css b/examples/storytelling-chatbot/client/components/WaveText/WaveText.module.css
deleted file mode 100644
index 75754a779..000000000
--- a/examples/storytelling-chatbot/client/components/WaveText/WaveText.module.css
+++ /dev/null
@@ -1,68 +0,0 @@
-.waveText{
- color: white;
- text-shadow: 3px 3px 0px rgba(0,0,0,0.5);
- opacity: 0;
- transition: opacity 2s ease;
- position: relative;
- @apply text-4xl font-bold;
-}
-
-.active{
- opacity: 1;
-}
-
-@keyframes jump {
- 0% {
- opacity: 0.5;
- transform:translateY(0px)
- }
- 50% {
- opacity: 1;
- transform:translateY(-30px);
- }
- 100% {
- opacity: 0.55;
- transform:translateY(0px)
- }
- }
-
-.waveText span{
- display:inline-block;
- animation:jump 2s infinite ease-in-out;
-
-}
-
-.waveText span:nth-child(1) {
- animation-delay:0s;
-}
-
-.waveText span:nth-child(1) {
- animation-delay:0.1s;
-}
-.waveText span:nth-child(2) {
- animation-delay:0.2s;
-}
-.waveText span:nth-child(3) {
- animation-delay:0.3s;
-}
-.waveText span:nth-child(4) {
- animation-delay:0.4s;
-}
-.waveText span:nth-child(5) {
- animation-delay:0.5s;
-}
-.waveText span:nth-child(6) {
- animation-delay:0.6s;
-}
-.waveText span:nth-child(7) {
- animation-delay:0.7s;
-}
-.waveText span:nth-child(8) {
- animation-delay:0.8s;
-}
-.waveText span:nth-child(9) {
- animation-delay:0.9s;
-}
-.waveText span:nth-child(10) {
- animation-delay:1s;
-}
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/client/components/WaveText/index.tsx b/examples/storytelling-chatbot/client/components/WaveText/index.tsx
deleted file mode 100644
index 1f3e9923c..000000000
--- a/examples/storytelling-chatbot/client/components/WaveText/index.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from "react";
-import styles from "./WaveText.module.css";
-
-interface Props {
- active: boolean;
-}
-
-export default function WaveText({ active }: Props) {
- return (
-
- W
- h
- a
- t
-
- n
- e
- x
- t
- ?
-
- );
-}
diff --git a/examples/storytelling-chatbot/client/components/ui/button.tsx b/examples/storytelling-chatbot/client/components/ui/button.tsx
deleted file mode 100644
index f6d102e1c..000000000
--- a/examples/storytelling-chatbot/client/components/ui/button.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import * as React from "react";
-import { Slot } from "@radix-ui/react-slot";
-import { cva, type VariantProps } from "class-variance-authority";
-
-import { cn } from "@/app/utils";
-
-const buttonVariants = cva(
- "inline-flex items-center justify-center whitespace-nowrap rounded-md text-md font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
- {
- variants: {
- variant: {
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
- destructive:
- "bg-destructive text-destructive-foreground hover:bg-destructive/90",
- outline:
- "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
- secondary:
- "bg-secondary text-secondary-foreground hover:bg-secondary/80",
- ghost: "hover:bg-accent hover:text-accent-foreground",
- link: "text-primary underline-offset-4 hover:underline",
- },
- size: {
- default: "h-11 rounded-lg px-6 py-2",
- sm: "h-9 rounded-md px-3",
- lg: "h-12 rounded-xl px-8",
- icon: "h-10 w-10",
- },
- },
- defaultVariants: {
- variant: "default",
- size: "default",
- },
- }
-);
-
-export interface ButtonProps
- extends React.ButtonHTMLAttributes,
- VariantProps {
- asChild?: boolean;
-}
-
-const Button = React.forwardRef(
- ({ className, variant, size, asChild = false, ...props }, ref) => {
- const Comp = asChild ? Slot : "button";
- return (
-
- );
- }
-);
-Button.displayName = "Button";
-
-export { Button, buttonVariants };
diff --git a/examples/storytelling-chatbot/client/components/ui/select.tsx b/examples/storytelling-chatbot/client/components/ui/select.tsx
deleted file mode 100644
index f2b6eafc8..000000000
--- a/examples/storytelling-chatbot/client/components/ui/select.tsx
+++ /dev/null
@@ -1,160 +0,0 @@
-"use client";
-
-import * as React from "react";
-import * as SelectPrimitive from "@radix-ui/react-select";
-import { IconCheck, IconChevronDown, IconChevronUp } from "@tabler/icons-react";
-
-import { cn } from "@/app/utils";
-
-const Select = SelectPrimitive.Root;
-
-const SelectGroup = SelectPrimitive.Group;
-
-const SelectValue = SelectPrimitive.Value;
-
-const SelectTrigger = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
- span]:line-clamp-1",
- className
- )}
- {...props}
- >
- {children}
-
-
-
-
-));
-SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
-
-const SelectScrollUpButton = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-
-
-));
-SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
-
-const SelectScrollDownButton = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-
-
-));
-SelectScrollDownButton.displayName =
- SelectPrimitive.ScrollDownButton.displayName;
-
-const SelectContent = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, position = "popper", ...props }, ref) => (
-
-
-
-
- {children}
-
-
-
-
-));
-SelectContent.displayName = SelectPrimitive.Content.displayName;
-
-const SelectLabel = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-SelectLabel.displayName = SelectPrimitive.Label.displayName;
-
-const SelectItem = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, ...props }, ref) => (
-
-
-
-
-
-
-
- {children}
-
-));
-SelectItem.displayName = SelectPrimitive.Item.displayName;
-
-const SelectSeparator = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, ...props }, ref) => (
-
-));
-SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
-
-export {
- Select,
- SelectGroup,
- SelectValue,
- SelectTrigger,
- SelectContent,
- SelectLabel,
- SelectItem,
- SelectSeparator,
- SelectScrollUpButton,
- SelectScrollDownButton,
-};
diff --git a/examples/storytelling-chatbot/client/components/ui/typewriter.tsx b/examples/storytelling-chatbot/client/components/ui/typewriter.tsx
deleted file mode 100644
index 1e51bf418..000000000
--- a/examples/storytelling-chatbot/client/components/ui/typewriter.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-"use client";
-
-import { cn } from "@/app/utils";
-import { motion } from "framer-motion";
-
-export const TypewriterEffect = ({
- words,
- className,
-}: {
- words: string[];
- className?: string;
- cursorClassName?: string;
-}) => {
- const renderWords = () => {
- return (
-
- {words.map((word, idx) => {
- return (
-
- {word.split("").map((char, index) => (
- {char}
- ))}
-
-
- );
- })}
-
- );
- };
-
- return (
-
- {words.length < 1 ? (
-
...
- ) : (
-
-
- {renderWords()}
-
-
- )}
-
- );
-};
diff --git a/examples/storytelling-chatbot/client/env.example b/examples/storytelling-chatbot/client/env.example
deleted file mode 100644
index e17c89b4d..000000000
--- a/examples/storytelling-chatbot/client/env.example
+++ /dev/null
@@ -1 +0,0 @@
-SITE_URL=
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/client/next.config.mjs b/examples/storytelling-chatbot/client/next.config.mjs
deleted file mode 100644
index 9fc75242c..000000000
--- a/examples/storytelling-chatbot/client/next.config.mjs
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('next').NextConfig} */
-const nextConfig = {
- output: "export",
-
- async rewrites() {
- return [
- {
- source: "/:path*",
- destination: "http://localhost:7860/:path*",
- },
- ];
- },
-};
-
-export default nextConfig;
diff --git a/examples/storytelling-chatbot/client/package-lock.json b/examples/storytelling-chatbot/client/package-lock.json
deleted file mode 100644
index 745475270..000000000
--- a/examples/storytelling-chatbot/client/package-lock.json
+++ /dev/null
@@ -1,6432 +0,0 @@
-{
- "name": "client",
- "version": "0.1.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "0.1.0",
- "dependencies": {
- "@daily-co/daily-js": "^0.62.0",
- "@daily-co/daily-react": "^0.18.0",
- "@radix-ui/react-select": "^2.1.2",
- "@radix-ui/react-slot": "^1.0.2",
- "@tabler/icons-react": "^3.19.0",
- "class-variance-authority": "^0.7.0",
- "clsx": "^2.1.1",
- "framer-motion": "^11.9.0",
- "next": "^14.2.25",
- "react": "^18.3.1",
- "react-dom": "^18.3.1",
- "recoil": "^0.7.7",
- "tailwind-merge": "^2.5.2",
- "tailwindcss-animate": "^1.0.7"
- },
- "devDependencies": {
- "@types/node": "^20.16.10",
- "@types/react": "^18.3.11",
- "@types/react-dom": "^18.3.0",
- "autoprefixer": "^10.4.20",
- "eslint": "^8.57.1",
- "eslint-config-next": "14.1.4",
- "postcss": "^8.4.47",
- "tailwindcss": "^3.4.13",
- "typescript": "^5.6.2"
- }
- },
- "node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
- "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.62.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.62.0.tgz",
- "integrity": "sha512-OskaskD0DU44bfoAaW+El5TPnJNTG0FdKx+pjRfgyqkXt4sOuLdo0DoUmUVDkls2iKHTbpTRJUOR8MeW/OdccQ==",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^7.60.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@daily-co/daily-react": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-react/-/daily-react-0.18.0.tgz",
- "integrity": "sha512-qjoVkBLLEpE51NbctXPpi6n3f645L8tuwlPLVnELFKTUiGuDPcEX7x9oUtRjk0qOrMdineCg9QtcB5Dk6tgmJw==",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "lodash.throttle": "^4.1.1"
- },
- "engines": {
- "node": ">=12"
- },
- "peerDependencies": {
- "@daily-co/daily-js": ">=0.45.0 <1",
- "react": ">=16.13.1",
- "recoil": "^0.7.0"
- }
- },
- "node_modules/@emnapi/core": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz",
- "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.0.2",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
- "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz",
- "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz",
- "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
- "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@floating-ui/core": {
- "version": "1.6.9",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz",
- "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
- "dependencies": {
- "@floating-ui/utils": "^0.2.9"
- }
- },
- "node_modules/@floating-ui/dom": {
- "version": "1.6.13",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz",
- "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
- "dependencies": {
- "@floating-ui/core": "^1.6.0",
- "@floating-ui/utils": "^0.2.9"
- }
- },
- "node_modules/@floating-ui/react-dom": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
- "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
- "dependencies": {
- "@floating-ui/dom": "^1.0.0"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/@floating-ui/utils": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
- "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
- "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
- "deprecated": "Use @eslint/config-array instead",
- "dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.3",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true
- },
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
- "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz",
- "integrity": "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.4.0",
- "@emnapi/runtime": "^1.4.0",
- "@tybys/wasm-util": "^0.9.0"
- }
- },
- "node_modules/@next/env": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.30.tgz",
- "integrity": "sha512-KBiBKrDY6kxTQWGzKjQB7QirL3PiiOkV7KW98leHFjtVRKtft76Ra5qSA/SL75xT44dp6hOcqiiJ6iievLOYug=="
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz",
- "integrity": "sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==",
- "dev": true,
- "dependencies": {
- "glob": "10.3.10"
- }
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.30.tgz",
- "integrity": "sha512-EAqfOTb3bTGh9+ewpO/jC59uACadRHM6TSA9DdxJB/6gxOpyV+zrbqeXiFTDy9uV6bmipFDkfpAskeaDcO+7/g==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.30.tgz",
- "integrity": "sha512-TyO7Wz1IKE2kGv8dwQ0bmPL3s44EKVencOqwIY69myoS3rdpO1NPg5xPM5ymKu7nfX4oYJrpMxv8G9iqLsnL4A==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.30.tgz",
- "integrity": "sha512-I5lg1fgPJ7I5dk6mr3qCH1hJYKJu1FsfKSiTKoYwcuUf53HWTrEkwmMI0t5ojFKeA6Vu+SfT2zVy5NS0QLXV4Q==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.30.tgz",
- "integrity": "sha512-8GkNA+sLclQyxgzCDs2/2GSwBc92QLMrmYAmoP2xehe5MUKBLB2cgo34Yu242L1siSkwQkiV4YLdCnjwc/Micw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.30.tgz",
- "integrity": "sha512-8Ly7okjssLuBoe8qaRCcjGtcMsv79hwzn/63wNeIkzJVFVX06h5S737XNr7DZwlsbTBDOyI6qbL2BJB5n6TV/w==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.30.tgz",
- "integrity": "sha512-dBmV1lLNeX4mR7uI7KNVHsGQU+OgTG5RGFPi3tBJpsKPvOPtg9poyav/BYWrB3GPQL4dW5YGGgalwZ79WukbKQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.30.tgz",
- "integrity": "sha512-6MMHi2Qc1Gkq+4YLXAgbYslE1f9zMGBikKMdmQRHXjkGPot1JY3n5/Qrbg40Uvbi8//wYnydPnyvNhI1DMUW1g==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.30.tgz",
- "integrity": "sha512-pVZMnFok5qEX4RT59mK2hEVtJX+XFfak+/rjHpyFh7juiT52r177bfFKhnlafm0UOSldhXjj32b+LZIOdswGTg==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.30.tgz",
- "integrity": "sha512-4KCo8hMZXMjpTzs3HOqOGYYwAXymXIy7PEPAXNEcEOyKqkjiDlECumrWziy+JEF0Oi4ILHGxzgQ3YiMGG2t/Lg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nolyfill/is-core-module": {
- "version": "1.0.39",
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
- "dev": true,
- "engines": {
- "node": ">=12.4.0"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@radix-ui/number": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz",
- "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="
- },
- "node_modules/@radix-ui/primitive": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz",
- "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA=="
- },
- "node_modules/@radix-ui/react-arrow": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.4.tgz",
- "integrity": "sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-collection": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.4.tgz",
- "integrity": "sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.0",
- "@radix-ui/react-slot": "1.2.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-compose-refs": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
- "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-context": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz",
- "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-direction": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz",
- "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.7.tgz",
- "integrity": "sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.2",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-primitive": "2.1.0",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-escape-keydown": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-focus-guards": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz",
- "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.4.tgz",
- "integrity": "sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-primitive": "2.1.0",
- "@radix-ui/react-use-callback-ref": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-id": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz",
- "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-popper": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.4.tgz",
- "integrity": "sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA==",
- "dependencies": {
- "@floating-ui/react-dom": "^2.0.0",
- "@radix-ui/react-arrow": "1.1.4",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.0",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-rect": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1",
- "@radix-ui/rect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-portal": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.6.tgz",
- "integrity": "sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-primitive": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.0.tgz",
- "integrity": "sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw==",
- "dependencies": {
- "@radix-ui/react-slot": "1.2.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-select": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.2.tgz",
- "integrity": "sha512-HjkVHtBkuq+r3zUAZ/CvNWUGKPfuicGDbgtZgiQuFmNcV5F+Tgy24ep2nsAW2nFgvhGPJVqeBZa6KyVN0EyrBA==",
- "dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.2",
- "@radix-ui/react-collection": "1.1.4",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.7",
- "@radix-ui/react-focus-guards": "1.1.2",
- "@radix-ui/react-focus-scope": "1.1.4",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.4",
- "@radix-ui/react-portal": "1.1.6",
- "@radix-ui/react-primitive": "2.1.0",
- "@radix-ui/react-slot": "1.2.0",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.0",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-slot": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.0.tgz",
- "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-callback-ref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz",
- "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-controllable-state": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz",
- "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==",
- "dependencies": {
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-effect-event": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz",
- "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-escape-keydown": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz",
- "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==",
- "dependencies": {
- "@radix-ui/react-use-callback-ref": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-layout-effect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz",
- "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-previous": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz",
- "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-rect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz",
- "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==",
- "dependencies": {
- "@radix-ui/rect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-size": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz",
- "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-visually-hidden": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.0.tgz",
- "integrity": "sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/rect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz",
- "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="
- },
- "node_modules/@rtsao/scc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
- "dev": true
- },
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz",
- "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==",
- "dev": true
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.120.3.tgz",
- "integrity": "sha512-ewJJIQ0mbsOX6jfiVFvqMjokxNtgP3dNwUv+4nenN+iJJPQsM6a0ocro3iscxwVdbkjw5hY3BUV2ICI5Q0UWoA==",
- "dependencies": {
- "@sentry/core": "7.120.3",
- "@sentry/types": "7.120.3",
- "@sentry/utils": "7.120.3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.120.3.tgz",
- "integrity": "sha512-s5xy+bVL1eDZchM6gmaOiXvTqpAsUfO7122DxVdEDMtwVq3e22bS2aiGa8CUgOiJkulZ+09q73nufM77kOmT/A==",
- "dependencies": {
- "@sentry/core": "7.120.3",
- "@sentry/replay": "7.120.3",
- "@sentry/types": "7.120.3",
- "@sentry/utils": "7.120.3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@sentry-internal/tracing": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.120.3.tgz",
- "integrity": "sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==",
- "dependencies": {
- "@sentry/core": "7.120.3",
- "@sentry/types": "7.120.3",
- "@sentry/utils": "7.120.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.120.3.tgz",
- "integrity": "sha512-i9vGcK9N8zZ/JQo1TCEfHHYZ2miidOvgOABRUc9zQKhYdcYQB2/LU1kqlj77Pxdxf4wOa9137d6rPrSn9iiBxg==",
- "dependencies": {
- "@sentry-internal/feedback": "7.120.3",
- "@sentry-internal/replay-canvas": "7.120.3",
- "@sentry-internal/tracing": "7.120.3",
- "@sentry/core": "7.120.3",
- "@sentry/integrations": "7.120.3",
- "@sentry/replay": "7.120.3",
- "@sentry/types": "7.120.3",
- "@sentry/utils": "7.120.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/core": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.3.tgz",
- "integrity": "sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==",
- "dependencies": {
- "@sentry/types": "7.120.3",
- "@sentry/utils": "7.120.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/integrations": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.120.3.tgz",
- "integrity": "sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==",
- "dependencies": {
- "@sentry/core": "7.120.3",
- "@sentry/types": "7.120.3",
- "@sentry/utils": "7.120.3",
- "localforage": "^1.8.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/replay": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.120.3.tgz",
- "integrity": "sha512-CjVq1fP6bpDiX8VQxudD5MPWwatfXk8EJ2jQhJTcWu/4bCSOQmHxnnmBM+GVn5acKUBCodWHBN+IUZgnJheZSg==",
- "dependencies": {
- "@sentry-internal/tracing": "7.120.3",
- "@sentry/core": "7.120.3",
- "@sentry/types": "7.120.3",
- "@sentry/utils": "7.120.3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@sentry/types": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.3.tgz",
- "integrity": "sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/utils": {
- "version": "7.120.3",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.3.tgz",
- "integrity": "sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==",
- "dependencies": {
- "@sentry/types": "7.120.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
- "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tabler/icons": {
- "version": "3.31.0",
- "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.31.0.tgz",
- "integrity": "sha512-dblAdeKY3+GA1U+Q9eziZ0ooVlZMHsE8dqP0RkwvRtEsAULoKOYaCUOcJ4oW1DjWegdxk++UAt2SlQVnmeHv+g==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/codecalm"
- }
- },
- "node_modules/@tabler/icons-react": {
- "version": "3.31.0",
- "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.31.0.tgz",
- "integrity": "sha512-2rrCM5y/VnaVKnORpDdAua9SEGuJKVqPtWxeQ/vUVsgaUx30LDgBZph7/lterXxDY1IKR6NO//HDhWiifXTi3w==",
- "dependencies": {
- "@tabler/icons": "3.31.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/codecalm"
- },
- "peerDependencies": {
- "react": ">= 16"
- }
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
- "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
- "dev": true
- },
- "node_modules/@types/node": {
- "version": "20.17.32",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.32.tgz",
- "integrity": "sha512-zeMXFn8zQ+UkjK4ws0RiOC9EWByyW1CcVmLe+2rQocXRsGEDxUCwPEIVgpsGcLHS/P8JkT0oa3839BRABS0oPw==",
- "dev": true,
- "dependencies": {
- "undici-types": "~6.19.2"
- }
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.14",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
- "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==",
- "devOptional": true
- },
- "node_modules/@types/react": {
- "version": "18.3.20",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz",
- "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==",
- "devOptional": true,
- "dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "18.3.6",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.6.tgz",
- "integrity": "sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==",
- "devOptional": true,
- "peerDependencies": {
- "@types/react": "^18.0.0"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
- "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
- "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
- "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
- "dev": true,
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
- "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "9.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
- "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
- "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
- "dev": true
- },
- "node_modules/@unrs/resolver-binding-darwin-arm64": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.2.tgz",
- "integrity": "sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-x64": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.2.tgz",
- "integrity": "sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-freebsd-x64": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.2.tgz",
- "integrity": "sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.2.tgz",
- "integrity": "sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.2.tgz",
- "integrity": "sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.2.tgz",
- "integrity": "sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.2.tgz",
- "integrity": "sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.2.tgz",
- "integrity": "sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.2.tgz",
- "integrity": "sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.2.tgz",
- "integrity": "sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.2.tgz",
- "integrity": "sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.2.tgz",
- "integrity": "sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.2.tgz",
- "integrity": "sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.2.tgz",
- "integrity": "sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==",
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "optional": true,
- "dependencies": {
- "@napi-rs/wasm-runtime": "^0.2.9"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.2.tgz",
- "integrity": "sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.2.tgz",
- "integrity": "sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.2.tgz",
- "integrity": "sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/aria-hidden": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
- "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
- "dependencies": {
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
- "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "is-array-buffer": "^3.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
- "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "is-string": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array.prototype.findlast": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
- "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
- "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-shim-unscopables": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
- "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
- "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
- "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
- "es-errors": "^1.3.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
- "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "dev": true,
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
- "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
- "dev": true
- },
- "node_modules/async-function": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
- "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/autoprefixer": {
- "version": "10.4.21",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
- "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "browserslist": "^4.24.4",
- "caniuse-lite": "^1.0.30001702",
- "fraction.js": "^4.3.7",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.1.1",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axe-core": {
- "version": "4.10.3",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
- "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
- "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
- "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001688",
- "electron-to-chromium": "^1.5.73",
- "node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.1"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "dependencies": {
- "streamsearch": "^1.1.0"
- },
- "engines": {
- "node": ">=10.16.0"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001715",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz",
- "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/class-variance-authority": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
- "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
- "dependencies": {
- "clsx": "^2.1.1"
- },
- "funding": {
- "url": "https://polar.sh/cva"
- }
- },
- "node_modules/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
- },
- "node_modules/clsx": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
- "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "devOptional": true
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
- "dev": true
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
- "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
- "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/inspect-js"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
- "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/detect-node-es": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
- "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
- },
- "node_modules/didyoumean": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.143",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.143.tgz",
- "integrity": "sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g==",
- "dev": true
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
- },
- "node_modules/es-abstract": {
- "version": "1.23.9",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
- "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
- "dev": true,
- "dependencies": {
- "array-buffer-byte-length": "^1.0.2",
- "arraybuffer.prototype.slice": "^1.0.4",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "data-view-buffer": "^1.0.2",
- "data-view-byte-length": "^1.0.2",
- "data-view-byte-offset": "^1.0.1",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-set-tostringtag": "^2.1.0",
- "es-to-primitive": "^1.3.0",
- "function.prototype.name": "^1.1.8",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.0",
- "get-symbol-description": "^1.1.0",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "internal-slot": "^1.1.0",
- "is-array-buffer": "^3.0.5",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.2",
- "is-regex": "^1.2.1",
- "is-shared-array-buffer": "^1.0.4",
- "is-string": "^1.1.1",
- "is-typed-array": "^1.1.15",
- "is-weakref": "^1.1.0",
- "math-intrinsics": "^1.1.0",
- "object-inspect": "^1.13.3",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.7",
- "own-keys": "^1.0.1",
- "regexp.prototype.flags": "^1.5.3",
- "safe-array-concat": "^1.1.3",
- "safe-push-apply": "^1.0.0",
- "safe-regex-test": "^1.1.0",
- "set-proto": "^1.0.0",
- "string.prototype.trim": "^1.2.10",
- "string.prototype.trimend": "^1.0.9",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.3",
- "typed-array-byte-length": "^1.0.3",
- "typed-array-byte-offset": "^1.0.4",
- "typed-array-length": "^1.0.7",
- "unbox-primitive": "^1.1.0",
- "which-typed-array": "^1.1.18"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-iterator-helpers": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
- "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.3",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.6",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "iterator.prototype": "^1.1.4",
- "safe-array-concat": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
- "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
- "dev": true,
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
- "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "dev": true,
- "dependencies": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
- "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
- "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@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.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "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.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "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"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-next": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.4.tgz",
- "integrity": "sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==",
- "dev": true,
- "dependencies": {
- "@next/eslint-plugin-next": "14.1.4",
- "@rushstack/eslint-patch": "^1.3.3",
- "@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.28.1",
- "eslint-plugin-jsx-a11y": "^6.7.1",
- "eslint-plugin-react": "^7.33.2",
- "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
- },
- "peerDependencies": {
- "eslint": "^7.23.0 || ^8.0.0",
- "typescript": ">=3.3.1"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
- "dev": true,
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-typescript": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
- "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
- "dev": true,
- "dependencies": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.4.0",
- "get-tsconfig": "^4.10.0",
- "is-bun-module": "^2.0.0",
- "stable-hash": "^0.0.5",
- "tinyglobby": "^0.2.13",
- "unrs-resolver": "^1.6.2"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-import-resolver-typescript"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
- "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
- "dev": true,
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.31.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
- "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
- "dev": true,
- "dependencies": {
- "@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.8",
- "array.prototype.findlastindex": "^1.2.5",
- "array.prototype.flat": "^1.3.2",
- "array.prototype.flatmap": "^1.3.2",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.0",
- "hasown": "^2.0.2",
- "is-core-module": "^2.15.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "object.groupby": "^1.0.3",
- "object.values": "^1.2.0",
- "semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.8",
- "tsconfig-paths": "^3.15.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
- "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
- "dev": true,
- "dependencies": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-react": {
- "version": "7.37.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
- "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
- "dev": true,
- "dependencies": {
- "array-includes": "^3.1.8",
- "array.prototype.findlast": "^1.2.5",
- "array.prototype.flatmap": "^1.3.3",
- "array.prototype.tosorted": "^1.1.4",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.2.1",
- "estraverse": "^5.3.0",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.9",
- "object.fromentries": "^2.0.8",
- "object.values": "^1.2.1",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.5",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.12",
- "string.prototype.repeat": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "5.0.0-canary-7118f5dd7-20230705",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz",
- "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "node_modules/fastq": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
- "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "dev": true,
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "dev": true
- },
- "node_modules/for-each": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
- "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
- "dev": true,
- "dependencies": {
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/fraction.js": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
- "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
- "dev": true,
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "patreon",
- "url": "https://github.com/sponsors/rawify"
- }
- },
- "node_modules/framer-motion": {
- "version": "11.18.2",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz",
- "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==",
- "dependencies": {
- "motion-dom": "^11.18.1",
- "motion-utils": "^11.18.1",
- "tslib": "^2.4.0"
- },
- "peerDependencies": {
- "@emotion/is-prop-valid": "*",
- "react": "^18.0.0 || ^19.0.0",
- "react-dom": "^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@emotion/is-prop-valid": {
- "optional": true
- },
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
- "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "functions-have-names": "^1.2.3",
- "hasown": "^2.0.2",
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-nonce": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
- "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
- "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
- "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
- "dev": true,
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "node_modules/hamt_plus": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/hamt_plus/-/hamt_plus-1.0.2.tgz",
- "integrity": "sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA=="
- },
- "node_modules/has-bigints": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
- "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dev": true,
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/immediate": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
- "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
- },
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "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.",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/internal-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
- "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
- "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-async-function": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
- "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
- "dev": true,
- "dependencies": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
- "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dev": true,
- "dependencies": {
- "has-bigints": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
- "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bun-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
- "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
- "dev": true,
- "dependencies": {
- "semver": "^7.7.1"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
- "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
- "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
- "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.0",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
- "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
- "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-regex": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
- "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
- "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
- "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
- "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
- "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-symbols": "^1.1.0",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
- "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "dev": true,
- "dependencies": {
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakmap": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
- "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
- "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
- "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "node_modules/iterator.prototype": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
- "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
- "dev": true,
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "get-proto": "^1.0.0",
- "has-symbols": "^1.1.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jiti": {
- "version": "1.21.7",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
- "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
- "bin": {
- "jiti": "bin/jiti.js"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
- "dev": true,
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
- "dev": true
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dev": true,
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lie": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
- "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==",
- "dependencies": {
- "immediate": "~3.0.5"
- }
- },
- "node_modules/lilconfig": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
- "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
- },
- "node_modules/localforage": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz",
- "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==",
- "dependencies": {
- "lie": "3.1.1"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/lodash.throttle": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
- "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/motion-dom": {
- "version": "11.18.1",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz",
- "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==",
- "dependencies": {
- "motion-utils": "^11.18.1"
- }
- },
- "node_modules/motion-utils": {
- "version": "11.18.1",
- "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz",
- "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA=="
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/napi-postinstall": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.2.tgz",
- "integrity": "sha512-Wy1VI/hpKHwy1MsnFxHCJxqFwmmxD0RA/EKPL7e6mfbsY01phM2SZyJnRdU0bLvhu0Quby1DCcAZti3ghdl4/A==",
- "dev": true,
- "bin": {
- "napi-postinstall": "lib/cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/napi-postinstall"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "node_modules/next": {
- "version": "14.2.30",
- "resolved": "https://registry.npmjs.org/next/-/next-14.2.30.tgz",
- "integrity": "sha512-+COdu6HQrHHFQ1S/8BBsCag61jZacmvbuL2avHvQFbWa2Ox7bE+d8FyNgxRLjXQ5wtPyQwEmk85js/AuaG2Sbg==",
- "dependencies": {
- "@next/env": "14.2.30",
- "@swc/helpers": "0.5.5",
- "busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001579",
- "graceful-fs": "^4.2.11",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.1"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": ">=18.17.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.30",
- "@next/swc-darwin-x64": "14.2.30",
- "@next/swc-linux-arm64-gnu": "14.2.30",
- "@next/swc-linux-arm64-musl": "14.2.30",
- "@next/swc-linux-x64-gnu": "14.2.30",
- "@next/swc-linux-x64-musl": "14.2.30",
- "@next/swc-win32-arm64-msvc": "14.2.30",
- "@next/swc-win32-ia32-msvc": "14.2.30",
- "@next/swc-win32-x64-msvc": "14.2.30"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.41.2",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
- "node_modules/next/node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
- "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
- "dev": true
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
- "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0",
- "has-symbols": "^1.1.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
- "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
- "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
- "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.values": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
- "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/own-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
- "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.2.6",
- "object-keys": "^1.1.1",
- "safe-push-apply": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
- "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
- "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.3",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
- "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.8",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-import": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "dependencies": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-js": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
- "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "dependencies": {
- "camelcase-css": "^2.0.1"
- },
- "engines": {
- "node": "^12 || ^14 || >= 16"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.4.21"
- }
- },
- "node_modules/postcss-nested": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
- "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.1.1"
- },
- "engines": {
- "node": ">=12.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.14"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
- "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.2"
- },
- "peerDependencies": {
- "react": "^18.3.1"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
- },
- "node_modules/react-remove-scroll": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz",
- "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==",
- "dependencies": {
- "react-remove-scroll-bar": "^2.3.7",
- "react-style-singleton": "^2.2.3",
- "tslib": "^2.1.0",
- "use-callback-ref": "^1.3.3",
- "use-sidecar": "^1.1.3"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-remove-scroll-bar": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
- "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
- "dependencies": {
- "react-style-singleton": "^2.2.2",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-style-singleton": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
- "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
- "dependencies": {
- "get-nonce": "^1.0.0",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/recoil": {
- "version": "0.7.7",
- "resolved": "https://registry.npmjs.org/recoil/-/recoil-0.7.7.tgz",
- "integrity": "sha512-8Og5KPQW9LwC577Vc7Ug2P0vQshkv1y3zG3tSSkWMqkWSwHmE+by06L8JtnGocjW6gcCvfwB3YtrJG6/tWivNQ==",
- "dependencies": {
- "hamt_plus": "1.0.2"
- },
- "peerDependencies": {
- "react": ">=16.13.1"
- },
- "peerDependenciesMeta": {
- "react-dom": {
- "optional": true
- },
- "react-native": {
- "optional": true
- }
- }
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
- "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
- "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.10",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
- "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
- "dependencies": {
- "is-core-module": "^2.16.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true,
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-push-apply": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
- "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-regex-test": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
- "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-regex": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/scheduler": {
- "version": "0.23.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
- "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- },
- "node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-proto": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
- "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "dev": true,
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stable-hash": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
- "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
- "dev": true
- },
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/string-width/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/string-width/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/string.prototype.includes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
- "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/string.prototype.matchall": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
- "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "regexp.prototype.flags": "^1.5.3",
- "set-function-name": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.repeat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
- "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
- "dev": true,
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
- "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
- "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/styled-jsx": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
- "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
- "dependencies": {
- "client-only": "0.0.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/sucrase": {
- "version": "3.35.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
- "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "glob": "^10.3.10",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tailwind-merge": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz",
- "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/dcastil"
- }
- },
- "node_modules/tailwindcss": {
- "version": "3.4.17",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
- "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "arg": "^5.0.2",
- "chokidar": "^3.6.0",
- "didyoumean": "^1.2.2",
- "dlv": "^1.1.3",
- "fast-glob": "^3.3.2",
- "glob-parent": "^6.0.2",
- "is-glob": "^4.0.3",
- "jiti": "^1.21.6",
- "lilconfig": "^3.1.3",
- "micromatch": "^4.0.8",
- "normalize-path": "^3.0.0",
- "object-hash": "^3.0.0",
- "picocolors": "^1.1.1",
- "postcss": "^8.4.47",
- "postcss-import": "^15.1.0",
- "postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.2",
- "postcss-nested": "^6.2.0",
- "postcss-selector-parser": "^6.1.2",
- "resolve": "^1.22.8",
- "sucrase": "^3.35.0"
- },
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/tailwindcss-animate": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
- "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
- "peerDependencies": {
- "tailwindcss": ">=3.0.0 || insiders"
- }
- },
- "node_modules/tailwindcss/node_modules/postcss-load-config": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
- "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "lilconfig": "^3.0.0",
- "yaml": "^2.3.4"
- },
- "engines": {
- "node": ">= 14"
- },
- "peerDependencies": {
- "postcss": ">=8.0.9",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "node_modules/thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dependencies": {
- "any-promise": "^1.0.0"
- }
- },
- "node_modules/thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
- "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
- "dev": true,
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.4.4",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
- "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
- "dev": true,
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
- "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
- "dev": true,
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
- }
- },
- "node_modules/ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
- },
- "node_modules/tsconfig-paths": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
- "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
- "dev": true,
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
- "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
- "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "dev": true,
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "dev": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
- "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
- "dev": true
- },
- "node_modules/unrs-resolver": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.2.tgz",
- "integrity": "sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "napi-postinstall": "^0.2.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/JounQin"
- },
- "optionalDependencies": {
- "@unrs/resolver-binding-darwin-arm64": "1.7.2",
- "@unrs/resolver-binding-darwin-x64": "1.7.2",
- "@unrs/resolver-binding-freebsd-x64": "1.7.2",
- "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.2",
- "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.2",
- "@unrs/resolver-binding-linux-arm64-gnu": "1.7.2",
- "@unrs/resolver-binding-linux-arm64-musl": "1.7.2",
- "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.2",
- "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.2",
- "@unrs/resolver-binding-linux-riscv64-musl": "1.7.2",
- "@unrs/resolver-binding-linux-s390x-gnu": "1.7.2",
- "@unrs/resolver-binding-linux-x64-gnu": "1.7.2",
- "@unrs/resolver-binding-linux-x64-musl": "1.7.2",
- "@unrs/resolver-binding-wasm32-wasi": "1.7.2",
- "@unrs/resolver-binding-win32-arm64-msvc": "1.7.2",
- "@unrs/resolver-binding-win32-ia32-msvc": "1.7.2",
- "@unrs/resolver-binding-win32-x64-msvc": "1.7.2"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
- "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/use-callback-ref": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
- "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
- "dependencies": {
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/use-sidecar": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
- "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
- "dependencies": {
- "detect-node-es": "^1.1.0",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
- "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
- "dev": true,
- "dependencies": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.1",
- "is-number-object": "^1.1.1",
- "is-string": "^1.1.1",
- "is-symbol": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dev": true,
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-collection": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
- "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dev": true,
- "dependencies": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
- "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
- "dev": true,
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "for-each": "^0.3.5",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/yaml": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz",
- "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/examples/storytelling-chatbot/client/package.json b/examples/storytelling-chatbot/client/package.json
deleted file mode 100644
index 4b34d1059..000000000
--- a/examples/storytelling-chatbot/client/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "client",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "lint": "next lint"
- },
- "dependencies": {
- "@daily-co/daily-js": "^0.62.0",
- "@daily-co/daily-react": "^0.18.0",
- "@radix-ui/react-select": "^2.1.2",
- "@radix-ui/react-slot": "^1.0.2",
- "@tabler/icons-react": "^3.19.0",
- "class-variance-authority": "^0.7.0",
- "clsx": "^2.1.1",
- "framer-motion": "^11.9.0",
- "next": "^14.2.25",
- "react": "^18.3.1",
- "react-dom": "^18.3.1",
- "recoil": "^0.7.7",
- "tailwind-merge": "^2.5.2",
- "tailwindcss-animate": "^1.0.7"
- },
- "devDependencies": {
- "@types/node": "^20.16.10",
- "@types/react": "^18.3.11",
- "@types/react-dom": "^18.3.0",
- "autoprefixer": "^10.4.20",
- "eslint": "^8.57.1",
- "eslint-config-next": "14.1.4",
- "postcss": "^8.4.47",
- "tailwindcss": "^3.4.13",
- "typescript": "^5.6.2"
- }
-}
diff --git a/examples/storytelling-chatbot/client/postcss.config.js b/examples/storytelling-chatbot/client/postcss.config.js
deleted file mode 100644
index 12a703d90..000000000
--- a/examples/storytelling-chatbot/client/postcss.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-};
diff --git a/examples/storytelling-chatbot/client/public/alpha-mask.gif b/examples/storytelling-chatbot/client/public/alpha-mask.gif
deleted file mode 100644
index 6e97616bb..000000000
Binary files a/examples/storytelling-chatbot/client/public/alpha-mask.gif and /dev/null differ
diff --git a/examples/storytelling-chatbot/client/public/bg.jpg b/examples/storytelling-chatbot/client/public/bg.jpg
deleted file mode 100644
index fd4477b19..000000000
Binary files a/examples/storytelling-chatbot/client/public/bg.jpg and /dev/null differ
diff --git a/examples/storytelling-chatbot/client/tailwind.config.ts b/examples/storytelling-chatbot/client/tailwind.config.ts
deleted file mode 100644
index 338092dbb..000000000
--- a/examples/storytelling-chatbot/client/tailwind.config.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import type { Config } from "tailwindcss";
-
-import { fontFamily } from "tailwindcss/defaultTheme";
-
-const config = {
- darkMode: ["class"],
- content: [
- "./pages/**/*.{ts,tsx}",
- "./components/**/*.{ts,tsx}",
- "./app/**/*.{ts,tsx}",
- "./src/**/*.{ts,tsx}",
- ],
- prefix: "",
- theme: {
- container: {
- center: true,
- padding: "2rem",
- screens: {
- "2xl": "1400px",
- },
- },
- extend: {
- fontFamily: {
- sans: ["var(--font-sans)", ...fontFamily.sans],
- mono: ["var(--font-mono)", ...fontFamily.mono],
- },
- colors: {
- border: "hsl(var(--border))",
- input: "hsl(var(--input))",
- ring: "hsl(var(--ring))",
- background: "hsl(var(--background))",
- foreground: "hsl(var(--foreground))",
- primary: {
- DEFAULT: "hsl(var(--primary))",
- foreground: "hsl(var(--primary-foreground))",
- },
- secondary: {
- DEFAULT: "hsl(var(--secondary))",
- foreground: "hsl(var(--secondary-foreground))",
- },
- destructive: {
- DEFAULT: "hsl(var(--destructive))",
- foreground: "hsl(var(--destructive-foreground))",
- },
- muted: {
- DEFAULT: "hsl(var(--muted))",
- foreground: "hsl(var(--muted-foreground))",
- },
- accent: {
- DEFAULT: "hsl(var(--accent))",
- foreground: "hsl(var(--accent-foreground))",
- },
- popover: {
- DEFAULT: "hsl(var(--popover))",
- foreground: "hsl(var(--popover-foreground))",
- },
- card: {
- DEFAULT: "hsl(var(--card))",
- foreground: "hsl(var(--card-foreground))",
- },
- },
- borderRadius: {
- lg: "var(--radius)",
- md: "calc(var(--radius) - 2px)",
- sm: "calc(var(--radius) - 4px)",
- },
- keyframes: {
- "accordion-down": {
- from: { height: "0" },
- to: { height: "var(--radix-accordion-content-height)" },
- },
- "accordion-up": {
- from: { height: "var(--radix-accordion-content-height)" },
- to: { height: "0" },
- },
- },
- animation: {
- "accordion-down": "accordion-down 0.2s ease-out",
- "accordion-up": "accordion-up 0.2s ease-out",
- },
- },
- },
- plugins: [require("tailwindcss-animate")],
-} satisfies Config;
-
-export default config;
diff --git a/examples/storytelling-chatbot/client/tsconfig.json b/examples/storytelling-chatbot/client/tsconfig.json
deleted file mode 100644
index c672fee60..000000000
--- a/examples/storytelling-chatbot/client/tsconfig.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "compilerOptions": {
- "lib": [
- "dom",
- "dom.iterable",
- "esnext"
- ],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "plugins": [
- {
- "name": "next"
- }
- ],
- "paths": {
- "@/*": [
- "./*"
- ]
- }
- },
- "include": [
- "next-env.d.ts",
- "**/*.ts",
- "**/*.tsx",
- ".next/types/**/*.ts",
- "build/types/**/*.ts"
- ],
- "exclude": [
- "node_modules"
- ]
-}
diff --git a/examples/storytelling-chatbot/image.png b/examples/storytelling-chatbot/image.png
deleted file mode 100644
index 39a6d8620..000000000
Binary files a/examples/storytelling-chatbot/image.png and /dev/null differ
diff --git a/examples/storytelling-chatbot/server/.dockerignore b/examples/storytelling-chatbot/server/.dockerignore
deleted file mode 100644
index 4c6d90950..000000000
--- a/examples/storytelling-chatbot/server/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-client/node_modules
-client/out
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/server/Dockerfile b/examples/storytelling-chatbot/server/Dockerfile
deleted file mode 100644
index 46da11124..000000000
--- a/examples/storytelling-chatbot/server/Dockerfile
+++ /dev/null
@@ -1,54 +0,0 @@
-FROM python:3.11-slim-bookworm
-
-ARG DEBIAN_FRONTEND=noninteractive
-ARG USE_PERSISTENT_DATA
-ENV PYTHONUNBUFFERED=1
-ENV NODE_MAJOR=20
-
-# Expose FastAPI port
-ENV FAST_API_PORT=7860
-EXPOSE 7860
-
-# Install system dependencies
-RUN apt-get update && apt-get install --no-install-recommends -y \
- build-essential \
- git \
- ffmpeg \
- google-perftools \
- ca-certificates curl gnupg \
- && apt-get clean && rm -rf /var/lib/apt/lists/*
-
-# Install Node.js
-RUN mkdir -p /etc/apt/keyrings
-RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
-RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list > /dev/null
-RUN apt-get update && apt-get install nodejs -y
-
-# Set up a new user named "user" with user ID 1000
-RUN useradd -m -u 1000 user
-
-# Set home to the user's home directory
-ENV HOME=/home/user \
- PATH=/home/user/.local/bin:$PATH \
- PYTHONPATH=$HOME/app \
- PYTHONUNBUFFERED=1
-
-# Switch to the "user" user
-USER user
-
-# Set the working directory to the user's home directory
-WORKDIR $HOME/app
-
-# Install Python dependencies
-COPY ./requirements.txt requirements.txt
-RUN pip3 install --no-cache-dir --upgrade -r requirements.txt
-
-# Copy everything else
-COPY --chown=user ./server/ server/
-
-# Copy client app and build
-COPY --chown=user ./client/ client/
-RUN cd client && npm install && npm run build
-
-# Start the FastAPI server
-CMD python3 server/bot_runner.py --port ${FAST_API_PORT}
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/server/assets/book1.png b/examples/storytelling-chatbot/server/assets/book1.png
deleted file mode 100644
index 9c1b11329..000000000
Binary files a/examples/storytelling-chatbot/server/assets/book1.png and /dev/null differ
diff --git a/examples/storytelling-chatbot/server/assets/book2.png b/examples/storytelling-chatbot/server/assets/book2.png
deleted file mode 100644
index 173947446..000000000
Binary files a/examples/storytelling-chatbot/server/assets/book2.png and /dev/null differ
diff --git a/examples/storytelling-chatbot/server/assets/ding.wav b/examples/storytelling-chatbot/server/assets/ding.wav
deleted file mode 100644
index 37ae67df2..000000000
Binary files a/examples/storytelling-chatbot/server/assets/ding.wav and /dev/null differ
diff --git a/examples/storytelling-chatbot/server/assets/listening.wav b/examples/storytelling-chatbot/server/assets/listening.wav
deleted file mode 100644
index dd384d692..000000000
Binary files a/examples/storytelling-chatbot/server/assets/listening.wav and /dev/null differ
diff --git a/examples/storytelling-chatbot/server/assets/talking.wav b/examples/storytelling-chatbot/server/assets/talking.wav
deleted file mode 100644
index 4a2cd2465..000000000
Binary files a/examples/storytelling-chatbot/server/assets/talking.wav and /dev/null differ
diff --git a/examples/storytelling-chatbot/server/bot.py b/examples/storytelling-chatbot/server/bot.py
deleted file mode 100644
index 999ed8afc..000000000
--- a/examples/storytelling-chatbot/server/bot.py
+++ /dev/null
@@ -1,148 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import os
-import sys
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from processors import StoryImageProcessor, StoryProcessor
-from prompts import CUE_USER_TURN, LLM_BASE_PROMPT
-from utils.helpers import load_images, load_sounds
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import EndFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
-from pipecat.services.google.image import GoogleImageGenService
-from pipecat.services.google.llm import GoogleLLMService
-from pipecat.transports.services.daily import (
- DailyParams,
- DailyTransport,
- DailyTransportMessageFrame,
-)
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-sounds = load_sounds(["listening.wav"])
-images = load_images(["book1.png", "book2.png"])
-
-
-async def main(room_url, token=None):
- async with aiohttp.ClientSession() as session:
- # -------------- Transport --------------- #
-
- transport = DailyTransport(
- room_url,
- token,
- "Storytelling Bot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- video_out_enabled=True,
- video_out_width=1024,
- video_out_height=1024,
- transcription_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- logger.debug("Transport created for room:" + room_url)
-
- # -------------- Services --------------- #
-
- llm_service = GoogleLLMService(api_key=os.getenv("GOOGLE_API_KEY"))
-
- tts_service = ElevenLabsTTSService(
- api_key=os.getenv("ELEVENLABS_API_KEY"), voice_id=os.getenv("ELEVENLABS_VOICE_ID")
- )
-
- image_gen = GoogleImageGenService(api_key=os.getenv("GOOGLE_API_KEY"))
-
- # --------------- Setup ----------------- #
-
- message_history = [LLM_BASE_PROMPT]
- story_pages = []
-
- # We need aggregators to keep track of user and LLM responses
- context = OpenAILLMContext(message_history)
- context_aggregator = llm_service.create_context_aggregator(context)
-
- # -------------- Processors ------------- #
-
- story_processor = StoryProcessor(message_history, story_pages)
- image_processor = StoryImageProcessor(image_gen)
-
- # -------------- Story Loop ------------- #
-
- runner = PipelineRunner()
-
- logger.debug("Waiting for participant...")
- main_pipeline = Pipeline(
- [
- transport.input(),
- context_aggregator.user(),
- llm_service,
- story_processor,
- image_processor,
- tts_service,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- main_task = PipelineTask(
- main_pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.debug("Participant joined, storytime commence!")
- await transport.capture_participant_transcription(participant["id"])
- await main_task.queue_frames(
- [
- images["book1"],
- context_aggregator.user().get_context_frame(),
- DailyTransportMessageFrame(CUE_USER_TURN),
- # sounds["listening"],
- images["book2"],
- ]
- )
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- await main_task.cancel()
-
- @transport.event_handler("on_call_state_updated")
- async def on_call_state_updated(transport, state):
- if state == "left":
- # Here we don't want to cancel, we just want to finish sending
- # whatever is queued, so we use an EndFrame().
- await main_task.queue_frame(EndFrame())
-
- await runner.run(main_task)
-
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="Daily Storyteller Bot")
- parser.add_argument("-u", type=str, help="Room URL")
- parser.add_argument("-t", type=str, help="Token")
- config = parser.parse_args()
-
- asyncio.run(main(config.u, config.t))
diff --git a/examples/storytelling-chatbot/server/bot_runner.py b/examples/storytelling-chatbot/server/bot_runner.py
deleted file mode 100644
index f09b12fac..000000000
--- a/examples/storytelling-chatbot/server/bot_runner.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-from pathlib import Path
-from typing import Optional
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import FileResponse, JSONResponse
-from fastapi.staticfiles import StaticFiles
-
-from pipecat.transports.services.helpers.daily_rest import (
- DailyRESTHelper,
- DailyRoomObject,
- DailyRoomParams,
- DailyRoomProperties,
-)
-
-load_dotenv(override=True)
-
-# ------------ Fast API Config ------------ #
-
-MAX_SESSION_TIME = 5 * 60 # 5 minutes
-
-daily_helpers = {}
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
-
-
-app = FastAPI(lifespan=lifespan)
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-# Mount the static directory
-STATIC_DIR = "client/out"
-
-
-# ------------ Fast API Routes ------------ #
-
-app.mount("/static", StaticFiles(directory=STATIC_DIR, html=True), name="static")
-
-
-@app.post("/")
-async def start_bot(request: Request) -> JSONResponse:
- if os.getenv("ENV", "dev") == "production":
- # Only allow requests from the specified domain
- host_header = request.headers.get("host")
- allowed_domains = ["storytelling-chatbot.fly.dev", "www.storytelling-chatbot.fly.dev"]
- # Check if the Host header matches the allowed domain
- if host_header not in allowed_domains:
- raise HTTPException(status_code=403, detail="Access denied")
-
- try:
- data = await request.json()
- # Is this a webhook creation request?
- if "test" in data:
- return JSONResponse({"test": True})
- except Exception as e:
- pass
-
- # Use specified room URL, or create a new one if not specified
- room_url = os.getenv("DAILY_SAMPLE_ROOM_URL", "")
-
- if not room_url:
- params = DailyRoomParams(properties=DailyRoomProperties())
- try:
- room: DailyRoomObject = await daily_helpers["rest"].create_room(params=params)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Unable to provision room {e}")
- else:
- # Check passed room URL exists, we should assume that it already has a sip set up
- try:
- room: DailyRoomObject = await daily_helpers["rest"].get_room_from_url(room_url)
- except Exception:
- raise HTTPException(status_code=500, detail=f"Room not found: {room_url}")
-
- # Give the agent a token to join the session
- token = await daily_helpers["rest"].get_token(room.url, MAX_SESSION_TIME)
-
- if not room or not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room_url}")
-
- # Launch a new VM, or run as a shell process (not recommended)
- if os.getenv("RUN_AS_VM", False):
- try:
- await virtualize_bot(room.url, token)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to spawn VM: {e}")
- else:
- try:
- subprocess.Popen(
- [f"python -m bot -u {room.url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- # Grab a token for the user to join with
- user_token = await daily_helpers["rest"].get_token(room.url, MAX_SESSION_TIME)
-
- return JSONResponse(
- {
- "room_url": room.url,
- "token": user_token,
- }
- )
-
-
-@app.get("/{path_name:path}", response_class=FileResponse)
-async def catch_all(path_name: Optional[str] = ""):
- if path_name == "":
- return FileResponse(f"{STATIC_DIR}/index.html")
-
- file_path = Path(STATIC_DIR) / (path_name or "")
-
- if file_path.is_file():
- return file_path
-
- html_file_path = file_path.with_suffix(".html")
- if html_file_path.is_file():
- return FileResponse(html_file_path)
-
- raise HTTPException(status_code=450, detail="Incorrect API call")
-
-
-# ------------ Virtualization ------------ #
-
-
-async def virtualize_bot(room_url: str, token: str):
- """This is an example of how to virtualize the bot using Fly.io
- You can adapt this method to use whichever cloud provider you prefer.
- """
- FLY_API_HOST = os.getenv("FLY_API_HOST", "https://api.machines.dev/v1")
- FLY_APP_NAME = os.getenv("FLY_APP_NAME", "storytelling-chatbot")
- FLY_API_KEY = os.getenv("FLY_API_KEY", "")
- FLY_HEADERS = {"Authorization": f"Bearer {FLY_API_KEY}", "Content-Type": "application/json"}
-
- async with aiohttp.ClientSession() as session:
- # Use the same image as the bot runner
- async with session.get(
- f"{FLY_API_HOST}/apps/{FLY_APP_NAME}/machines", headers=FLY_HEADERS
- ) as r:
- if r.status != 200:
- text = await r.text()
- raise Exception(f"Unable to get machine info from Fly: {text}")
-
- data = await r.json()
- image = data[0]["config"]["image"]
-
- # Machine configuration
- cmd = f"python server/bot.py -u {room_url} -t {token}"
- cmd = cmd.split()
- worker_props = {
- "config": {
- "image": image,
- "auto_destroy": True,
- "init": {"cmd": cmd},
- "restart": {"policy": "no"},
- "guest": {"cpu_kind": "shared", "cpus": 1, "memory_mb": 512},
- },
- }
-
- # Spawn a new machine instance
- async with session.post(
- f"{FLY_API_HOST}/apps/{FLY_APP_NAME}/machines", headers=FLY_HEADERS, json=worker_props
- ) as r:
- if r.status != 200:
- text = await r.text()
- raise Exception(f"Problem starting a bot worker: {text}")
-
- data = await r.json()
- # Wait for the machine to enter the started state
- vm_id = data["id"]
-
- async with session.get(
- f"{FLY_API_HOST}/apps/{FLY_APP_NAME}/machines/{vm_id}/wait?state=started",
- headers=FLY_HEADERS,
- ) as r:
- if r.status != 200:
- text = await r.text()
- raise Exception(f"Bot was unable to enter started state: {text}")
-
- print(f"Machine joined room: {room_url}")
-
-
-# ------------ Main ------------ #
-
-if __name__ == "__main__":
- # Check environment variables
- required_env_vars = [
- "GOOGLE_API_KEY",
- "DAILY_API_KEY",
- "ELEVENLABS_VOICE_ID",
- "ELEVENLABS_API_KEY",
- ]
- for env_var in required_env_vars:
- if env_var not in os.environ:
- raise Exception(f"Missing environment variable: {env_var}.")
-
- import uvicorn
-
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Storyteller FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- uvicorn.run("bot_runner:app", host=config.host, port=config.port, reload=config.reload)
diff --git a/examples/storytelling-chatbot/server/env.example b/examples/storytelling-chatbot/server/env.example
deleted file mode 100644
index 513715897..000000000
--- a/examples/storytelling-chatbot/server/env.example
+++ /dev/null
@@ -1,6 +0,0 @@
-DAILY_API_KEY=
-DAILY_SAMPLE_ROOM_URL=
-ELEVENLABS_API_KEY=
-ELEVENLABS_VOICE_ID=
-GOOGLE_API_KEY=
-ENV=dev
diff --git a/examples/storytelling-chatbot/server/processors.py b/examples/storytelling-chatbot/server/processors.py
deleted file mode 100644
index b35b4e9ce..000000000
--- a/examples/storytelling-chatbot/server/processors.py
+++ /dev/null
@@ -1,200 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-import re
-
-import google.ai.generativelanguage as glm
-from async_timeout import timeout
-from loguru import logger
-from prompts import (
- CUE_ASSISTANT_TURN,
- CUE_USER_TURN,
- FIRST_IMAGE_PROMPT,
- IMAGE_GEN_PROMPT,
- NEXT_IMAGE_PROMPT,
-)
-from utils.helpers import load_sounds
-
-from pipecat.frames.frames import (
- Frame,
- LLMFullResponseEndFrame,
- TextFrame,
- UserStoppedSpeakingFrame,
-)
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.services.google.llm import GoogleLLMService
-from pipecat.transports.services.daily import DailyTransportMessageFrame
-
-sounds = load_sounds(["talking.wav", "listening.wav", "ding.wav"])
-
-# -------------- Frame Types ------------- #
-
-
-class StoryPageFrame(TextFrame):
- # Frame for each sentence in the story before a [break]
- pass
-
-
-class StoryImageFrame(TextFrame):
- # Frame for trigger image generation
- pass
-
-
-class StoryPromptFrame(TextFrame):
- # Frame for prompting the user for input
- pass
-
-
-# ------------ Frame Processors ----------- #
-
-
-class StoryImageProcessor(FrameProcessor):
- """Processor for image prompt frames that will be sent to the FAL service.
-
- This processor is responsible for consuming frames of type `StoryImageFrame`.
- It processes them by passing it to the FAL service.
- The processed frames are then yielded back.
-
- Attributes:
- _image_gen_service: The FAL service, generates the images (fast fast!).
- """
-
- def __init__(self, image_gen_service):
- super().__init__()
- self._image_gen_service = image_gen_service
- # Create a new LLM service to use a different system prompt, etc
- self._llm_service = GoogleLLMService(api_key=os.getenv("GOOGLE_API_KEY"))
-
- self.pages = []
- self.image_descriptions = []
-
- def can_generate_metrics(self) -> bool:
- return True
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, StoryPageFrame):
- # Special syntax for the first page
- if self.pages == []:
- prompt = FIRST_IMAGE_PROMPT % frame.text
- else:
- prompt = NEXT_IMAGE_PROMPT % (
- " ".join(self.pages),
- "; ".join(self.image_descriptions),
- frame.text,
- )
-
- await self.start_ttfb_metrics()
- # TODO: This is coupled to google implementation now
- txt = glm.Content(role="user", parts=[glm.Part(text=prompt)])
- llm_response = await self._llm_service._client.generate_content_async(
- contents=[txt], stream=False
- )
- image_description = llm_response.text
- self.pages.append(frame.text)
- self.image_descriptions.append(image_description)
- try:
- async with timeout(15):
- async for i in self._image_gen_service.run_image_gen(
- IMAGE_GEN_PROMPT % image_description
- ):
- await self.push_frame(i)
- except TimeoutError:
- logger.debug("Image gen timeout")
- pass
- await self.stop_ttfb_metrics()
- # Push the StoryPageFrame so it gets TTS
- await self.push_frame(frame)
- else:
- await self.push_frame(frame)
-
-
-class StoryProcessor(FrameProcessor):
- """Primary frame processor. It takes the frames generated by the LLM
- and processes them into image prompts and story pages (sentences).
- For a clearer picture of how this works, reference prompts.py
-
- Attributes:
- _messages (list): A list of llm messages.
- _text (str): A buffer to store the text from text frames.
- _story (list): A list to store the story sentences, or 'pages'.
-
- Methods:
- process_frame: Processes a frame and removes any [break] or [image] tokens.
- """
-
- def __init__(self, messages, story):
- super().__init__()
- self._messages = messages
- self._text = ""
- self._story = story
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if isinstance(frame, UserStoppedSpeakingFrame):
- # Send an app message to the UI
- await self.push_frame(DailyTransportMessageFrame(CUE_ASSISTANT_TURN))
- await self.push_frame(sounds["talking"])
-
- elif isinstance(frame, TextFrame):
- # Add new text to the buffer
- # (character replace hack to fix TTS sequencing)
- self._text += frame.text.replace(";", "โ")
- # Process any complete patterns in the order they appear
- await self.process_text_content()
-
- # End of a full LLM response
- # Driven by the prompt, the LLM should have asked the user for input
- elif isinstance(frame, LLMFullResponseEndFrame):
- # We use a different frame type, as to avoid image generation ingest
- await self.push_frame(StoryPromptFrame(self._text))
- self._text = ""
- await self.push_frame(frame)
- # Send an app message to the UI
- await self.push_frame(DailyTransportMessageFrame(CUE_USER_TURN))
- await self.push_frame(sounds["listening"])
-
- # Anything that is not a TextFrame pass through
- else:
- await self.push_frame(frame)
-
- async def process_text_content(self):
- """Process text content in order of appearance, handling both image prompts and story breaks."""
- while True:
- # Find the first occurrence of each pattern
- image_match = re.search(r"<(.*?)>", self._text)
- break_match = re.search(r"\[[bB]reak\]", self._text)
-
- # If neither pattern is found, we're done processing
- if not image_match and not break_match:
- break
-
- # Find which pattern comes first in the text
- image_pos = image_match.start() if image_match else float("inf")
- break_pos = break_match.start() if break_match else float("inf")
-
- if image_pos < break_pos:
- # Process image prompt first
- image_prompt = image_match.group(1)
- # Remove the image prompt from the text
- self._text = self._text[: image_match.start()] + self._text[image_match.end() :]
- await self.push_frame(StoryImageFrame(image_prompt))
- else:
- # Process story break first
- parts = re.split(r"\[[bB]reak\]", self._text, flags=re.IGNORECASE, maxsplit=1)
- before_break = parts[0].replace("\n", " ").strip()
-
- if len(before_break) > 2:
- self._story.append(before_break)
- await self.push_frame(StoryPageFrame(before_break))
- # await self.push_frame(sounds["ding"])
- await self.push_frame(DailyTransportMessageFrame(CUE_ASSISTANT_TURN))
-
- # Keep the remainder (if any) in the buffer
- self._text = parts[1].strip() if len(parts) > 1 else ""
diff --git a/examples/storytelling-chatbot/server/prompts.py b/examples/storytelling-chatbot/server/prompts.py
deleted file mode 100644
index f8323f6a6..000000000
--- a/examples/storytelling-chatbot/server/prompts.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-LLM_BASE_PROMPT = {
- "role": "system",
- "content": """You are a creative storyteller who loves tell whimsical, fantastical stories.
- Your goal is to craft an engaging and fun story.
- Keep all responses short and no more than a few sentences.
- Start by asking the user what kind of story they'd like to hear. Don't provide any examples.
- After they've answered the question, start telling the story. Include three story sentences in your response. Add [break] after each sentence of the story.
-
- EXAMPLE OUTPUT FORMAT:
- story sentence 1 [break]
- story sentence 2 [break]
- story sentence 3 [break]
- How would you like the story to continue?
- END OF EXAMPLE OUTPUT
-
- Generate three story sentences, then ask what should happen next and wait for my input. You can propose an idea for how the story should proceed, but make sure to tell me I can suggest whatever I want.
- Please ensure your responses are less than 5 sentences long.
- Please refrain from using any explicit language or content. Do not tell scary stories.
- Once you've started telling the story, EVERY RESPONSE should follow the story sentence output format. It is VERY IMPORTANT that you continue to include [break] between story sentences. DO NOT RESPOND without story sentences and break tags.""",
-}
-
-
-IMAGE_GEN_PROMPT = "an illustration of %s. colorful, whimsical, painterly, concept art."
-
-CUE_USER_TURN = {"cue": "user_turn"}
-CUE_ASSISTANT_TURN = {"cue": "assistant_turn"}
-
-
-""" Start each sentence with an image prompt, wrapped in triangle braces, that I can use to generate an illustration representing the upcoming scene.
- Image prompts should always be wrapped in triangle braces, like this: .
- You should provide as much descriptive detail in your image prompt as you can to help recreate the current scene depicted by the sentence.
- For any recurring characters, you should provide a description of them in the image prompt each time, for example: .
- Please do not include any character names in the image prompts, just their descriptions.
- Image prompts should focus on key visual attributes of all characters each time, for example .
- Please use the following structure for your image prompts: characters, setting, action, and mood.
- Image prompts should be less than 150-200 characters and start in lowercase."""
-
-FIRST_IMAGE_PROMPT = """You are creating a prompt to generate an image for a child's story book.
-
-You should provide as much descriptive detail in your image prompt as you can to help recreate the current scene depicted by the sentence.
-For any recurring characters, you should provide a description of them in the image prompt each time, for example: .
-Please do not include any character names in the image prompts, just their descriptions.
-Image prompts should focus on key visual attributes of all characters each time, for example .
-Please use the following structure for your image prompts: characters, setting, action, and mood.
-Image prompts should be less than 150-200 characters and start in lowercase.
-
-
-Here's the first page of the story:
-%s
-"""
-
-NEXT_IMAGE_PROMPT = """You are creating a prompt to generate an image for a child's story book.
-
-Here is the text of the story so far:
-%s
-
-Here are the previous image prompts:
-%s
-
-You should provide as much descriptive detail in your image prompt as you can to help recreate the current scene depicted by the sentence.
-For any recurring characters, you should try to use the same description of them in the image prompt each time.
-Please do not include any character names in the image prompts, just their descriptions.
-Image prompts should focus on key visual attributes of all characters each time, for example .
-Please use the following structure for your image prompts: characters, setting, action, and mood.
-Image prompts should be less than 150-200 characters and start in lowercase.
-Here's the next page of the story:
-%s
-"""
diff --git a/examples/storytelling-chatbot/server/requirements.txt b/examples/storytelling-chatbot/server/requirements.txt
deleted file mode 100644
index 354e169f0..000000000
--- a/examples/storytelling-chatbot/server/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-async_timeout
-fastapi
-uvicorn
-python-dotenv
-pipecat-ai[daily,silero,openai,cartesia,google]
\ No newline at end of file
diff --git a/examples/storytelling-chatbot/server/utils/helpers.py b/examples/storytelling-chatbot/server/utils/helpers.py
deleted file mode 100644
index ac3a38ede..000000000
--- a/examples/storytelling-chatbot/server/utils/helpers.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import os
-import wave
-
-from PIL import Image
-
-from pipecat.frames.frames import OutputAudioRawFrame, OutputImageRawFrame
-
-script_dir = os.path.dirname(__file__)
-
-
-def load_images(image_files):
- images = {}
- for file in image_files:
- # Build the full path to the image file
- full_path = os.path.join(script_dir, "../assets", file)
- # Get the filename without the extension to use as the dictionary key
- filename = os.path.splitext(os.path.basename(full_path))[0]
- # Open the image and convert it to bytes
- with Image.open(full_path) as img:
- images[filename] = OutputImageRawFrame(
- image=img.tobytes(), size=img.size, format=img.format
- )
- return images
-
-
-def load_sounds(sound_files):
- sounds = {}
-
- for file in sound_files:
- # Build the full path to the sound file
- full_path = os.path.join(script_dir, "../assets", file)
- # Get the filename without the extension to use as the dictionary key
- filename = os.path.splitext(os.path.basename(full_path))[0]
- # Open the sound and convert it to bytes
- with wave.open(full_path) as audio_file:
- sounds[filename] = OutputAudioRawFrame(
- audio=audio_file.readframes(-1),
- sample_rate=audio_file.getframerate(),
- num_channels=audio_file.getnchannels(),
- )
-
- return sounds
diff --git a/examples/studypal/README.md b/examples/studypal/README.md
deleted file mode 100644
index b8f3c48e4..000000000
--- a/examples/studypal/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# studypal
-
-### Have a conversation about any article on the web
-
-studypal is a fast conversational AI built using [Daily](https://www.daily.co/) for real-time media transport and [Cartesia](https://cartesia.ai) for text-to-speech. Everything is orchestrated together (VAD -> STT -> LLM -> TTS) using [Pipecat](https://www.pipecat.ai/).
-
-## Setup
-
-1. Clone the repository
-2. Copy `env.example` to a `.env` file and add API keys
-3. Install the required packages: `pip install -r requirements.txt`
-4. Run `python3 studypal.py` from your command line.
-5. While the app is running, go to the `https://.daily.co/` set in `DAILY_SAMPLE_ROOM_URL` and talk to studypal!
diff --git a/examples/studypal/env.example b/examples/studypal/env.example
deleted file mode 100644
index 6acef284b..000000000
--- a/examples/studypal/env.example
+++ /dev/null
@@ -1,5 +0,0 @@
-DAILY_SAMPLE_ROOM_URL= # Follow instructions here and put your https://YOURDOMAIN.daily.co/YOURROOM (Instructions: https://docs.pipecat.ai/getting-started/installation)
-DAILY_API_KEY= # Create here: https://dashboard.daily.co/developers
-OPENAI_API_KEY= # Create here: https://platform.openai.com/docs/overview
-CARTESIA_API_KEY= # Create here: https://play.cartesia.ai/console
-CARTESIA_VOICE_ID= # Find here: https://play.cartesia.ai/
\ No newline at end of file
diff --git a/examples/studypal/requirements.txt b/examples/studypal/requirements.txt
deleted file mode 100644
index a2e7b803d..000000000
--- a/examples/studypal/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-beautifulsoup4==4.12.3
-pypdf==4.3.1
-tiktoken==0.7.0
-pipecat-ai[daily,cartesia,openai,silero]
-python-dotenv==1.0.1
diff --git a/examples/studypal/runner.py b/examples/studypal/runner.py
deleted file mode 100644
index 04157d549..000000000
--- a/examples/studypal/runner.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-from typing import Optional
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- (url, token, _) = await configure_with_args(aiohttp_session)
- return (url, token)
-
-
-async def configure_with_args(
- aiohttp_session: aiohttp.ClientSession, parser: Optional[argparse.ArgumentParser] = None
-):
- if not parser:
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token, args)
diff --git a/examples/studypal/studypal.py b/examples/studypal/studypal.py
deleted file mode 100644
index c175d50c1..000000000
--- a/examples/studypal/studypal.py
+++ /dev/null
@@ -1,186 +0,0 @@
-import asyncio
-import io
-import os
-import sys
-
-import aiohttp
-import tiktoken
-from bs4 import BeautifulSoup
-from dotenv import load_dotenv
-from loguru import logger
-from pypdf import PdfReader
-from runner import configure
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-# Run this script directly from your command line.
-# This project was adapted from
-# https://github.com/pipecat-ai/pipecat/blob/main/examples/foundational/07d-interruptible-cartesia.py
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-# Count number of tokens used in model and truncate the content
-def truncate_content(content, model_name):
- encoding = tiktoken.encoding_for_model(model_name)
- tokens = encoding.encode(content)
-
- max_tokens = 10000
- if len(tokens) > max_tokens:
- truncated_tokens = tokens[:max_tokens]
- return encoding.decode(truncated_tokens)
- return content
-
-
-# Main function to extract content from url
-
-
-async def get_article_content(url: str, aiohttp_session: aiohttp.ClientSession):
- if "arxiv.org" in url:
- return await get_arxiv_content(url, aiohttp_session)
- else:
- return await get_wikipedia_content(url, aiohttp_session)
-
-
-# Helper function to extract content from Wikipedia url (this is
-# technically agnostic to URL type but will work best with Wikipedia
-# articles)
-
-
-async def get_wikipedia_content(url: str, aiohttp_session: aiohttp.ClientSession):
- async with aiohttp_session.get(url) as response:
- if response.status != 200:
- return "Failed to download Wikipedia article."
-
- text = await response.text()
- soup = BeautifulSoup(text, "html.parser")
-
- content = soup.find("div", {"class": "mw-parser-output"})
-
- if content:
- return content.get_text()
- else:
- return "Failed to extract Wikipedia article content."
-
-
-# Helper function to extract content from arXiv url
-
-
-async def get_arxiv_content(url: str, aiohttp_session: aiohttp.ClientSession):
- if "/abs/" in url:
- url = url.replace("/abs/", "/pdf/")
- if not url.endswith(".pdf"):
- url += ".pdf"
-
- async with aiohttp_session.get(url) as response:
- if response.status != 200:
- return "Failed to download arXiv PDF."
-
- content = await response.read()
- pdf_file = io.BytesIO(content)
- pdf_reader = PdfReader(pdf_file)
- text = ""
- for page in pdf_reader.pages:
- text += page.extract_text()
- return text
-
-
-# This is the main function that handles STT -> LLM -> TTS
-
-
-async def main():
- url = input("Enter the URL of the article you would like to talk about: ")
-
- async with aiohttp.ClientSession() as session:
- article_content = await get_article_content(url, session)
- article_content = truncate_content(article_content, model_name="gpt-4o-mini")
-
- (room_url, token) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- token,
- "studypal",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- transcription_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id=os.getenv("CARTESIA_VOICE_ID", "4d2fd738-3b3d-4368-957a-bb4805275bd9"),
- # British Narration Lady: 4d2fd738-3b3d-4368-957a-bb4805275bd9
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o-mini")
-
- messages = [
- {
- "role": "system",
- "content": f"""You are an AI study partner. You have been given the following article content:
-
-{article_content}
-
-Your task is to help the user understand and learn from this article in 2 sentences. THESE RESPONSES SHOULD BE ONLY MAX 2 SENTENCES. THIS INSTRUCTION IS VERY IMPORTANT. RESPONSES SHOULDN'T BE LONG.
-""",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(),
- context_aggregator.user(),
- llm,
- tts,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_out_sample_rate=44100,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- await transport.capture_participant_transcription(participant["id"])
- messages.append(
- {
- "role": "system",
- "content": "Hello! I'm ready to discuss the article with you. What would you like to learn about?",
- }
- )
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/telnyx-chatbot/.gitignore b/examples/telnyx-chatbot/.gitignore
deleted file mode 100644
index 2bc1403d1..000000000
--- a/examples/telnyx-chatbot/.gitignore
+++ /dev/null
@@ -1,161 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-runpod.toml
diff --git a/examples/telnyx-chatbot/Dockerfile b/examples/telnyx-chatbot/Dockerfile
deleted file mode 100644
index e9cc69b39..000000000
--- a/examples/telnyx-chatbot/Dockerfile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Use an official Python runtime as a parent image
-FROM python:3.10-bullseye
-
-# Set the working directory in the container
-WORKDIR /telnyx-chatbot
-
-# Copy the requirements file into the container
-COPY requirements.txt .
-
-# Install any needed packages specified in requirements.txt
-RUN pip install --no-cache-dir -r requirements.txt
-
-# Copy the current directory contents into the container
-COPY . .
-
-# Expose the desired port
-EXPOSE 8765
-
-# Run the application
-CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8765"]
diff --git a/examples/telnyx-chatbot/README.md b/examples/telnyx-chatbot/README.md
deleted file mode 100644
index 9c934cbf0..000000000
--- a/examples/telnyx-chatbot/README.md
+++ /dev/null
@@ -1,127 +0,0 @@
-# Telnyx Chatbot
-
-This project is a FastAPI-based chatbot that integrates with Telnyx to handle WebSocket connections and provide real-time communication. The project includes endpoints for starting a call and handling WebSocket connections.
-
-## Table of Contents
-
-- [Telnyx Chatbot](#telnyx-chatbot)
- - [Table of Contents](#table-of-contents)
- - [Features](#features)
- - [Requirements](#requirements)
- - [Installation](#installation)
- - [Configure Telnyx TeXML application](#configure-telnyx-texml-application)
- - [Running the Application](#running-the-application)
- - [Using Python (Option 1)](#using-python-option-1)
- - [Using Docker (Option 2)](#using-docker-option-2)
- - [Usage](#usage)
-
-## Features
-
-- **FastAPI**: A modern, fast (high-performance), web framework for building APIs with Python 3.6+.
-- **WebSocket Support**: Real-time communication using WebSockets.
-- **CORS Middleware**: Allowing cross-origin requests for testing.
-- **Dockerized**: Easily deployable using Docker.
-
-## Requirements
-
-- Python 3.10
-- Docker (for containerized deployment)
-- ngrok (for tunneling)
-- Telnyx Account
-
-## Installation
-
-1. **Set up a virtual environment** (optional but recommended):
-
- ```sh
- python -m venv venv
- source venv/bin/activate # On Windows, use `venv\Scripts\activate`
- ```
-
-2. **Install dependencies**:
-
- ```sh
- pip install -r requirements.txt
- ```
-
-3. **Create .env**:
- Copy the example environment file and update with your settings:
-
- ```sh
- cp env.example .env
- ```
-
-4. **Install ngrok**:
- Follow the instructions on the [ngrok website](https://ngrok.com/download) to download and install ngrok.
-
-## Configure Telnyx TeXML application
-
-1. **Start ngrok**:
- In a new terminal, start ngrok to tunnel the local server:
-
- ```sh
- ngrok http 8765
- ```
-
-2. **Purchase a number**
-
- If you haven't already, purchase a number from Telnyx.
-
- - Log in to the Telnyx developer portal: https://portal.telnyx.com/
- - Buy a number: https://portal.telnyx.com/#/numbers/buy-numbers
-
-3. **Update the Telnyx TeXML applications Webhook**:
-
- - Go to your TeXML configuration page: https://portal.telnyx.com/#/call-control/texml
- - Create a new TeXML app, if one doesn't exist already:
- - Add an application name
- - Under Webhooks, select POST as the "Voice Method"
- - Select "Custom URL" under Webhook URL Method
- - Enter your ngrok URL in the "Webhook URL" field (e.g. https://your-name.ngrok.io)
- - Click "Create" to save
- Note: You'll see subsequent pages to set up SIP and Outbound, both are not required, so just skip.
- - Navigate to "Manage Numbers" (https://portal.telnyx.com/#/numbers/my-numbers) and under SIP connection, select the pencil icon to edit and select the TeXML application that you just created.
-
- Now your number is ready to call.
-
-4. **Configure streams.xml**:
- - Copy the template file to create your local version:
- ```sh
- cp templates/streams.xml.template templates/streams.xml
- ```
- - In `templates/streams.xml`, replace `` with your ngrok URL (without `https://`)
- - The final URL should look like: `wss://abc123.ngrok.io/ws`. This needs to be the same URL that you added to your TeXML app above.
- - The encoding (`bidirectionalCodec`) should be `PCMU` or `PCMA` depending on your needs. Based on selected encoding, set the outbound_encoding in `server.py` when the bot is initialized. (No changes are required by default.)
- - The inbound encoding can be controlled from the application configuration for inbound calls and dial/transfer commands for outbound calls.
-
-## Running the Application
-
-Choose one of these two methods to run the application:
-
-### Using Python (Option 1)
-
-**Run the FastAPI application**:
-
-```sh
-# Make sure youโre in the project directory and your virtual environment is activated
-python server.py
-```
-
-### Using Docker (Option 2)
-
-1. **Build the Docker image**:
-
- ```sh
- docker build -t telnyx-chatbot .
- ```
-
-2. **Run the Docker container**:
- ```sh
- docker run -it --rm -p 8765:8765 telnyx-chatbot
- ```
-
-The server will start on port 8765. Keep this running while you test with Telnyx.
-
-## Usage
-
-To start a call, simply make a call to your configured Telnyx phone number. The webhook URL will direct the call to your FastAPI application, which will handle it accordingly.
diff --git a/examples/telnyx-chatbot/bot.py b/examples/telnyx-chatbot/bot.py
deleted file mode 100644
index 790e3a81a..000000000
--- a/examples/telnyx-chatbot/bot.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.serializers.telnyx import TelnyxFrameSerializer
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.network.fastapi_websocket import (
- FastAPIWebsocketParams,
- FastAPIWebsocketTransport,
-)
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-async def run_bot(
- websocket_client,
- stream_id: str,
- call_control_id: str,
- outbound_encoding: str,
- inbound_encoding: str,
-):
- serializer = TelnyxFrameSerializer(
- stream_id=stream_id,
- outbound_encoding=outbound_encoding,
- inbound_encoding=inbound_encoding,
- call_control_id=call_control_id,
- api_key=os.getenv("TELNYX_API_KEY"),
- )
-
- transport = FastAPIWebsocketTransport(
- websocket=websocket_client,
- params=FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- add_wav_header=False,
- vad_analyzer=SileroVADAnalyzer(),
- serializer=serializer,
- ),
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- )
-
- messages = [
- {
- "role": "system",
- "content": "You are a helpful LLM in an audio call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(), # Websocket input from client
- stt, # Speech-To-Text
- context_aggregator.user(),
- llm, # LLM
- tts, # Text-To-Speech
- transport.output(), # Websocket output to client
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_in_sample_rate=8000,
- audio_out_sample_rate=8000,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- # Kick off the conversation.
- messages.append({"role": "system", "content": "Please introduce yourself to the user."})
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False)
-
- await runner.run(task)
diff --git a/examples/telnyx-chatbot/env.example b/examples/telnyx-chatbot/env.example
deleted file mode 100644
index 1da398649..000000000
--- a/examples/telnyx-chatbot/env.example
+++ /dev/null
@@ -1,3 +0,0 @@
-OPENAI_API_KEY=
-DEEPGRAM_API_KEY=
-CARTESIA_API_KEY=
diff --git a/examples/telnyx-chatbot/requirements.txt b/examples/telnyx-chatbot/requirements.txt
deleted file mode 100644
index e103e438d..000000000
--- a/examples/telnyx-chatbot/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-pipecat-ai[openai,silero,deepgram,cartesia]
-fastapi
-uvicorn
-python-dotenv
-loguru
diff --git a/examples/telnyx-chatbot/server.py b/examples/telnyx-chatbot/server.py
deleted file mode 100644
index 23cb9f065..000000000
--- a/examples/telnyx-chatbot/server.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import json
-
-import uvicorn
-from bot import run_bot
-from fastapi import FastAPI, WebSocket
-from fastapi.middleware.cors import CORSMiddleware
-from starlette.responses import HTMLResponse
-
-app = FastAPI()
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"], # Allow all origins for testing
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.post("/")
-async def start_call():
- print("POST TeXML")
- return HTMLResponse(content=open("templates/streams.xml").read(), media_type="application/xml")
-
-
-@app.websocket("/ws")
-async def websocket_endpoint(websocket: WebSocket):
- await websocket.accept()
- start_data = websocket.iter_text()
- await start_data.__anext__()
- call_data = json.loads(await start_data.__anext__())
- print(call_data, flush=True)
- stream_id = call_data["stream_id"]
- call_control_id = call_data["start"]["call_control_id"]
- outbound_encoding = call_data["start"]["media_format"]["encoding"]
- print("WebSocket connection accepted")
- await run_bot(websocket, stream_id, call_control_id, outbound_encoding, "PCMU")
-
-
-if __name__ == "__main__":
- uvicorn.run(app, host="0.0.0.0", port=8765)
diff --git a/examples/telnyx-chatbot/templates/streams.xml.template b/examples/telnyx-chatbot/templates/streams.xml.template
deleted file mode 100644
index 89826ff33..000000000
--- a/examples/telnyx-chatbot/templates/streams.xml.template
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/examples/translation-chatbot/.gitignore b/examples/translation-chatbot/.gitignore
deleted file mode 100644
index 2bc1403d1..000000000
--- a/examples/translation-chatbot/.gitignore
+++ /dev/null
@@ -1,161 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-runpod.toml
diff --git a/examples/translation-chatbot/Dockerfile b/examples/translation-chatbot/Dockerfile
deleted file mode 100644
index 3dff872cf..000000000
--- a/examples/translation-chatbot/Dockerfile
+++ /dev/null
@@ -1,14 +0,0 @@
-FROM python:3.10-bullseye
-
-RUN mkdir /app
-RUN mkdir /app/utils
-COPY *.py /app/
-COPY requirements.txt /app/
-copy utils/* /app/utils/
-
-WORKDIR /app
-RUN pip3 install -r requirements.txt
-
-EXPOSE 7860
-
-CMD ["python3", "server.py"]
\ No newline at end of file
diff --git a/examples/translation-chatbot/README.md b/examples/translation-chatbot/README.md
deleted file mode 100644
index 98be68fc0..000000000
--- a/examples/translation-chatbot/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Translation Chatbot
-
-
-
-This app listens for user speech, then translates that speech to Spanish and speaks the translation back to the user using text-to-speech. It's probably most useful with multiple users talking to each other, along with some manual track subscription management in the Daily call.
-
-See a quick video walkthrough of the code here: https://www.loom.com/share/59fdddf129534dc2be4dde3cc6ebe8de
-
-## Get started
-
-```python
-python3 -m venv venv
-source venv/bin/activate
-pip install -r requirements.txt
-
-cp env.example .env # and add your credentials
-
-```
-
-## Run the server
-
-```bash
-python server.py
-```
-
-Then, visit `http://localhost:7860/` in your browser to start a translatorbot session.
-
-## Build and test the Docker image
-
-```
-docker build -t chatbot .
-docker run --env-file .env -p 7860:7860 chatbot
-```
diff --git a/examples/translation-chatbot/bot.py b/examples/translation-chatbot/bot.py
deleted file mode 100644
index e845b6d07..000000000
--- a/examples/translation-chatbot/bot.py
+++ /dev/null
@@ -1,216 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import asyncio
-import os
-import sys
-from typing import List
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from runner import configure
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- Frame,
- LLMMessagesFrame,
- TranscriptionFrame,
- TranscriptionMessage,
- TranscriptionUpdateFrame,
-)
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.filters.stt_mute_filter import STTMuteConfig, STTMuteFilter, STTMuteStrategy
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.frameworks.rtvi import RTVIObserver, RTVIProcessor
-from pipecat.processors.transcript_processor import TranscriptProcessor
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-"""
-This example looks a bit different than the chatbot example, because it isn't waiting on the user to stop talking to start translating.
-It also isn't saving what the user or bot says into the context object for use in subsequent interactions.
-"""
-
-
-# We need to use a custom service here to yield LLM frames without saving
-# any context
-class TranslationProcessor(FrameProcessor):
- """A processor that translates text frames from a source language to a target language."""
-
- def __init__(self, in_language, out_language):
- """Initialize the TranslationProcessor with source and target languages.
-
- Args:
- in_language (str): The language of the input text.
- out_language (str): The language to translate the text into.
- """
- super().__init__()
- self._out_language = out_language
- self._in_language = in_language
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- """Process a frame and translate text frames.
-
- Args:
- frame (Frame): The frame to process.
- direction (FrameDirection): The direction of the frame.
- """
- await super().process_frame(frame, direction)
-
- if isinstance(frame, TranscriptionFrame):
- logger.debug(f"Translating {self._in_language}: {frame.text} to {self._out_language}")
- context = [
- {
- "role": "system",
- "content": f"You will be provided with a sentence in {self._in_language}, and your task is to only translate it into {self._out_language}.",
- },
- {"role": "user", "content": frame.text},
- ]
- await self.push_frame(LLMMessagesFrame(context))
- else:
- await self.push_frame(frame)
-
-
-class TranscriptHandler:
- """Simple handler to demonstrate transcript processing.
-
- Maintains a list of conversation messages and logs them with timestamps.
- """
-
- def __init__(self, in_language="English", out_language="Spanish"):
- """Initialize the TranscriptHandler with an empty list of messages."""
- self.messages: List[TranscriptionMessage] = []
- self.in_language = in_language
- self.out_language = out_language
-
- async def on_transcript_update(
- self, processor: TranscriptProcessor, frame: TranscriptionUpdateFrame
- ):
- """Handle new transcript messages.
-
- Args:
- processor: The TranscriptProcessor that emitted the update
- frame: TranscriptionUpdateFrame containing new messages
- """
- self.messages.extend(frame.messages)
-
- # Log the new messages
- logger.info("New transcript messages:")
- for msg in frame.messages:
- timestamp = f"[{msg.timestamp}] " if msg.timestamp else ""
- message = {
- "event": "translation",
- "timestamp": msg.timestamp,
- "role": msg.role,
- "language": self.out_language if msg.role == "assistant" else self.in_language,
- "text": msg.content,
- }
- logger.info(f"{timestamp}{msg.role}: {msg.content}")
-
-
-async def main():
- """Main function to set up and run the translation chatbot pipeline."""
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
-
- transport = DailyTransport(
- room_url,
- token,
- "Translator",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- stt_mute_processor = STTMuteFilter(
- config=STTMuteConfig(
- strategies={
- STTMuteStrategy.ALWAYS,
- }
- ),
- )
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="34dbb662-8e98-413c-a1ef-1a3407675fe7", # Spanish Narrator Man
- model="sonic-2",
- )
-
- in_language = "English"
- out_language = "Spanish"
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
- context = OpenAILLMContext()
- context_aggregator = llm.create_context_aggregator(context)
-
- tp = TranslationProcessor(in_language=in_language, out_language=out_language)
-
- transcript = TranscriptProcessor()
- transcript_handler = TranscriptHandler(in_language=in_language, out_language=out_language)
-
- # Register event handler for transcript updates
- @transcript.event_handler("on_transcript_update")
- async def on_transcript_update(processor, frame):
- await transcript_handler.on_transcript_update(processor, frame)
-
- rtvi = RTVIProcessor()
-
- pipeline = Pipeline(
- [
- transport.input(),
- rtvi,
- stt_mute_processor, # We don't want to interrupt the translator bot
- stt,
- transcript.user(), # User transcripts
- tp,
- llm,
- tts,
- transport.output(),
- transcript.assistant(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.info("First participant joined")
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/translation-chatbot/env.example b/examples/translation-chatbot/env.example
deleted file mode 100644
index 42c1083bf..000000000
--- a/examples/translation-chatbot/env.example
+++ /dev/null
@@ -1,5 +0,0 @@
-DAILY_SAMPLE_ROOM_URL=https://yourdomain.daily.co/yourroom # (for joining the bot to the same room repeatedly for local dev)
-DAILY_API_KEY=7df...
-OPENAI_API_KEY=sk-PL...
-AZURE_SPEECH_REGION=westus...
-AZURE_SPEECH_API_KEY=febf...
\ No newline at end of file
diff --git a/examples/translation-chatbot/image.png b/examples/translation-chatbot/image.png
deleted file mode 100644
index af7ebe0bb..000000000
Binary files a/examples/translation-chatbot/image.png and /dev/null differ
diff --git a/examples/translation-chatbot/requirements.txt b/examples/translation-chatbot/requirements.txt
deleted file mode 100644
index da1cbf0af..000000000
--- a/examples/translation-chatbot/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-pipecat-ai[cartesia,daily,deepgram,openai,silero]
-aiohttp
diff --git a/examples/translation-chatbot/runner.py b/examples/translation-chatbot/runner.py
deleted file mode 100644
index ad39a3ac4..000000000
--- a/examples/translation-chatbot/runner.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/translation-chatbot/server.py b/examples/translation-chatbot/server.py
deleted file mode 100644
index 1dd2ac966..000000000
--- a/examples/translation-chatbot/server.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-
-import aiohttp
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-MAX_BOTS_PER_ROOM = 1
-
-# Bot sub-process dict for status reporting and concurrency control
-bot_procs = {}
-
-daily_helpers = {}
-
-
-def cleanup():
- # Clean up function, just to be extra safe
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-app = FastAPI(lifespan=lifespan)
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.get("/")
-async def start_agent(request: Request):
- print(f"!!! Creating room")
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- print(f"!!! Room URL: {room.url}")
- # Ensure the room property is present
- if not room.url:
- raise HTTPException(
- status_code=500,
- detail="Missing 'room' property in request data. Cannot start agent without a target room!",
- )
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room.url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limited reach for room: {room.url}")
-
- # Get the token for the room
- token = await daily_helpers["rest"].get_token(room.url)
-
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- # Spawn a new agent, and join the user session
- # Note: this is mostly for demonstration purposes (refer to 'deployment' in README)
- try:
- proc = subprocess.Popen(
- [f"python3 -m bot -u {room.url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room.url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room.url)
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- if proc[0].poll() is None:
- status = "running"
- else:
- status = "finished"
-
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Translator FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/twilio-chatbot/.gitignore b/examples/twilio-chatbot/.gitignore
deleted file mode 100644
index 2bc1403d1..000000000
--- a/examples/twilio-chatbot/.gitignore
+++ /dev/null
@@ -1,161 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-wheels/
-share/python-wheels/
-*.egg-info/
-.installed.cfg
-*.egg
-MANIFEST
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.nox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*.cover
-*.py,cover
-.hypothesis/
-.pytest_cache/
-cover/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly ignored for libraries.
-# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
-#poetry.lock
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
-# in version control.
-# https://pdm.fming.dev/#use-with-ide
-.pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
-# Environments
-.env
-.venv
-env/
-venv/
-ENV/
-env.bak/
-venv.bak/
-
-# Spyder project settings
-.spyderproject
-.spyproject
-
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
-# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
-# and can be added to the global gitignore or merged into this file. For a more nuclear
-# option (not recommended) you can uncomment the following to ignore the entire idea folder.
-#.idea/
-runpod.toml
diff --git a/examples/twilio-chatbot/Dockerfile b/examples/twilio-chatbot/Dockerfile
deleted file mode 100644
index 6e22d4cda..000000000
--- a/examples/twilio-chatbot/Dockerfile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Use an official Python runtime as a parent image
-FROM python:3.10-bullseye
-
-# Set the working directory in the container
-WORKDIR /twilio-chatbot
-
-# Copy the requirements file into the container
-COPY requirements.txt .
-
-# Install any needed packages specified in requirements.txt
-RUN pip install --no-cache-dir -r requirements.txt
-
-# Copy the current directory contents into the container
-COPY . .
-
-# Expose the desired port
-EXPOSE 8765
-
-# Run the application
-CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8765"]
diff --git a/examples/twilio-chatbot/README.md b/examples/twilio-chatbot/README.md
deleted file mode 100644
index 9c7a4be95..000000000
--- a/examples/twilio-chatbot/README.md
+++ /dev/null
@@ -1,115 +0,0 @@
-# Twilio Chatbot
-
-This project is a FastAPI-based chatbot that integrates with Twilio to handle WebSocket connections and provide real-time communication. The project includes endpoints for starting a call and handling WebSocket connections.
-
-## Table of Contents
-
-- [Features](#features)
-- [Requirements](#requirements)
-- [Installation](#installation)
-- [Configure Twilio URLs](#configure-twilio-urls)
-- [Running the Application](#running-the-application)
-- [Usage](#usage)
-
-## Features
-
-- **FastAPI**: A modern, fast (high-performance), web framework for building APIs with Python 3.6+.
-- **WebSocket Support**: Real-time communication using WebSockets.
-- **CORS Middleware**: Allowing cross-origin requests for testing.
-- **Dockerized**: Easily deployable using Docker.
-
-## Requirements
-
-- Python 3.10
-- Docker (for containerized deployment)
-- ngrok (for tunneling)
-- Twilio Account
-
-## Installation
-
-1. **Set up a virtual environment** (optional but recommended):
-
- ```sh
- python -m venv venv
- source venv/bin/activate # On Windows, use `venv\Scripts\activate`
- ```
-
-2. **Install dependencies**:
-
- ```sh
- pip install -r requirements.txt
- ```
-
-3. **Create .env**:
- Copy the example environment file and update with your settings:
-
- ```sh
- cp env.example .env
- ```
-
-4. **Install ngrok**:
- Follow the instructions on the [ngrok website](https://ngrok.com/download) to download and install ngrok.
-
-## Configure Twilio URLs
-
-1. **Start ngrok**:
- In a new terminal, start ngrok to tunnel the local server:
-
- ```sh
- ngrok http 8765
- ```
-
-2. **Update the Twilio Webhook**:
-
- - Go to your Twilio phone number's configuration page
- - Under "Voice Configuration", in the "A call comes in" section:
- - Select "Webhook" from the dropdown
- - Enter your ngrok URL (e.g., http://)
- - Ensure "HTTP POST" is selected
- - Click Save at the bottom of the page
-
-3. **Configure streams.xml**:
- - Copy the template file to create your local version:
- ```sh
- cp templates/streams.xml.template templates/streams.xml
- ```
- - In `templates/streams.xml`, replace `` with your ngrok URL (without `https://`)
- - The final URL should look like: `wss://abc123.ngrok.io/ws`
-
-## Running the Application
-
-Choose one of these two methods to run the application:
-
-### Using Python (Option 1)
-
-**Run the FastAPI application**:
-
-```sh
-# Make sure youโre in the project directory and your virtual environment is activated
-python server.py
-```
-
-### Using Docker (Option 2)
-
-1. **Build the Docker image**:
-
- ```sh
- docker build -t twilio-chatbot .
- ```
-
-2. **Run the Docker container**:
- ```sh
- docker run -it --rm -p 8765:8765 twilio-chatbot
- ```
-
-The server will start on port 8765. Keep this running while you test with Twilio.
-
-## Usage
-
-To start a call, simply make a call to your configured Twilio phone number. The webhook URL will direct the call to your FastAPI application, which will handle it accordingly.
-
-## Testing
-
-It is also possible to test the server without making phone calls by using one of these clients.
-- [python](client/python/README.md): This Python client enables automated testing of the server via WebSocket without the need to make actual phone calls.
-- [typescript](client/typescript/README.md): This typescript client enables manual testing of the server via WebSocket without the need to make actual phone calls.
\ No newline at end of file
diff --git a/examples/twilio-chatbot/bot.py b/examples/twilio-chatbot/bot.py
deleted file mode 100644
index 04aa8e806..000000000
--- a/examples/twilio-chatbot/bot.py
+++ /dev/null
@@ -1,146 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import datetime
-import io
-import os
-import sys
-import wave
-
-import aiofiles
-from dotenv import load_dotenv
-from fastapi import WebSocket
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.audio.audio_buffer_processor import AudioBufferProcessor
-from pipecat.serializers.twilio import TwilioFrameSerializer
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.network.fastapi_websocket import (
- FastAPIWebsocketParams,
- FastAPIWebsocketTransport,
-)
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-async def save_audio(server_name: str, audio: bytes, sample_rate: int, num_channels: int):
- if len(audio) > 0:
- filename = (
- f"{server_name}_recording_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.wav"
- )
- with io.BytesIO() as buffer:
- with wave.open(buffer, "wb") as wf:
- wf.setsampwidth(2)
- wf.setnchannels(num_channels)
- wf.setframerate(sample_rate)
- wf.writeframes(audio)
- async with aiofiles.open(filename, "wb") as file:
- await file.write(buffer.getvalue())
- logger.info(f"Merged audio saved to {filename}")
- else:
- logger.info("No audio data to save")
-
-
-async def run_bot(websocket_client: WebSocket, stream_sid: str, call_sid: str, testing: bool):
- serializer = TwilioFrameSerializer(
- stream_sid=stream_sid,
- call_sid=call_sid,
- account_sid=os.getenv("TWILIO_ACCOUNT_SID", ""),
- auth_token=os.getenv("TWILIO_AUTH_TOKEN", ""),
- )
-
- transport = FastAPIWebsocketTransport(
- websocket=websocket_client,
- params=FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- add_wav_header=False,
- vad_analyzer=SileroVADAnalyzer(),
- serializer=serializer,
- ),
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"), audio_passthrough=True)
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady
- push_silence_after_stop=testing,
- )
-
- messages = [
- {
- "role": "system",
- "content": "You are an elementary teacher in an audio call. Your output will be converted to audio so don't include special characters in your answers. Respond to what the student said in a short short sentence.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- # NOTE: Watch out! This will save all the conversation in memory. You can
- # pass `buffer_size` to get periodic callbacks.
- audiobuffer = AudioBufferProcessor()
-
- pipeline = Pipeline(
- [
- transport.input(), # Websocket input from client
- stt, # Speech-To-Text
- context_aggregator.user(),
- llm, # LLM
- tts, # Text-To-Speech
- transport.output(), # Websocket output to client
- audiobuffer, # Used to buffer the audio in the pipeline
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_in_sample_rate=8000,
- audio_out_sample_rate=8000,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- # Start recording.
- await audiobuffer.start_recording()
- # Kick off the conversation.
- messages.append({"role": "system", "content": "Please introduce yourself to the user."})
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- await task.cancel()
-
- @audiobuffer.event_handler("on_audio_data")
- async def on_audio_data(buffer, audio, sample_rate, num_channels):
- server_name = f"server_{websocket_client.client.port}"
- await save_audio(server_name, audio, sample_rate, num_channels)
-
- # We use `handle_sigint=False` because `uvicorn` is controlling keyboard
- # interruptions. We use `force_gc=True` to force garbage collection after
- # the runner finishes running a task which could be useful for long running
- # applications with multiple clients connecting.
- runner = PipelineRunner(handle_sigint=False, force_gc=True)
-
- await runner.run(task)
diff --git a/examples/twilio-chatbot/client/python/README.md b/examples/twilio-chatbot/client/python/README.md
deleted file mode 100644
index 18e695382..000000000
--- a/examples/twilio-chatbot/client/python/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Python Client for Server Testing
-
-This Python client enables automated testing of the server via WebSocket without the need to make actual phone calls.
-
-## Setup Instructions
-
-### 1. Configure the Stream Template
-
-Edit the `templates/streams.xml` file to point to your serverโs WebSocket endpoint. For example:
-
-```xml
-
-
-
-
-
-
-
-```
-
-### 2. Start the Server in Test Mode
-
-Run the server with the `-t` flag to indicate test mode:
-
-```sh
-# Ensure you're in the project directory and your virtual environment is activated
-python server.py -t
-```
-
-### 3. Run the Client
-
-Start the client and point it to the server URL:
-
-```sh
-python client.py -u http://localhost:8765 -c 2
-```
-
-- `-u`: Server URL (default is `http://localhost:8765`)
-- `-c`: Number of concurrent client connections (e.g., 2)
diff --git a/examples/twilio-chatbot/client/python/client.py b/examples/twilio-chatbot/client/python/client.py
deleted file mode 100644
index fc9adecac..000000000
--- a/examples/twilio-chatbot/client/python/client.py
+++ /dev/null
@@ -1,203 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import datetime
-import io
-import os
-import sys
-import wave
-import xml.etree.ElementTree as ET
-from uuid import uuid4
-
-import aiofiles
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.audio.vad.vad_analyzer import VADParams
-from pipecat.frames.frames import EndFrame, TransportMessageUrgentFrame
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.audio.audio_buffer_processor import AudioBufferProcessor
-from pipecat.serializers.twilio import TwilioFrameSerializer
-from pipecat.services.cartesia.tts import CartesiaTTSService
-from pipecat.services.deepgram.stt import DeepgramSTTService
-from pipecat.services.openai.llm import OpenAILLMService
-from pipecat.transports.network.websocket_client import (
- WebsocketClientParams,
- WebsocketClientTransport,
-)
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-DEFAULT_CLIENT_DURATION = 30
-
-
-async def download_twiml(server_url: str) -> str:
- # TODO(aleix): add error checking.
- async with aiohttp.ClientSession() as session:
- async with session.post(server_url) as response:
- return await response.text()
-
-
-def get_stream_url_from_twiml(twiml: str) -> str:
- root = ET.fromstring(twiml)
- # TODO(aleix): add error checking.
- stream_element = root.find(".//Stream") # Finds the first element
- url = stream_element.get("url")
- return url
-
-
-async def save_audio(client_name: str, audio: bytes, sample_rate: int, num_channels: int):
- if len(audio) > 0:
- filename = (
- f"{client_name}_recording_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.wav"
- )
- with io.BytesIO() as buffer:
- with wave.open(buffer, "wb") as wf:
- wf.setsampwidth(2)
- wf.setnchannels(num_channels)
- wf.setframerate(sample_rate)
- wf.writeframes(audio)
- async with aiofiles.open(filename, "wb") as file:
- await file.write(buffer.getvalue())
- logger.info(f"Merged audio saved to {filename}")
- else:
- logger.info("No audio data to save")
-
-
-async def run_client(client_name: str, server_url: str, duration_secs: int):
- twiml = await download_twiml(server_url)
-
- stream_url = get_stream_url_from_twiml(twiml)
-
- stream_sid = str(uuid4())
- call_sid = str(uuid4())
-
- transport = WebsocketClientTransport(
- uri=stream_url,
- params=WebsocketClientParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- add_wav_header=False,
- serializer=TwilioFrameSerializer(stream_sid=stream_sid, call_sid=call_sid),
- vad_analyzer=SileroVADAnalyzer(params=VADParams(stop_secs=1.0)),
- ),
- )
-
- llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
-
- stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
-
- tts = CartesiaTTSService(
- api_key=os.getenv("CARTESIA_API_KEY"),
- voice_id="e13cae5c-ec59-4f71-b0a6-266df3c9bb8e", # Madame Mischief
- push_silence_after_stop=True,
- )
-
- messages = [
- {
- "role": "system",
- "content": "You are an 8 year old child. A teacher will explain you new concepts you want to know about. Feel free to change topics whnever you want. Once you are taught something you need to keep asking for clarifications if you think someone your age would not understand what you are being taught.",
- },
- ]
-
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- # NOTE: Watch out! This will save all the conversation in memory. You can
- # pass `buffer_size` to get periodic callbacks.
- audiobuffer = AudioBufferProcessor()
-
- pipeline = Pipeline(
- [
- transport.input(), # Websocket input from server
- stt, # Speech-To-Text
- context_aggregator.user(),
- llm, # LLM
- tts, # Text-To-Speech
- transport.output(), # Websocket output to server
- audiobuffer, # Used to buffer the audio in the pipeline
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_in_sample_rate=8000,
- audio_out_sample_rate=8000,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- @transport.event_handler("on_connected")
- async def on_connected(transport: WebsocketClientTransport, client):
- # Start recording.
- await audiobuffer.start_recording()
-
- message = TransportMessageUrgentFrame(
- message={"event": "connected", "protocol": "Call", "version": "1.0.0"}
- )
- await transport.output().send_message(message)
-
- message = TransportMessageUrgentFrame(
- message={
- "event": "start",
- "streamSid": stream_sid,
- "callSid": call_sid,
- "start": {"streamSid": stream_sid, "callSid": call_sid},
- }
- )
- await transport.output().send_message(message)
-
- @audiobuffer.event_handler("on_audio_data")
- async def on_audio_data(buffer, audio, sample_rate, num_channels):
- await save_audio(client_name, audio, sample_rate, num_channels)
-
- async def end_call():
- await asyncio.sleep(duration_secs)
- logger.info(f"Client {client_name} finished after {duration_secs} seconds.")
- await task.queue_frame(EndFrame())
-
- runner = PipelineRunner()
-
- await asyncio.gather(runner.run(task), end_call())
-
-
-async def main():
- parser = argparse.ArgumentParser(description="Pipecat Twilio Chatbot Client")
- parser.add_argument("-u", "--url", type=str, required=True, help="specify the server URL")
- parser.add_argument(
- "-c", "--clients", type=int, required=True, help="number of concurrent clients"
- )
- parser.add_argument(
- "-d",
- "--duration",
- type=int,
- default=DEFAULT_CLIENT_DURATION,
- help=f"duration of each client in seconds (default: {DEFAULT_CLIENT_DURATION})",
- )
- args, _ = parser.parse_known_args()
-
- clients = []
- for i in range(args.clients):
- clients.append(asyncio.create_task(run_client(f"client_{i}", args.url, args.duration)))
- await asyncio.gather(*clients)
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/twilio-chatbot/client/typescript/README.md b/examples/twilio-chatbot/client/typescript/README.md
deleted file mode 100644
index a2dd7b05b..000000000
--- a/examples/twilio-chatbot/client/typescript/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Typescript Client for Server Testing
-
-This typescript client enables manual testing of the server via WebSocket without the need to make actual phone calls.
-
-## Setup
-
-1. Run the bot server. See the [server README](../../README).
-
-2. Navigate to the `client/typescript` directory:
-
-```bash
-cd client/typescript
-```
-
-3. Install dependencies:
-
-```bash
-npm install
-```
-
-4. Run the client app:
-
-```
-npm run dev
-```
-
-5. Visit http://localhost:5173 in your browser.
diff --git a/examples/twilio-chatbot/client/typescript/index.html b/examples/twilio-chatbot/client/typescript/index.html
deleted file mode 100644
index 83c24031a..000000000
--- a/examples/twilio-chatbot/client/typescript/index.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
- AI Chatbot
-
-
-
-
-
-
- Transport: Disconnected
-
-
- Connect
- Disconnect
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/twilio-chatbot/client/typescript/package-lock.json b/examples/twilio-chatbot/client/typescript/package-lock.json
deleted file mode 100644
index 8bfcd32e8..000000000
--- a/examples/twilio-chatbot/client/typescript/package-lock.json
+++ /dev/null
@@ -1,1812 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/websocket-transport": "^1.0.0"
- },
- "devDependencies": {
- "@types/node": "^22.13.1",
- "@types/protobufjs": "^6.0.0",
- "@vitejs/plugin-react-swc": "^3.7.2",
- "typescript": "^5.7.3",
- "vite": "^6.0.2"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bufbuild/protobuf": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.6.0.tgz",
- "integrity": "sha512-6cuonJVNOIL7lTj5zgo/Rc2bKAo4/GvN+rKCrUj7GdEHRzCk8zKOfFwUsL9nAVk5rSIsRmlgcpLzTRysopEeeg==",
- "license": "(Apache-2.0 AND BSD-3-Clause)"
- },
- "node_modules/@bufbuild/protoplugin": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-2.6.0.tgz",
- "integrity": "sha512-mfAwI+4GqUtbw/ddfyolEHaAL86ozRIVlOg2A+SVRbjx1CjsMc1YJO+hBSkt/pqfpR+PmWBbZLstHbXP8KGtMQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@bufbuild/protobuf": "2.6.0",
- "@typescript/vfs": "^1.5.2",
- "typescript": "5.4.5"
- }
- },
- "node_modules/@bufbuild/protoplugin/node_modules/typescript": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
- "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.79.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.79.0.tgz",
- "integrity": "sha512-Ii/Zi6cfTl2EZBpX8msRPNkkCHcajA+ErXpbN2Xe2KySd1Nb4IzC/QWJlSl9VA9pIlYPQicRTDoZnoym/0uEAw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
- "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
- "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
- "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
- "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
- "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
- "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
- "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
- "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
- "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
- "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
- "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
- "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
- "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
- "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
- "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
- "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
- "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
- "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
- "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
- "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
- "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
- "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
- "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
- "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/websocket-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/websocket-transport/-/websocket-transport-1.0.0.tgz",
- "integrity": "sha512-4ZFxfiMH15PjLUC2eOMlS6GQeZCc/4wId/cZ4cfF8VOp4oz5WsDKaXgPa+uLocgczrlSQq9RiIGhQMDoMXpBSw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.79.0",
- "@protobuf-ts/plugin": "^2.11.0",
- "@protobuf-ts/runtime": "^2.11.0",
- "x-law": "^0.3.1"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@protobuf-ts/plugin": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin/-/plugin-2.11.1.tgz",
- "integrity": "sha512-HyuprDcw0bEEJqkOWe1rnXUP0gwYLij8YhPuZyZk6cJbIgc/Q0IFgoHQxOXNIXAcXM4Sbehh6kjVnCzasElw1A==",
- "license": "Apache-2.0",
- "dependencies": {
- "@bufbuild/protobuf": "^2.4.0",
- "@bufbuild/protoplugin": "^2.4.0",
- "@protobuf-ts/protoc": "^2.11.1",
- "@protobuf-ts/runtime": "^2.11.1",
- "@protobuf-ts/runtime-rpc": "^2.11.1",
- "typescript": "^3.9"
- },
- "bin": {
- "protoc-gen-dump": "bin/protoc-gen-dump",
- "protoc-gen-ts": "bin/protoc-gen-ts"
- }
- },
- "node_modules/@protobuf-ts/plugin/node_modules/typescript": {
- "version": "3.9.10",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
- "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/@protobuf-ts/protoc": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/protoc/-/protoc-2.11.1.tgz",
- "integrity": "sha512-mUZJaV0daGO6HUX90o/atzQ6A7bbN2RSuHtdwo8SSF2Qoe3zHwa4IHyCN1evftTeHfLmdz+45qo47sL+5P8nyg==",
- "license": "Apache-2.0",
- "bin": {
- "protoc": "protoc.js"
- }
- },
- "node_modules/@protobuf-ts/runtime": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.11.1.tgz",
- "integrity": "sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==",
- "license": "(Apache-2.0 AND BSD-3-Clause)"
- },
- "node_modules/@protobuf-ts/runtime-rpc": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.11.1.tgz",
- "integrity": "sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@protobuf-ts/runtime": "^2.11.1"
- }
- },
- "node_modules/@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "node_modules/@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.11",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.11.tgz",
- "integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz",
- "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz",
- "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz",
- "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz",
- "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz",
- "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz",
- "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz",
- "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz",
- "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz",
- "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz",
- "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz",
- "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz",
- "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz",
- "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz",
- "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz",
- "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
- "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz",
- "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz",
- "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz",
- "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz",
- "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@swc/core": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.11.tgz",
- "integrity": "sha512-P3GM+0lqjFctcp5HhR9mOcvLSX3SptI9L1aux0Fuvgt8oH4f92rCUrkodAa0U2ktmdjcyIiG37xg2mb/dSCYSA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.23"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.12.11",
- "@swc/core-darwin-x64": "1.12.11",
- "@swc/core-linux-arm-gnueabihf": "1.12.11",
- "@swc/core-linux-arm64-gnu": "1.12.11",
- "@swc/core-linux-arm64-musl": "1.12.11",
- "@swc/core-linux-x64-gnu": "1.12.11",
- "@swc/core-linux-x64-musl": "1.12.11",
- "@swc/core-win32-arm64-msvc": "1.12.11",
- "@swc/core-win32-ia32-msvc": "1.12.11",
- "@swc/core-win32-x64-msvc": "1.12.11"
- },
- "peerDependencies": {
- "@swc/helpers": ">=0.5.17"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.11.tgz",
- "integrity": "sha512-J19Jj9Y5x/N0loExH7W0OI9OwwoVyxutDdkyq1o/kgXyBqmmzV7Y/Q9QekI2Fm/qc5mNeAdP7aj4boY4AY/JPw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.11.tgz",
- "integrity": "sha512-PTuUQrfStQ6cjW+uprGO2lpQHy84/l0v+GqRqq8s/jdK55rFRjMfCeyf6FAR0l6saO5oNOQl+zWR1aNpj8pMQw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.11.tgz",
- "integrity": "sha512-poxBq152HsupOtnZilenvHmxZ9a8SRj4LtfxUnkMDNOGrZR9oxbQNwEzNKfi3RXEcXz+P8c0Rai1ubBazXv8oQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.11.tgz",
- "integrity": "sha512-y1HNamR/D0Hc8xIE910ysyLe269UYiGaQPoLjQS0phzWFfWdMj9bHM++oydVXZ4RSWycO7KyJ3uvw4NilvyMKQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.11.tgz",
- "integrity": "sha512-LlBxPh/32pyQsu2emMEOFRm7poEFLsw12Y1mPY7FWZiZeptomKSOSHRzKDz9EolMiV4qhK1caP1lvW4vminYgQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.11.tgz",
- "integrity": "sha512-bOjiZB8O/1AzHkzjge1jqX62HGRIpOHqFUrGPfAln/NC6NR+Z2A78u3ixV7k5KesWZFhCV0YVGJL+qToL27myA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.11.tgz",
- "integrity": "sha512-4dzAtbT/m3/UjF045+33gLiHd8aSXJDoqof7gTtu4q0ZyAf7XJ3HHspz+/AvOJLVo4FHHdFcdXhmo/zi1nFn8A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.11.tgz",
- "integrity": "sha512-h8HiwBZErKvCAmjW92JvQp0iOqm6bncU4ac5jxBGkRApabpUenNJcj3h2g5O6GL5K6T9/WhnXE5gyq/s1fhPQg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.11.tgz",
- "integrity": "sha512-1pwr325mXRNUhxTtXmx1IokV5SiRL+6iDvnt3FRXj+X5UvXXKtg2zeyftk+03u8v8v8WUr5I32hIypVJPTNxNg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.12.11",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.11.tgz",
- "integrity": "sha512-5gggWo690Gvs7XiPxAmb5tHwzB9RTVXUV7AWoGb6bmyUd1OXYaebQF0HAOtade5jIoNhfQMQJ7QReRgt/d2jAA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/@swc/types": {
- "version": "0.1.23",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz",
- "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "22.16.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.3.tgz",
- "integrity": "sha512-sr4Xz74KOUeYadexo1r8imhRtlVXcs+j3XK3TcoiYk7B1t3YRVJgtaD3cwX73NYb71pmVuMLNRhJ9XKdoDB74g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@types/protobufjs": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/@types/protobufjs/-/protobufjs-6.0.0.tgz",
- "integrity": "sha512-A27RDExpAf3rdDjIrHKiJK6x8kqqJ4CmoChwtipfhVAn1p7+wviQFFP7dppn8FslSbHtQeVPvi8wNKkDjSYjHw==",
- "deprecated": "This is a stub types definition for protobufjs (https://github.com/dcodeIO/ProtoBuf.js). protobufjs provides its own type definitions, so you don't need @types/protobufjs installed!",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "protobufjs": "*"
- }
- },
- "node_modules/@typescript/vfs": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.1.tgz",
- "integrity": "sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.1.1"
- },
- "peerDependencies": {
- "typescript": "*"
- }
- },
- "node_modules/@vitejs/plugin-react-swc": {
- "version": "3.10.2",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.10.2.tgz",
- "integrity": "sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rolldown/pluginutils": "1.0.0-beta.11",
- "@swc/core": "^1.11.31"
- },
- "peerDependencies": {
- "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0"
- }
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
- "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.6",
- "@esbuild/android-arm": "0.25.6",
- "@esbuild/android-arm64": "0.25.6",
- "@esbuild/android-x64": "0.25.6",
- "@esbuild/darwin-arm64": "0.25.6",
- "@esbuild/darwin-x64": "0.25.6",
- "@esbuild/freebsd-arm64": "0.25.6",
- "@esbuild/freebsd-x64": "0.25.6",
- "@esbuild/linux-arm": "0.25.6",
- "@esbuild/linux-arm64": "0.25.6",
- "@esbuild/linux-ia32": "0.25.6",
- "@esbuild/linux-loong64": "0.25.6",
- "@esbuild/linux-mips64el": "0.25.6",
- "@esbuild/linux-ppc64": "0.25.6",
- "@esbuild/linux-riscv64": "0.25.6",
- "@esbuild/linux-s390x": "0.25.6",
- "@esbuild/linux-x64": "0.25.6",
- "@esbuild/netbsd-arm64": "0.25.6",
- "@esbuild/netbsd-x64": "0.25.6",
- "@esbuild/openbsd-arm64": "0.25.6",
- "@esbuild/openbsd-x64": "0.25.6",
- "@esbuild/openharmony-arm64": "0.25.6",
- "@esbuild/sunos-x64": "0.25.6",
- "@esbuild/win32-arm64": "0.25.6",
- "@esbuild/win32-ia32": "0.25.6",
- "@esbuild/win32-x64": "0.25.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/long": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
- "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/protobufjs": {
- "version": "7.5.3",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.3.tgz",
- "integrity": "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
- "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": ">=13.7.0",
- "long": "^5.0.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/rollup": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz",
- "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.44.2",
- "@rollup/rollup-android-arm64": "4.44.2",
- "@rollup/rollup-darwin-arm64": "4.44.2",
- "@rollup/rollup-darwin-x64": "4.44.2",
- "@rollup/rollup-freebsd-arm64": "4.44.2",
- "@rollup/rollup-freebsd-x64": "4.44.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.44.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.44.2",
- "@rollup/rollup-linux-arm64-gnu": "4.44.2",
- "@rollup/rollup-linux-arm64-musl": "4.44.2",
- "@rollup/rollup-linux-loongarch64-gnu": "4.44.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-musl": "4.44.2",
- "@rollup/rollup-linux-s390x-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-musl": "4.44.2",
- "@rollup/rollup-win32-arm64-msvc": "4.44.2",
- "@rollup/rollup-win32-ia32-msvc": "4.44.2",
- "@rollup/rollup-win32-x64-msvc": "4.44.2",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- },
- "node_modules/x-law": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/x-law/-/x-law-0.3.1.tgz",
- "integrity": "sha512-Nvo6OKj6UL2LuzAc08uJkwIDkK2PsTEdpLiY82NkwMptuRpAA1V7arUl7ZY12BcgRYNq8uh1pdAu7G6VeQn7Hg==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- }
- }
-}
diff --git a/examples/twilio-chatbot/client/typescript/package.json b/examples/twilio-chatbot/client/typescript/package.json
deleted file mode 100644
index 43efdeb7d..000000000
--- a/examples/twilio-chatbot/client/typescript/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "preview": "vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "@types/node": "^22.13.1",
- "@types/protobufjs": "^6.0.0",
- "@vitejs/plugin-react-swc": "^3.7.2",
- "typescript": "^5.7.3",
- "vite": "^6.0.2"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/websocket-transport": "^1.0.0"
- }
-}
diff --git a/examples/twilio-chatbot/client/typescript/src/app.ts b/examples/twilio-chatbot/client/typescript/src/app.ts
deleted file mode 100644
index 56d6ba021..000000000
--- a/examples/twilio-chatbot/client/typescript/src/app.ts
+++ /dev/null
@@ -1,261 +0,0 @@
-/**
- * Copyright (c) 2024โ2025, Daily
- *
- * SPDX-License-Identifier: BSD 2-Clause License
- */
-
-import {
- BotLLMTextData,
- Participant,
- PipecatClient,
- PipecatClientOptions,
- RTVIEvent, RTVIMessage, TranscriptData,
-} from '@pipecat-ai/client-js';
-import {
- WebSocketTransport,
- TwilioSerializer,
-} from '@pipecat-ai/websocket-transport';
-
-class WebsocketClientApp {
- private static STREAM_SID = 'ws_mock_stream_sid';
- private static CALL_SID = 'ws_mock_call_sid';
-
- private rtviClient: PipecatClient | null = null;
- private connectBtn: HTMLButtonElement | null = null;
- private disconnectBtn: HTMLButtonElement | null = null;
- private statusSpan: HTMLElement | null = null;
- private debugLog: HTMLElement | null = null;
- private botAudio: HTMLAudioElement;
-
- constructor() {
- this.botAudio = document.createElement('audio');
- this.botAudio.autoplay = true;
- document.body.appendChild(this.botAudio);
- this.setupDOMElements();
- this.setupEventListeners();
- }
-
- /**
- * Set up references to DOM elements and create necessary media elements
- */
- private setupDOMElements(): void {
- this.connectBtn = document.getElementById(
- 'connect-btn'
- ) as HTMLButtonElement;
- this.disconnectBtn = document.getElementById(
- 'disconnect-btn'
- ) as HTMLButtonElement;
- this.statusSpan = document.getElementById('connection-status');
- this.debugLog = document.getElementById('debug-log');
- }
-
- /**
- * Set up event listeners for connect/disconnect buttons
- */
- private setupEventListeners(): void {
- this.connectBtn?.addEventListener('click', () => this.connect());
- this.disconnectBtn?.addEventListener('click', () => this.disconnect());
- }
-
- /**
- * Add a timestamped message to the debug log
- */
- private log(message: string): void {
- if (!this.debugLog) return;
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3';
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50';
- }
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- console.log(message);
- }
-
- /**
- * Update the connection status display
- */
- private updateStatus(status: string): void {
- if (this.statusSpan) {
- this.statusSpan.textContent = status;
- }
- this.log(`Status: ${status}`);
- }
-
- private async emulateTwilioMessages() {
- const connectedMessage = {
- event: 'connected',
- protocol: 'Call',
- version: '1.0.0',
- };
-
- const websocketTransport = this.rtviClient?.transport as WebSocketTransport;
- void websocketTransport?.sendRawMessage(connectedMessage);
-
- const startMessage = {
- event: 'start',
- start: {
- streamSid: WebsocketClientApp.STREAM_SID,
- callSid: WebsocketClientApp.CALL_SID,
- },
- };
- void websocketTransport?.sendRawMessage(startMessage);
- }
-
- /**
- * Check for available media tracks and set them up if present
- * This is called when the bot is ready or when the transport state changes to ready
- */
- setupMediaTracks() {
- if (!this.rtviClient) return;
- const tracks = this.rtviClient.tracks();
- if (tracks.bot?.audio) {
- this.setupAudioTrack(tracks.bot.audio);
- }
- }
-
- /**
- * Set up listeners for track events (start/stop)
- * This handles new tracks being added during the session
- */
- setupTrackListeners() {
- if (!this.rtviClient) return;
-
- // Listen for new tracks starting
- this.rtviClient.on(RTVIEvent.TrackStarted, (track: MediaStreamTrack, participant?: Participant) => {
- // Only handle non-local (bot) tracks
- if (!participant?.local && track.kind === 'audio') {
- this.setupAudioTrack(track);
- }
- });
-
- // Listen for tracks stopping
- this.rtviClient.on(RTVIEvent.TrackStopped, (track: MediaStreamTrack, participant?: Participant) => {
- this.log(
- `Track stopped: ${track.kind} from ${participant?.name || 'unknown'}`
- );
- });
- }
-
- /**
- * Set up an audio track for playback
- * Handles both initial setup and track updates
- */
- private setupAudioTrack(track: MediaStreamTrack): void {
- this.log('Setting up audio track');
- if (
- this.botAudio.srcObject &&
- 'getAudioTracks' in this.botAudio.srcObject
- ) {
- const oldTrack = this.botAudio.srcObject.getAudioTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
- this.botAudio.srcObject = new MediaStream([track]);
- }
-
- /**
- * Initialize and connect to the bot
- * This sets up the RTVI client, initializes devices, and establishes the connection
- */
- public async connect(): Promise {
- try {
- const startTime = Date.now();
-
- const ws_opts = {
- serializer: new TwilioSerializer(),
- recorderSampleRate: 8000,
- playerSampleRate: 8000,
- ws_url: 'http://localhost:8765/ws',
- };
- const RTVIConfig: PipecatClientOptions = {
- transport: new WebSocketTransport(ws_opts),
- enableMic: true,
- enableCam: false,
- callbacks: {
- onConnected: () => {
- this.emulateTwilioMessages();
- this.updateStatus('Connected');
- if (this.connectBtn) this.connectBtn.disabled = true;
- if (this.disconnectBtn) this.disconnectBtn.disabled = false;
- },
- onDisconnected: () => {
- this.updateStatus('Disconnected');
- if (this.connectBtn) this.connectBtn.disabled = false;
- if (this.disconnectBtn) this.disconnectBtn.disabled = true;
- this.log('Client disconnected');
- },
- onBotReady: (data: any) => {
- this.log(`Bot ready: ${JSON.stringify(data)}`);
- this.setupMediaTracks();
- },
- onUserTranscript: (data: TranscriptData) => {
- if (data.final) {
- this.log(`User: ${data.text}`);
- }
- },
- onBotTranscript: (data: BotLLMTextData) => this.log(`Bot: ${data.text}`),
- onMessageError: (error: RTVIMessage) => console.error('Message error:', error),
- onError: (error: RTVIMessage) => console.error('Error:', error),
- },
- };
- this.rtviClient = new PipecatClient(RTVIConfig);
- this.setupTrackListeners();
-
- this.log('Initializing devices...');
- await this.rtviClient.initDevices();
-
- this.log('Connecting to bot...');
- await this.rtviClient.connect();
-
- const timeTaken = Date.now() - startTime;
- this.log(`Connection complete, timeTaken: ${timeTaken}`);
- } catch (error) {
- this.log(`Error connecting: ${(error as Error).message}`);
- this.updateStatus('Error');
- // Clean up if there's an error
- if (this.rtviClient) {
- try {
- await this.rtviClient.disconnect();
- } catch (disconnectError) {
- this.log(`Error during disconnect: ${disconnectError}`);
- }
- }
- }
- }
-
- /**
- * Disconnect from the bot and clean up media resources
- */
- public async disconnect(): Promise {
- if (this.rtviClient) {
- try {
- await this.rtviClient.disconnect();
- this.rtviClient = null;
- if (
- this.botAudio.srcObject &&
- 'getAudioTracks' in this.botAudio.srcObject
- ) {
- this.botAudio.srcObject
- .getAudioTracks()
- .forEach((track) => track.stop());
- this.botAudio.srcObject = null;
- }
- } catch (error) {
- this.log(`Error disconnecting: ${(error as Error).message}`);
- }
- }
- }
-}
-
-declare global {
- interface Window {
- WebsocketClientApp: typeof WebsocketClientApp;
- }
-}
-
-window.addEventListener('DOMContentLoaded', () => {
- window.WebsocketClientApp = WebsocketClientApp;
- new WebsocketClientApp();
-});
diff --git a/examples/twilio-chatbot/client/typescript/src/style.css b/examples/twilio-chatbot/client/typescript/src/style.css
deleted file mode 100644
index 9c147266e..000000000
--- a/examples/twilio-chatbot/client/typescript/src/style.css
+++ /dev/null
@@ -1,98 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#bot-video-container {
- width: 640px;
- height: 360px;
- background-color: #e0e0e0;
- border-radius: 8px;
- margin: 20px auto;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-#bot-video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 500px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/twilio-chatbot/client/typescript/tsconfig.json b/examples/twilio-chatbot/client/typescript/tsconfig.json
deleted file mode 100644
index c9c555d96..000000000
--- a/examples/twilio-chatbot/client/typescript/tsconfig.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "commonjs", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
- // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
- // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
- // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
- // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
- // "noUncheckedSideEffectImports": true, /* Check side effect imports. */
- // "resolveJsonModule": true, /* Enable importing .json files. */
- // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- // "outDir": "./", /* Specify an output folder for all emitted files. */
- // "removeComments": true, /* Disable emitting comments. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
- // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
- }
-}
diff --git a/examples/twilio-chatbot/client/typescript/vite.config.js b/examples/twilio-chatbot/client/typescript/vite.config.js
deleted file mode 100644
index 6bcaa3bc8..000000000
--- a/examples/twilio-chatbot/client/typescript/vite.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { defineConfig } from 'vite';
-import react from '@vitejs/plugin-react-swc';
-
-export default defineConfig({
- base: "./", //Use relative paths so it works at any mount path
- plugins: [react()],
- server: {
- proxy: {
- '/ws': {
- target: 'ws://0.0.0.0:8765', // Replace with your backend URL
- changeOrigin: true,
- },
- },
- },
-});
diff --git a/examples/twilio-chatbot/env.example b/examples/twilio-chatbot/env.example
deleted file mode 100644
index 1da398649..000000000
--- a/examples/twilio-chatbot/env.example
+++ /dev/null
@@ -1,3 +0,0 @@
-OPENAI_API_KEY=
-DEEPGRAM_API_KEY=
-CARTESIA_API_KEY=
diff --git a/examples/twilio-chatbot/requirements.txt b/examples/twilio-chatbot/requirements.txt
deleted file mode 100644
index 99263035e..000000000
--- a/examples/twilio-chatbot/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-pipecat-ai[cartesia,openai,silero,deepgram]
-fastapi
-uvicorn
-python-dotenv
-loguru
diff --git a/examples/twilio-chatbot/server.py b/examples/twilio-chatbot/server.py
deleted file mode 100644
index 598cbb9cf..000000000
--- a/examples/twilio-chatbot/server.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import json
-
-import uvicorn
-from bot import run_bot
-from fastapi import FastAPI, WebSocket
-from fastapi.middleware.cors import CORSMiddleware
-from starlette.responses import HTMLResponse
-
-app = FastAPI()
-
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"], # Allow all origins for testing
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.post("/")
-async def start_call():
- print("POST TwiML")
- return HTMLResponse(content=open("templates/streams.xml").read(), media_type="application/xml")
-
-
-@app.websocket("/ws")
-async def websocket_endpoint(websocket: WebSocket):
- await websocket.accept()
- start_data = websocket.iter_text()
- await start_data.__anext__()
- call_data = json.loads(await start_data.__anext__())
- print(call_data, flush=True)
- stream_sid = call_data["start"]["streamSid"]
- call_sid = call_data["start"]["callSid"]
- print("WebSocket connection accepted")
- await run_bot(websocket, stream_sid, call_sid, app.state.testing)
-
-
-if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="Pipecat Twilio Chatbot Server")
- parser.add_argument(
- "-t", "--test", action="store_true", default=False, help="set the server in testing mode"
- )
- args, _ = parser.parse_known_args()
-
- app.state.testing = args.test
-
- uvicorn.run(app, host="0.0.0.0", port=8765)
diff --git a/examples/twilio-chatbot/templates/streams.xml.template b/examples/twilio-chatbot/templates/streams.xml.template
deleted file mode 100644
index 3d81d53d7..000000000
--- a/examples/twilio-chatbot/templates/streams.xml.template
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/examples/websocket/README.md b/examples/websocket/README.md
deleted file mode 100644
index 38c23ddaa..000000000
--- a/examples/websocket/README.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Voice Agent
-
-A Pipecat example demonstrating the simplest way to create a voice agent using `WebsocketTransport`.
-
-## ๐ Quick Start
-
-### 1๏ธโฃ Start the Bot Server
-
-#### ๐ง Set Up the Environment
-1. Create and activate a virtual environment:
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
-2. Install dependencies:
- ```bash
- pip install -r requirements.txt
- ```
-
-3. Configure environment variables:
- - Copy `env.example` to `.env`
- ```bash
- cp env.example .env
- ```
- - Add your API keys
- - Choose what do you wish to use, 'fast_api' or 'websocket_server'
-
-#### โถ๏ธ Run the Server
-```bash
-python server/server.py
-```
-
-### 3๏ธโฃ Connect Using a Custom Client App
-
-For client-side setup, refer to the:
-- [Typescript Guide](client/README.md).
-
-## โ ๏ธ Important Note
-Ensure the bot server is running before using any client implementations.
-
-## ๐ Requirements
-
-- Python **3.10+**
-- Node.js **16+** (for JavaScript components)
-- Google API Key
-
----
-
-### ๐ก Notes
-- Ensure all dependencies are installed before running the server.
-- Check the `.env` file for missing configurations.
-
-Happy coding! ๐
\ No newline at end of file
diff --git a/examples/websocket/client/README.md b/examples/websocket/client/README.md
deleted file mode 100644
index f18fce022..000000000
--- a/examples/websocket/client/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# JavaScript Implementation
-
-Basic implementation using the [Pipecat JavaScript SDK](https://docs.pipecat.ai/client/js/introduction).
-
-## Setup
-
-1. Run the bot server. See the [server README](../README).
-
-2. Navigate to the `client` directory:
-
-```bash
-cd client
-```
-
-3. Install dependencies:
-
-```bash
-npm install
-```
-
-4. Run the client app:
-
-```
-npm run dev
-```
-
-5. Visit http://localhost:5173 in your browser.
diff --git a/examples/websocket/client/index.html b/examples/websocket/client/index.html
deleted file mode 100644
index 83c24031a..000000000
--- a/examples/websocket/client/index.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
- AI Chatbot
-
-
-
-
-
-
- Transport: Disconnected
-
-
- Connect
- Disconnect
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/websocket/client/package-lock.json b/examples/websocket/client/package-lock.json
deleted file mode 100644
index b1151fb5d..000000000
--- a/examples/websocket/client/package-lock.json
+++ /dev/null
@@ -1,1799 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/websocket-transport": "^1.0.0",
- "protobufjs": "^7.4.0"
- },
- "devDependencies": {
- "@types/node": "^22.15.30",
- "@types/protobufjs": "^6.0.0",
- "@vitejs/plugin-react-swc": "^3.10.1",
- "typescript": "^5.8.3",
- "vite": "^6.3.5"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bufbuild/protobuf": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.6.0.tgz",
- "integrity": "sha512-6cuonJVNOIL7lTj5zgo/Rc2bKAo4/GvN+rKCrUj7GdEHRzCk8zKOfFwUsL9nAVk5rSIsRmlgcpLzTRysopEeeg==",
- "license": "(Apache-2.0 AND BSD-3-Clause)"
- },
- "node_modules/@bufbuild/protoplugin": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-2.6.0.tgz",
- "integrity": "sha512-mfAwI+4GqUtbw/ddfyolEHaAL86ozRIVlOg2A+SVRbjx1CjsMc1YJO+hBSkt/pqfpR+PmWBbZLstHbXP8KGtMQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@bufbuild/protobuf": "2.6.0",
- "@typescript/vfs": "^1.5.2",
- "typescript": "5.4.5"
- }
- },
- "node_modules/@bufbuild/protoplugin/node_modules/typescript": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
- "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.79.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.79.0.tgz",
- "integrity": "sha512-Ii/Zi6cfTl2EZBpX8msRPNkkCHcajA+ErXpbN2Xe2KySd1Nb4IzC/QWJlSl9VA9pIlYPQicRTDoZnoym/0uEAw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
- "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
- "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
- "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
- "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
- "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
- "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
- "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
- "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
- "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
- "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
- "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
- "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
- "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
- "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
- "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
- "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
- "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
- "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
- "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
- "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
- "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
- "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
- "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
- "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
- "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/websocket-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/websocket-transport/-/websocket-transport-1.0.0.tgz",
- "integrity": "sha512-4ZFxfiMH15PjLUC2eOMlS6GQeZCc/4wId/cZ4cfF8VOp4oz5WsDKaXgPa+uLocgczrlSQq9RiIGhQMDoMXpBSw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.79.0",
- "@protobuf-ts/plugin": "^2.11.0",
- "@protobuf-ts/runtime": "^2.11.0",
- "x-law": "^0.3.1"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@protobuf-ts/plugin": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/plugin/-/plugin-2.11.1.tgz",
- "integrity": "sha512-HyuprDcw0bEEJqkOWe1rnXUP0gwYLij8YhPuZyZk6cJbIgc/Q0IFgoHQxOXNIXAcXM4Sbehh6kjVnCzasElw1A==",
- "license": "Apache-2.0",
- "dependencies": {
- "@bufbuild/protobuf": "^2.4.0",
- "@bufbuild/protoplugin": "^2.4.0",
- "@protobuf-ts/protoc": "^2.11.1",
- "@protobuf-ts/runtime": "^2.11.1",
- "@protobuf-ts/runtime-rpc": "^2.11.1",
- "typescript": "^3.9"
- },
- "bin": {
- "protoc-gen-dump": "bin/protoc-gen-dump",
- "protoc-gen-ts": "bin/protoc-gen-ts"
- }
- },
- "node_modules/@protobuf-ts/plugin/node_modules/typescript": {
- "version": "3.9.10",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
- "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/@protobuf-ts/protoc": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/protoc/-/protoc-2.11.1.tgz",
- "integrity": "sha512-mUZJaV0daGO6HUX90o/atzQ6A7bbN2RSuHtdwo8SSF2Qoe3zHwa4IHyCN1evftTeHfLmdz+45qo47sL+5P8nyg==",
- "license": "Apache-2.0",
- "bin": {
- "protoc": "protoc.js"
- }
- },
- "node_modules/@protobuf-ts/runtime": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.11.1.tgz",
- "integrity": "sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==",
- "license": "(Apache-2.0 AND BSD-3-Clause)"
- },
- "node_modules/@protobuf-ts/runtime-rpc": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.11.1.tgz",
- "integrity": "sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@protobuf-ts/runtime": "^2.11.1"
- }
- },
- "node_modules/@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "node_modules/@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.11",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.11.tgz",
- "integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz",
- "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz",
- "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz",
- "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz",
- "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz",
- "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz",
- "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz",
- "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz",
- "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz",
- "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz",
- "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz",
- "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz",
- "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz",
- "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz",
- "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz",
- "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz",
- "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz",
- "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz",
- "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz",
- "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz",
- "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@swc/core": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.9.tgz",
- "integrity": "sha512-O+LfT2JlVMsIMWG9x+rdxg8GzpzeGtCZQfXV7cKc1PjIKUkLFf1QJ7okuseA4f/9vncu37dQ2ZcRrPKy0Ndd5g==",
- "dev": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.23"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.12.9",
- "@swc/core-darwin-x64": "1.12.9",
- "@swc/core-linux-arm-gnueabihf": "1.12.9",
- "@swc/core-linux-arm64-gnu": "1.12.9",
- "@swc/core-linux-arm64-musl": "1.12.9",
- "@swc/core-linux-x64-gnu": "1.12.9",
- "@swc/core-linux-x64-musl": "1.12.9",
- "@swc/core-win32-arm64-msvc": "1.12.9",
- "@swc/core-win32-ia32-msvc": "1.12.9",
- "@swc/core-win32-x64-msvc": "1.12.9"
- },
- "peerDependencies": {
- "@swc/helpers": ">=0.5.17"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.9.tgz",
- "integrity": "sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.9.tgz",
- "integrity": "sha512-hv2kls7Ilkm2EpeJz+I9MCil7pGS3z55ZAgZfxklEuYsxpICycxeH+RNRv4EraggN44ms+FWCjtZFu0LGg2V3g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.9.tgz",
- "integrity": "sha512-od9tDPiG+wMU9wKtd6y3nYJdNqgDOyLdgRRcrj1/hrbHoUPOM8wZQZdwQYGarw63iLXGgsw7t5HAF9Yc51ilFA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.9.tgz",
- "integrity": "sha512-6qx1ka9LHcLzxIgn2Mros+CZLkHK2TawlXzi/h7DJeNnzi8F1Hw0Yzjp8WimxNCg6s2n+o3jnmin1oXB7gg8rw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.9.tgz",
- "integrity": "sha512-yghFZWKPVVGbUdqiD7ft23G0JX6YFGDJPz9YbLLAwGuKZ9th3/jlWoQDAw1Naci31LQhVC+oIji6ozihSuwB2A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.9.tgz",
- "integrity": "sha512-SFUxyhWLZRNL8QmgGNqdi2Q43PNyFVkRZ2zIif30SOGFSxnxcf2JNeSeBgKIGVgaLSuk6xFVVCtJ3KIeaStgRg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.9.tgz",
- "integrity": "sha512-9FB0wM+6idCGTI20YsBNBg9xSWtkDBymnpaTCsZM3qDc0l4uOpJMqbfWhQvp17x7r/ulZfb2QY8RDvQmCL6AcQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.9.tgz",
- "integrity": "sha512-zHOusMVbOH9ik5RtRrMiGzLpKwxrPXgXkBm3SbUCa65HAdjV33NZ0/R9Rv1uPESALtEl2tzMYLUxYA5ECFDFhA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.9.tgz",
- "integrity": "sha512-aWZf0PqE0ot7tCuhAjRkDFf41AzzSQO0x2xRfTbnhpROp57BRJ/N5eee1VULO/UA2PIJRG7GKQky5bSGBYlFug==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.12.9",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.9.tgz",
- "integrity": "sha512-C25fYftXOras3P3anSUeXXIpxmEkdAcsIL9yrr0j1xepTZ/yKwpnQ6g3coj8UXdeJy4GTVlR6+Ow/QiBgZQNOg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/@swc/types": {
- "version": "0.1.23",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz",
- "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "22.16.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.0.tgz",
- "integrity": "sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==",
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@types/protobufjs": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/@types/protobufjs/-/protobufjs-6.0.0.tgz",
- "integrity": "sha512-A27RDExpAf3rdDjIrHKiJK6x8kqqJ4CmoChwtipfhVAn1p7+wviQFFP7dppn8FslSbHtQeVPvi8wNKkDjSYjHw==",
- "deprecated": "This is a stub types definition for protobufjs (https://github.com/dcodeIO/ProtoBuf.js). protobufjs provides its own type definitions, so you don't need @types/protobufjs installed!",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "protobufjs": "*"
- }
- },
- "node_modules/@typescript/vfs": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.1.tgz",
- "integrity": "sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.1.1"
- },
- "peerDependencies": {
- "typescript": "*"
- }
- },
- "node_modules/@vitejs/plugin-react-swc": {
- "version": "3.10.2",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.10.2.tgz",
- "integrity": "sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rolldown/pluginutils": "1.0.0-beta.11",
- "@swc/core": "^1.11.31"
- },
- "peerDependencies": {
- "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0"
- }
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.6",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
- "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.6",
- "@esbuild/android-arm": "0.25.6",
- "@esbuild/android-arm64": "0.25.6",
- "@esbuild/android-x64": "0.25.6",
- "@esbuild/darwin-arm64": "0.25.6",
- "@esbuild/darwin-x64": "0.25.6",
- "@esbuild/freebsd-arm64": "0.25.6",
- "@esbuild/freebsd-x64": "0.25.6",
- "@esbuild/linux-arm": "0.25.6",
- "@esbuild/linux-arm64": "0.25.6",
- "@esbuild/linux-ia32": "0.25.6",
- "@esbuild/linux-loong64": "0.25.6",
- "@esbuild/linux-mips64el": "0.25.6",
- "@esbuild/linux-ppc64": "0.25.6",
- "@esbuild/linux-riscv64": "0.25.6",
- "@esbuild/linux-s390x": "0.25.6",
- "@esbuild/linux-x64": "0.25.6",
- "@esbuild/netbsd-arm64": "0.25.6",
- "@esbuild/netbsd-x64": "0.25.6",
- "@esbuild/openbsd-arm64": "0.25.6",
- "@esbuild/openbsd-x64": "0.25.6",
- "@esbuild/openharmony-arm64": "0.25.6",
- "@esbuild/sunos-x64": "0.25.6",
- "@esbuild/win32-arm64": "0.25.6",
- "@esbuild/win32-ia32": "0.25.6",
- "@esbuild/win32-x64": "0.25.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/long": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
- "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
- "license": "Apache-2.0"
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/protobufjs": {
- "version": "7.5.3",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.3.tgz",
- "integrity": "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==",
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
- "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": ">=13.7.0",
- "long": "^5.0.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/rollup": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz",
- "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.8"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.44.2",
- "@rollup/rollup-android-arm64": "4.44.2",
- "@rollup/rollup-darwin-arm64": "4.44.2",
- "@rollup/rollup-darwin-x64": "4.44.2",
- "@rollup/rollup-freebsd-arm64": "4.44.2",
- "@rollup/rollup-freebsd-x64": "4.44.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.44.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.44.2",
- "@rollup/rollup-linux-arm64-gnu": "4.44.2",
- "@rollup/rollup-linux-arm64-musl": "4.44.2",
- "@rollup/rollup-linux-loongarch64-gnu": "4.44.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.44.2",
- "@rollup/rollup-linux-riscv64-musl": "4.44.2",
- "@rollup/rollup-linux-s390x-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-gnu": "4.44.2",
- "@rollup/rollup-linux-x64-musl": "4.44.2",
- "@rollup/rollup-win32-arm64-msvc": "4.44.2",
- "@rollup/rollup-win32-ia32-msvc": "4.44.2",
- "@rollup/rollup-win32-x64-msvc": "4.44.2",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "license": "MIT"
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- },
- "node_modules/x-law": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/x-law/-/x-law-0.3.1.tgz",
- "integrity": "sha512-Nvo6OKj6UL2LuzAc08uJkwIDkK2PsTEdpLiY82NkwMptuRpAA1V7arUl7ZY12BcgRYNq8uh1pdAu7G6VeQn7Hg==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- }
- }
-}
diff --git a/examples/websocket/client/package.json b/examples/websocket/client/package.json
deleted file mode 100644
index 6e62ff105..000000000
--- a/examples/websocket/client/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "client",
- "version": "1.0.0",
- "main": "index.js",
- "scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "preview": "vite preview"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "description": "",
- "devDependencies": {
- "@types/node": "^22.15.30",
- "@types/protobufjs": "^6.0.0",
- "@vitejs/plugin-react-swc": "^3.10.1",
- "typescript": "^5.8.3",
- "vite": "^6.3.5"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/websocket-transport": "^1.0.0",
- "protobufjs": "^7.4.0"
- }
-}
diff --git a/examples/websocket/client/src/app.ts b/examples/websocket/client/src/app.ts
deleted file mode 100644
index 2ef11b1db..000000000
--- a/examples/websocket/client/src/app.ts
+++ /dev/null
@@ -1,244 +0,0 @@
-/**
- * Copyright (c) 2024โ2025, Daily
- *
- * SPDX-License-Identifier: BSD 2-Clause License
- */
-
-/**
- * Pipecat Client Implementation
- *
- * This client connects to an RTVI-compatible bot server using WebSocket.
- *
- * Requirements:
- * - A running RTVI bot server (defaults to http://localhost:7860)
- */
-
-import {
- PipecatClient,
- PipecatClientOptions,
- RTVIEvent,
-} from '@pipecat-ai/client-js';
-import { WebSocketTransport } from '@pipecat-ai/websocket-transport';
-
-class WebsocketClientApp {
- private pcClient: PipecatClient | null = null;
- private connectBtn: HTMLButtonElement | null = null;
- private disconnectBtn: HTMLButtonElement | null = null;
- private statusSpan: HTMLElement | null = null;
- private debugLog: HTMLElement | null = null;
- private botAudio: HTMLAudioElement;
-
- constructor() {
- console.log('WebsocketClientApp');
- this.botAudio = document.createElement('audio');
- this.botAudio.autoplay = true;
- //this.botAudio.playsInline = true;
- document.body.appendChild(this.botAudio);
-
- this.setupDOMElements();
- this.setupEventListeners();
- }
-
- /**
- * Set up references to DOM elements and create necessary media elements
- */
- private setupDOMElements(): void {
- this.connectBtn = document.getElementById(
- 'connect-btn'
- ) as HTMLButtonElement;
- this.disconnectBtn = document.getElementById(
- 'disconnect-btn'
- ) as HTMLButtonElement;
- this.statusSpan = document.getElementById('connection-status');
- this.debugLog = document.getElementById('debug-log');
- }
-
- /**
- * Set up event listeners for connect/disconnect buttons
- */
- private setupEventListeners(): void {
- this.connectBtn?.addEventListener('click', () => this.connect());
- this.disconnectBtn?.addEventListener('click', () => this.disconnect());
- }
-
- /**
- * Add a timestamped message to the debug log
- */
- private log(message: string): void {
- if (!this.debugLog) return;
- const entry = document.createElement('div');
- entry.textContent = `${new Date().toISOString()} - ${message}`;
- if (message.startsWith('User: ')) {
- entry.style.color = '#2196F3';
- } else if (message.startsWith('Bot: ')) {
- entry.style.color = '#4CAF50';
- }
- this.debugLog.appendChild(entry);
- this.debugLog.scrollTop = this.debugLog.scrollHeight;
- console.log(message);
- }
-
- /**
- * Update the connection status display
- */
- private updateStatus(status: string): void {
- if (this.statusSpan) {
- this.statusSpan.textContent = status;
- }
- this.log(`Status: ${status}`);
- }
-
- /**
- * Check for available media tracks and set them up if present
- * This is called when the bot is ready or when the transport state changes to ready
- */
- setupMediaTracks() {
- if (!this.pcClient) return;
- const tracks = this.pcClient.tracks();
- if (tracks.bot?.audio) {
- this.setupAudioTrack(tracks.bot.audio);
- }
- }
-
- /**
- * Set up listeners for track events (start/stop)
- * This handles new tracks being added during the session
- */
- setupTrackListeners() {
- if (!this.pcClient) return;
-
- // Listen for new tracks starting
- this.pcClient.on(RTVIEvent.TrackStarted, (track, participant) => {
- // Only handle non-local (bot) tracks
- if (!participant?.local && track.kind === 'audio') {
- this.setupAudioTrack(track);
- }
- });
-
- // Listen for tracks stopping
- this.pcClient.on(RTVIEvent.TrackStopped, (track, participant) => {
- this.log(
- `Track stopped: ${track.kind} from ${participant?.name || 'unknown'}`
- );
- });
- }
-
- /**
- * Set up an audio track for playback
- * Handles both initial setup and track updates
- */
- private setupAudioTrack(track: MediaStreamTrack): void {
- this.log('Setting up audio track');
- if (
- this.botAudio.srcObject &&
- 'getAudioTracks' in this.botAudio.srcObject
- ) {
- const oldTrack = this.botAudio.srcObject.getAudioTracks()[0];
- if (oldTrack?.id === track.id) return;
- }
- this.botAudio.srcObject = new MediaStream([track]);
- }
-
- /**
- * Initialize and connect to the bot
- * This sets up the Pipecat client, initializes devices, and establishes the connection
- */
- public async connect(): Promise {
- try {
- const startTime = Date.now();
-
- //const transport = new DailyTransport();
- const PipecatConfig: PipecatClientOptions = {
- transport: new WebSocketTransport(),
- enableMic: true,
- enableCam: false,
- callbacks: {
- onConnected: () => {
- this.updateStatus('Connected');
- if (this.connectBtn) this.connectBtn.disabled = true;
- if (this.disconnectBtn) this.disconnectBtn.disabled = false;
- },
- onDisconnected: () => {
- this.updateStatus('Disconnected');
- if (this.connectBtn) this.connectBtn.disabled = false;
- if (this.disconnectBtn) this.disconnectBtn.disabled = true;
- this.log('Client disconnected');
- },
- onBotReady: (data) => {
- this.log(`Bot ready: ${JSON.stringify(data)}`);
- this.setupMediaTracks();
- },
- onUserTranscript: (data) => {
- if (data.final) {
- this.log(`User: ${data.text}`);
- }
- },
- onBotTranscript: (data) => this.log(`Bot: ${data.text}`),
- onMessageError: (error) => console.error('Message error:', error),
- onError: (error) => console.error('Error:', error),
- },
- };
- this.pcClient = new PipecatClient(PipecatConfig);
- // @ts-ignore
- window.pcClient = this.pcClient; // Expose for debugging
- this.setupTrackListeners();
-
- this.log('Initializing devices...');
- await this.pcClient.initDevices();
-
- this.log('Connecting to bot...');
- await this.pcClient.connect({
- // The baseURL and endpoint of your bot server that the client will connect to
- endpoint: 'http://localhost:7860/connect',
- });
-
- const timeTaken = Date.now() - startTime;
- this.log(`Connection complete, timeTaken: ${timeTaken}`);
- } catch (error) {
- this.log(`Error connecting: ${(error as Error).message}`);
- this.updateStatus('Error');
- // Clean up if there's an error
- if (this.pcClient) {
- try {
- await this.pcClient.disconnect();
- } catch (disconnectError) {
- this.log(`Error during disconnect: ${disconnectError}`);
- }
- }
- }
- }
-
- /**
- * Disconnect from the bot and clean up media resources
- */
- public async disconnect(): Promise {
- if (this.pcClient) {
- try {
- await this.pcClient.disconnect();
- this.pcClient = null;
- if (
- this.botAudio.srcObject &&
- 'getAudioTracks' in this.botAudio.srcObject
- ) {
- this.botAudio.srcObject
- .getAudioTracks()
- .forEach((track) => track.stop());
- this.botAudio.srcObject = null;
- }
- } catch (error) {
- this.log(`Error disconnecting: ${(error as Error).message}`);
- }
- }
- }
-}
-
-declare global {
- interface Window {
- WebsocketClientApp: typeof WebsocketClientApp;
- }
-}
-
-window.addEventListener('DOMContentLoaded', () => {
- window.WebsocketClientApp = WebsocketClientApp;
- new WebsocketClientApp();
-});
diff --git a/examples/websocket/client/src/style.css b/examples/websocket/client/src/style.css
deleted file mode 100644
index 9c147266e..000000000
--- a/examples/websocket/client/src/style.css
+++ /dev/null
@@ -1,98 +0,0 @@
-body {
- margin: 0;
- padding: 20px;
- font-family: Arial, sans-serif;
- background-color: #f0f0f0;
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
-}
-
-.status-bar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px;
- background-color: #fff;
- border-radius: 8px;
- margin-bottom: 20px;
-}
-
-.controls button {
- padding: 8px 16px;
- margin-left: 10px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-
-#connect-btn {
- background-color: #4caf50;
- color: white;
-}
-
-#disconnect-btn {
- background-color: #f44336;
- color: white;
-}
-
-button:disabled {
- opacity: 0.5;
- cursor: not-allowed;
-}
-
-.main-content {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
- margin-bottom: 20px;
-}
-
-.bot-container {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#bot-video-container {
- width: 640px;
- height: 360px;
- background-color: #e0e0e0;
- border-radius: 8px;
- margin: 20px auto;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-#bot-video-container video {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
-
-.debug-panel {
- background-color: #fff;
- border-radius: 8px;
- padding: 20px;
-}
-
-.debug-panel h3 {
- margin: 0 0 10px 0;
- font-size: 16px;
- font-weight: bold;
-}
-
-#debug-log {
- height: 500px;
- overflow-y: auto;
- background-color: #f8f8f8;
- padding: 10px;
- border-radius: 4px;
- font-family: monospace;
- font-size: 12px;
- line-height: 1.4;
-}
diff --git a/examples/websocket/client/tsconfig.json b/examples/websocket/client/tsconfig.json
deleted file mode 100644
index c9c555d96..000000000
--- a/examples/websocket/client/tsconfig.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "commonjs", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
- // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
- // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
- // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
- // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
- // "noUncheckedSideEffectImports": true, /* Check side effect imports. */
- // "resolveJsonModule": true, /* Enable importing .json files. */
- // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- // "outDir": "./", /* Specify an output folder for all emitted files. */
- // "removeComments": true, /* Disable emitting comments. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
- // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
- }
-}
diff --git a/examples/websocket/client/vite.config.js b/examples/websocket/client/vite.config.js
deleted file mode 100644
index daf85167d..000000000
--- a/examples/websocket/client/vite.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { defineConfig } from 'vite';
-import react from '@vitejs/plugin-react-swc';
-
-export default defineConfig({
- plugins: [react()],
- server: {
- proxy: {
- // Proxy /api requests to the backend server
- '/connect': {
- target: 'http://0.0.0.0:7860', // Replace with your backend URL
- changeOrigin: true,
- },
- },
- },
-});
diff --git a/examples/websocket/server/bot_fast_api.py b/examples/websocket/server/bot_fast_api.py
deleted file mode 100644
index fa1005136..000000000
--- a/examples/websocket/server/bot_fast_api.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import os
-import sys
-
-from dotenv import load_dotenv
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.serializers.protobuf import ProtobufFrameSerializer
-from pipecat.services.gemini_multimodal_live import GeminiMultimodalLiveLLMService
-from pipecat.transports.network.fastapi_websocket import (
- FastAPIWebsocketParams,
- FastAPIWebsocketTransport,
-)
-
-load_dotenv(override=True)
-
-logger.remove(0)
-logger.add(sys.stderr, level="DEBUG")
-
-
-SYSTEM_INSTRUCTION = f"""
-"You are Gemini Chatbot, a friendly, helpful robot.
-
-Your goal is to demonstrate your capabilities in a succinct way.
-
-Your output will be converted to audio so don't include special characters in your answers.
-
-Respond to what the user said in a creative and helpful way. Keep your responses brief. One or two sentences at most.
-"""
-
-
-async def run_bot(websocket_client):
- ws_transport = FastAPIWebsocketTransport(
- websocket=websocket_client,
- params=FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- add_wav_header=False,
- vad_analyzer=SileroVADAnalyzer(),
- serializer=ProtobufFrameSerializer(),
- ),
- )
-
- llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- voice_id="Puck", # Aoede, Charon, Fenrir, Kore, Puck
- transcribe_model_audio=True,
- system_instruction=SYSTEM_INSTRUCTION,
- )
-
- context = OpenAILLMContext(
- [
- {
- "role": "user",
- "content": "Start by greeting the user warmly and introducing yourself.",
- }
- ],
- )
- context_aggregator = llm.create_context_aggregator(context)
-
- # RTVI events for Pipecat client UI
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- ws_transport.input(),
- context_aggregator.user(),
- rtvi,
- llm, # LLM
- ws_transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- logger.info("Pipecat client ready.")
- await rtvi.set_bot_ready()
- # Kick off the conversation.
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @ws_transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info("Pipecat Client connected")
-
- @ws_transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info("Pipecat Client disconnected")
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False)
-
- await runner.run(task)
diff --git a/examples/websocket/server/bot_websocket_server.py b/examples/websocket/server/bot_websocket_server.py
deleted file mode 100644
index e88ec60dd..000000000
--- a/examples/websocket/server/bot_websocket_server.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import os
-
-from loguru import logger
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
-from pipecat.serializers.protobuf import ProtobufFrameSerializer
-from pipecat.services.gemini_multimodal_live import GeminiMultimodalLiveLLMService
-from pipecat.transports.network.websocket_server import (
- WebsocketServerParams,
- WebsocketServerTransport,
-)
-
-SYSTEM_INSTRUCTION = f"""
-"You are Gemini Chatbot, a friendly, helpful robot.
-
-Your goal is to demonstrate your capabilities in a succinct way.
-
-Your output will be converted to audio so don't include special characters in your answers.
-
-Respond to what the user said in a creative and helpful way. Keep your responses brief. One or two sentences at most.
-"""
-
-
-async def run_bot_websocket_server():
- ws_transport = WebsocketServerTransport(
- params=WebsocketServerParams(
- serializer=ProtobufFrameSerializer(),
- audio_in_enabled=True,
- audio_out_enabled=True,
- add_wav_header=False,
- vad_analyzer=SileroVADAnalyzer(),
- session_timeout=60 * 3, # 3 minutes
- )
- )
-
- llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- voice_id="Puck", # Aoede, Charon, Fenrir, Kore, Puck
- transcribe_model_audio=True,
- system_instruction=SYSTEM_INSTRUCTION,
- )
-
- context = OpenAILLMContext(
- [
- {
- "role": "user",
- "content": "Start by greeting the user warmly and introducing yourself.",
- }
- ],
- )
- context_aggregator = llm.create_context_aggregator(context)
-
- # RTVI events for Pipecat client UI
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- ws_transport.input(),
- context_aggregator.user(),
- rtvi,
- llm, # LLM
- ws_transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- logger.info("Pipecat client ready.")
- await rtvi.set_bot_ready()
- # Kick off the conversation.
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @ws_transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info("Pipecat Client connected")
-
- @ws_transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info("Pipecat Client disconnected")
- await task.cancel()
-
- @ws_transport.event_handler("on_session_timeout")
- async def on_session_timeout(transport, client):
- logger.info(f"Entering in timeout for {client.remote_address}")
- await task.cancel()
-
- runner = PipelineRunner()
-
- await runner.run(task)
diff --git a/examples/websocket/server/env.example b/examples/websocket/server/env.example
deleted file mode 100644
index ceb211161..000000000
--- a/examples/websocket/server/env.example
+++ /dev/null
@@ -1,2 +0,0 @@
-GOOGLE_API_KEY=
-WEBSOCKET_SERVER= # Options: 'fast_api' or 'websocket_server'
\ No newline at end of file
diff --git a/examples/websocket/server/requirements.txt b/examples/websocket/server/requirements.txt
deleted file mode 100644
index db4eb0e5b..000000000
--- a/examples/websocket/server/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-python-dotenv
-fastapi[all]
-uvicorn
-pipecat-ai[silero,websocket,google]
diff --git a/examples/websocket/server/server.py b/examples/websocket/server/server.py
deleted file mode 100644
index 7a528f480..000000000
--- a/examples/websocket/server/server.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-import asyncio
-import os
-from contextlib import asynccontextmanager
-from typing import Any, Dict
-
-import uvicorn
-from dotenv import load_dotenv
-from fastapi import FastAPI, Request, WebSocket
-from fastapi.middleware.cors import CORSMiddleware
-
-# Load environment variables
-load_dotenv(override=True)
-
-from bot_fast_api import run_bot
-from bot_websocket_server import run_bot_websocket_server
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """Handles FastAPI startup and shutdown."""
- yield # Run app
-
-
-# Initialize FastAPI app with lifespan manager
-app = FastAPI(lifespan=lifespan)
-
-# Configure CORS to allow requests from any origin
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-@app.websocket("/ws")
-async def websocket_endpoint(websocket: WebSocket):
- await websocket.accept()
- print("WebSocket connection accepted")
- try:
- await run_bot(websocket)
- except Exception as e:
- print(f"Exception in run_bot: {e}")
-
-
-@app.post("/connect")
-async def bot_connect(request: Request) -> Dict[Any, Any]:
- server_mode = os.getenv("WEBSOCKET_SERVER", "fast_api")
- if server_mode == "websocket_server":
- ws_url = "ws://localhost:8765"
- else:
- ws_url = "ws://localhost:7860/ws"
- return {"ws_url": ws_url}
-
-
-async def main():
- server_mode = os.getenv("WEBSOCKET_SERVER", "fast_api")
- tasks = []
- try:
- if server_mode == "websocket_server":
- tasks.append(run_bot_websocket_server())
-
- config = uvicorn.Config(app, host="0.0.0.0", port=7860)
- server = uvicorn.Server(config)
- tasks.append(server.serve())
-
- await asyncio.gather(*tasks)
- except asyncio.CancelledError:
- print("Tasks cancelled (probably due to shutdown).")
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/examples/word-wrangler-gemini-live/README.md b/examples/word-wrangler-gemini-live/README.md
deleted file mode 100644
index e5363db26..000000000
--- a/examples/word-wrangler-gemini-live/README.md
+++ /dev/null
@@ -1,331 +0,0 @@
-# Word Wrangler
-
-Word Wrangler is a voice-based word guessing game powered by [Pipecat](https://github.com/pipecat-ai/pipecat) and the [Gemini Live API](https://ai.google.dev/gemini-api/docs/live). The game is available in two versions: a web-based experience and a phone-based experience. Test your description skills in this AI-powered twist on classic word games!
-
-## Game Modes
-
-### Web-Based Game
-
-In this version, you provide the words, and an AI player attempts to guess them based on your descriptions.
-
-**Try it now:** https://word-wrangler.vercel.app
-
-
-
-### Phone-Based Game
-
-In this three-way conversation, an AI host provides words, you describe them without saying the actual word, and an AI player tries to guess. The host tracks your score and manages game flow.
-
-**Try it now:** Call +1-929-**LLM-GAME** (+1-929-556-4263)
-
-## Game Rules
-
-### Web-based Game
-
-1. The web app provides words for you to describe
-2. You describe the word WITHOUT saying any part of it
-3. The AI player tries to guess based on your description
-4. The app will automatically check the guesses and keep score
-5. Click "Skip" to advance to the next word
-6. You have 60 seconds to score as many points as possible
-
-### Phone Game
-
-1. The AI host provides a word for you to describe
-2. You describe the word WITHOUT saying any part of it
-3. The AI player tries to guess based on your description
-4. Score points for each correct guess
-5. Use commands like "skip" to get a new word or "repeat" to hear the current word again
-6. You have 120 seconds to score as many points as possible
-
-## Architecture
-
-### Web Game Architecture
-
-The web game uses a simple linear flow:
-
-1. **Transport Input** - Receives audio from the web browser via a Daily WebRTC transport.
-2. **RTVIProcessor** - RTVI is a standard for client/server communication in a voice AI context. This processor collects server-side information and makes it available to the client. Additionally, the client can send events to the server, which are handled through this processor.
-3. **STTMuteFilter** - Filters out speech during specific conditions. In this game, the user's initial speech is "muted", ensuring that the bot can deliver the entire initial message without being interrupted.
-4. **User Context Aggregator** - Aggregates user messages as part of the conversation context.
-5. **LLM** - The LLM powers the AI player's interactions.
-6. **Transport Output** - Sends audio back to the browser using the Daily WebRTC transport.
-7. **Assistant Context Aggregator** - Aggregates assistant messages as part of the conversation context.
-
-### Phone Game Architecture
-
-The phone game implements a three-way conversation using Pipecat's parallel pipeline architecture. This design addresses the fundamental challenge of LLMs - they're built for turn-based interactions, while this game requires real-time, multi-participant conversation management.
-
-
-
-#### Conversation Participants
-
-**Audio Flow Requirements:**
-
-- **User:** Must hear both the Host and Player outputs; must be heard by both Host and Player
-- **Host:** Must hear the User and Player inputs; its output must be heard by User but NOT by Player
-- **Player:** Must hear only the User inputs; its output must be heard by both User and Host
-
-#### Technical Implementation
-
-The parallel pipeline pattern allows us to create two isolated processing branches, with controlled audio flow between them:
-
-1. **Transport Input** - Receives audio from the phone call (Twilio)
-2. **Audio Branch Separation:**
- - **Left Branch (Host Pipeline):** `ConsumerProcessor โ Host LLM โ Game State Tracker โ TTS โ Bot Stop Detector`
- - **Right Branch (Player Pipeline):** `StartFrame Gate โ Player LLM โ ProducerProcessor`
-
-**Host LLM Configuration:**
-
-The Host uses Gemini Live API, configured with specific response patterns to handle different input types:
-
-```
-- Correct guess: "Correct! That's [N] points. Your next word is [new word]"
-- Incorrect guess: "NO" (filtered out by TTS filter)
-- User descriptions: "IGNORE" (filtered out by TTS filter)
-- Skip requests: "The new word is [new word]"
-- Repeat requests: "Your word is [current word]"
-```
-
-**Audio Flow Management:**
-
-By default, all input audio flows to both branches, so both LLMs hear the user. To implement the complex routing:
-
-1. **Producer/Consumer Pattern:** Captures the Player's output audio and feeds it to the Host
-
- - `ProducerProcessor` filters TTSAudioRawFrames from the Player
- - Transforms them from 24kHz to 16kHz (required by Gemini Live)
- - Passes them to the `ConsumerProcessor` at the top of the Host branch
-
-2. **Text Filtering:** The `HostResponseTextFilter` intercepts the "NO" and "IGNORE" responses
-
- - Prevents TTS vocalization of these responses
- - Ensures that only meaningful Host responses are spoken
-
-3. **Host-Player Synchronization:**
-
- - `BotStoppedSpeakingNotifier` detects when the Host finishes speaking
- - `GameStateTracker` parses the streamed text to detect new words and track score
- - `NewWordNotifier` triggers the `ResettablePlayerLLM` to disconnect and reconnect when a new word is presented
- - This reset ensures the Player has no context of previous words or guesses
-
-4. **StartFrameGate:** The gate holds the Player's StartFrame until the Host has completed its introduction
- - Ensures the Player doesn't start interacting until the game has been properly set up
-
-All processed audio is collected at the end of the Parallel Pipeline and sent via the transport output back to Twilio.
-
-#### Game State Management
-
-The implementation tracks:
-
-- Current words being guessed
-- Running score (points for correct guesses)
-- Game duration with automatic timeout
-
-This architecture enables complex interaction patterns that would be difficult to achieve with traditional turn-based conversation models, allowing each AI participant to function effectively in their specific game role.
-
-## Run Locally
-
-### Web Game
-
-#### Run the Server
-
-1. Switch to the server directory:
-
- ```bash
- cd server
- ```
-
-2. Set up and activate your virtual environment:
-
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
-3. Install dependencies:
-
- ```bash
- pip install -r requirements.txt
- ```
-
-4. Create an .env file and add your API keys:
-
- ```bash
- cp env.example .env
- ```
-
-5. Add environment variables for:
-
- ```
- DAILY_API_KEY=
- DAILY_SAMPLE_ROOM_URL=
- GOOGLE_API_KEY=
- ```
-
-6. Run the server:
-
- ```bash
- LOCAL_RUN=1 python server.py
- ```
-
-#### Run the Client
-
-1. In a new terminal window, navigate to client:
-
- ```bash
- cd client
- ```
-
-2. Install dependencies:
-
- ```bash
- npm install
- ```
-
-3. Create an .env.local file:
-
- ```bash
- cp env.example .env.local
- ```
-
-4. In .env.local:
-
- - `NEXT_PUBLIC_API_BASE_URL=http://localhost:7860` is used for local development. For deployments, either remove this env var or replace with `/api`.
- - `AGENT_NAME` should be set to the name of your deployed Pipecat agent (e.g., "word-wrangler").
- - `PIPECAT_CLOUD_API_KEY` is used only for deployments to Pipecat Cloud.
-
-5. Run the app:
-
- ```bash
- npm run dev
- ```
-
-6. Open http://localhost:3000 in your browser
-
-### Phone Game
-
-There are two versions of the phone game:
-
-1. **Local Development** (`bot_phone_local.py`):
-
- - For testing locally before deployment
-
-2. **Deployment** (`bot_phone_twilio.py`):
- - Ready for deployment to Pipecat Cloud
-
-#### Running Locally
-
-1. Set up and activate your virtual environment:
-
- ```bash
- python3 -m venv venv
- source venv/bin/activate # On Windows: venv\Scripts\activate
- ```
-
-2. Install dependencies:
-
- ```bash
- pip install -r requirements.txt
- ```
-
-3. Create an .env file in the server directory with your API keys:
-
- ```bash
- cd server
- cp env.example .env
- ```
-
-4. Configure Daily information in your .env:
-
- ```
- DAILY_API_KEY=your_daily_api_key
- DAILY_SAMPLE_ROOM_URL=your_daily_room_url
- GOOGLE_API_KEY=your_google_api_key
- GOOGLE_TEST_CREDENTIALS_FILE=path_to_credentials_file
- ```
-
-5. Run the local bot:
-
- ```bash
- LOCAL_RUN=1 python bot_phone_local.py
- ```
-
-## Deployment
-
-### Web Game
-
-#### Deploy your Server
-
-You can deploy your server code using Pipecat Cloud. For a full walkthrough, start with the [Pipecat Cloud Quickstart](https://docs.pipecat.daily.co/quickstart).
-
-Here are the steps you'll need to complete:
-
-- Build, tag, and push your Docker image to a registry.
-- Create Pipecat Cloud secrets using the CLI or dashboard. For this agent, you only need a `GOOGLE_API_KEY`. Your `DAILY_API_KEY` is automatically applied.
-- Deploy your agent image. You can use a pcc-deploy.toml file to make deploying easier. For example:
-
-```toml
-agent_name = "word-wrangler"
-image = "your-dockerhub-name/word-wrangler:0.1"
-secret_set = "word-wrangler-secrets"
-enable_krisp = true
-
-[scaling]
- min_instances = 1
- max_instances = 5
-```
-
-Then, you can deploy with the CLI using `pcc deploy`.
-
-- Finally, confirm that your agent is deployed. You'll get feedback in the terminal.
-
-#### Deploy your Client
-
-This project uses TypeScript, React, and Next.js, making it a perfect fit for [Vercel](https://vercel.com/).
-
-- In your client directory, install Vercel's CLI tool: `npm install -g vercel`
-- Verify it's installed using `vercel --version`
-- Log in your Vercel account using `vercel login`
-- Deploy your client to Vercel using `vercel`
-
-### Phone Game
-
-#### Deploy your Server
-
-Again, we'll use Pipecat Cloud. Follow the steps from above. The only difference will be the secrets required; in addition to a GOOGLE_API_KEY, you'll need `GOOGLE_APPLICATION_CREDENTIALS` in the format of a .json file with your [Google Cloud service account](https://console.cloud.google.com/iam-admin/serviceaccounts) information.
-
-You'll need to modify the Dockerfile so that the credentials.json and word_list.py are accessible. This Dockerfile will work:
-
-```Dockerfile
-FROM dailyco/pipecat-base:latest
-
-COPY ./requirements.txt requirements.txt
-
-RUN pip install --no-cache-dir --upgrade -r requirements.txt
-
-COPY ./word_list.py word_list.py
-COPY ./credentials.json credentials.json
-COPY ./bot_phone_twilio.py bot.py
-```
-
-Note: Your `credentials.json` file should have your Google service account credentials.
-
-#### Buy and Configure a Twilio Number
-
-Check out the [Twilio Websocket Telephony guide](https://docs.pipecat.daily.co/pipecat-in-production/telephony/twilio-mediastreams) for a step-by-step walkthrough on how to purchase a phone number, configure your TwiML, and make or receive calls.
-
-## Tech stack
-
-Both games are built using:
-
-- [Pipecat](https://www.pipecat.ai/) framework for real-time voice conversation
-- Google's Gemini Live API
-- Real-time communication (Web via Daily, Phone via Twilio)
-
-The phone game features:
-
-- Parallel processing of host and player interactions
-- State tracking for game progress and scoring
-- Dynamic word selection from multiple categories
-- Automated game timing and scoring
diff --git a/examples/word-wrangler-gemini-live/client/.gitignore b/examples/word-wrangler-gemini-live/client/.gitignore
deleted file mode 100644
index 5ef6a5207..000000000
--- a/examples/word-wrangler-gemini-live/client/.gitignore
+++ /dev/null
@@ -1,41 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.*
-.yarn/*
-!.yarn/patches
-!.yarn/plugins
-!.yarn/releases
-!.yarn/versions
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-.pnpm-debug.log*
-
-# env files (can opt-in for committing if needed)
-.env*
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
diff --git a/examples/word-wrangler-gemini-live/client/env.example b/examples/word-wrangler-gemini-live/client/env.example
deleted file mode 100644
index 271dc721d..000000000
--- a/examples/word-wrangler-gemini-live/client/env.example
+++ /dev/null
@@ -1,3 +0,0 @@
-NEXT_PUBLIC_API_BASE_URL=http://localhost:7860
-PIPECAT_CLOUD_API_KEY=""
-AGENT_NAME=word-wrangler
\ No newline at end of file
diff --git a/examples/word-wrangler-gemini-live/client/eslint.config.mjs b/examples/word-wrangler-gemini-live/client/eslint.config.mjs
deleted file mode 100644
index c85fb67c4..000000000
--- a/examples/word-wrangler-gemini-live/client/eslint.config.mjs
+++ /dev/null
@@ -1,16 +0,0 @@
-import { dirname } from "path";
-import { fileURLToPath } from "url";
-import { FlatCompat } from "@eslint/eslintrc";
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
-
-const compat = new FlatCompat({
- baseDirectory: __dirname,
-});
-
-const eslintConfig = [
- ...compat.extends("next/core-web-vitals", "next/typescript"),
-];
-
-export default eslintConfig;
diff --git a/examples/word-wrangler-gemini-live/client/next.config.ts b/examples/word-wrangler-gemini-live/client/next.config.ts
deleted file mode 100644
index 391516359..000000000
--- a/examples/word-wrangler-gemini-live/client/next.config.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import type { NextConfig } from "next";
-
-const nextConfig: NextConfig = {
- /* config options here */
- reactStrictMode: true,
-};
-
-export default nextConfig;
diff --git a/examples/word-wrangler-gemini-live/client/package-lock.json b/examples/word-wrangler-gemini-live/client/package-lock.json
deleted file mode 100644
index 2838f1b4c..000000000
--- a/examples/word-wrangler-gemini-live/client/package-lock.json
+++ /dev/null
@@ -1,6395 +0,0 @@
-{
- "name": "client",
- "version": "0.1.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "client",
- "version": "0.1.0",
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/client-react": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0",
- "@tabler/icons-react": "^3.31.0",
- "@tailwindcss/postcss": "^4.1.3",
- "jotai": "^2.12.5",
- "js-confetti": "^0.12.0",
- "next": "15.2.4",
- "react": "^19.0.0",
- "react-dom": "^19.0.0"
- },
- "devDependencies": {
- "@eslint/eslintrc": "^3",
- "@types/node": "^20",
- "@types/react": "^19",
- "@types/react-dom": "^19",
- "eslint": "^9",
- "eslint-config-next": "15.2.4",
- "postcss": "^8.5.3",
- "tailwindcss": "^4.1.3",
- "typescript": "^5"
- }
- },
- "node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
- "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@daily-co/daily-js": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@daily-co/daily-js/-/daily-js-0.77.0.tgz",
- "integrity": "sha512-icNXKieKAkRR/C5dcPjrCkL1jQGFp5C5WtLHy5uHAdTztm+mo9wlPJuehbWaGOM3TV24mgWHZ/+8jOys1G0I4w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@sentry/browser": "^8.33.1",
- "bowser": "^2.8.1",
- "dequal": "^2.0.3",
- "events": "^3.1.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@emnapi/core": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz",
- "integrity": "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.0.3",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz",
- "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.3.tgz",
- "integrity": "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
- "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/config-array": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
- "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/object-schema": "^2.1.6",
- "debug": "^4.3.1",
- "minimatch": "^3.1.2"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/config-helpers": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
- "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/core": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
- "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
- "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^10.0.1",
- "globals": "^14.0.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "9.30.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz",
- "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- }
- },
- "node_modules/@eslint/object-schema": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
- "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/plugin-kit": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz",
- "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^0.15.1",
- "levn": "^0.4.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
- "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@humanfs/core": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
- "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node": {
- "version": "0.16.6",
- "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
- "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanfs/core": "^0.19.1",
- "@humanwhocodes/retry": "^0.3.0"
- },
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
- "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/retry": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
- "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@img/sharp-darwin-arm64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
- "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.0.4"
- }
- },
- "node_modules/@img/sharp-darwin-x64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
- "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.0.4"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
- "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
- "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
- "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
- "cpu": [
- "arm"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
- "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
- "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
- "cpu": [
- "s390x"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
- "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
- "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
- "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-linux-arm": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
- "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.0.5"
- }
- },
- "node_modules/@img/sharp-linux-arm64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
- "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.0.4"
- }
- },
- "node_modules/@img/sharp-linux-s390x": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
- "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.0.4"
- }
- },
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
- "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.0.4"
- }
- },
- "node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
- "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
- }
- },
- "node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
- "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
- }
- },
- "node_modules/@img/sharp-wasm32": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
- "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
- "cpu": [
- "wasm32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.2.0"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-ia32": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
- "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
- "cpu": [
- "ia32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
- "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@isaacs/fs-minipass": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
- "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
- "license": "ISC",
- "dependencies": {
- "minipass": "^7.0.4"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
- "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
- "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.29",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
- "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "0.2.11",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz",
- "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.4.3",
- "@emnapi/runtime": "^1.4.3",
- "@tybys/wasm-util": "^0.9.0"
- }
- },
- "node_modules/@next/env": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz",
- "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==",
- "license": "MIT"
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.4.tgz",
- "integrity": "sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-glob": "3.3.1"
- }
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz",
- "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz",
- "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz",
- "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz",
- "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz",
- "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz",
- "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz",
- "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz",
- "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nolyfill/is-core-module": {
- "version": "1.0.39",
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.4.0"
- }
- },
- "node_modules/@pipecat-ai/client-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-js/-/client-js-1.0.0.tgz",
- "integrity": "sha512-c+LtwyG7KlEPxDImXnxlNrFIlq0I3nd6R3gmLHfDr3fAq5zmlOrzZCeOPWWRhPFvBO+MNSoVrmNeDv6DJWsMPA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@types/events": "^3.0.3",
- "bowser": "^2.11.0",
- "clone-deep": "^4.0.1",
- "events": "^3.3.0",
- "typed-emitter": "^2.1.0",
- "uuid": "^10.0.0"
- }
- },
- "node_modules/@pipecat-ai/client-react": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/client-react/-/client-react-1.0.0.tgz",
- "integrity": "sha512-vhyKeFnQlN6311w4f+g+45rLQcn6Qmd5CI933T7wV8Yti8qHi2Tf54mQ9CS7X1lU0wgl7KLDMi/8p+7JaUoTfg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "jotai": "^2.9.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "*",
- "react": ">=18",
- "react-dom": ">=18"
- }
- },
- "node_modules/@pipecat-ai/daily-transport": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@pipecat-ai/daily-transport/-/daily-transport-1.0.0.tgz",
- "integrity": "sha512-iXmv9Et/TGPvJoeOY+ZBPv+a3pbqT502jco2MBHl8l2VrtztkidjDwiOkPfPdD191CCwaSbV5laSYALsD0AyxA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@daily-co/daily-js": "^0.77.0"
- },
- "peerDependencies": {
- "@pipecat-ai/client-js": "~1.0.0"
- }
- },
- "node_modules/@rtsao/scc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz",
- "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@sentry-internal/browser-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.55.0.tgz",
- "integrity": "sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/feedback": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.55.0.tgz",
- "integrity": "sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==",
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.55.0.tgz",
- "integrity": "sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry-internal/replay-canvas": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.55.0.tgz",
- "integrity": "sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/replay": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/browser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.55.0.tgz",
- "integrity": "sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==",
- "license": "MIT",
- "dependencies": {
- "@sentry-internal/browser-utils": "8.55.0",
- "@sentry-internal/feedback": "8.55.0",
- "@sentry-internal/replay": "8.55.0",
- "@sentry-internal/replay-canvas": "8.55.0",
- "@sentry/core": "8.55.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@sentry/core": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.55.0.tgz",
- "integrity": "sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "license": "Apache-2.0"
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.15",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
- "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@tabler/icons": {
- "version": "3.34.0",
- "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.34.0.tgz",
- "integrity": "sha512-jtVqv0JC1WU2TTEBN32D9+R6mc1iEBuPwLnBsWaR02SIEciu9aq5806AWkCHuObhQ4ERhhXErLEK7Fs+tEZxiA==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/codecalm"
- }
- },
- "node_modules/@tabler/icons-react": {
- "version": "3.34.0",
- "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.34.0.tgz",
- "integrity": "sha512-OpEIR2iZsIXECtAIMbn1zfKfQ3zKJjXyIZlkgOGUL9UkMCFycEiF2Y8AVfEQsyre/3FnBdlWJvGr0NU47n2TbQ==",
- "license": "MIT",
- "dependencies": {
- "@tabler/icons": "3.34.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/codecalm"
- },
- "peerDependencies": {
- "react": ">= 16"
- }
- },
- "node_modules/@tailwindcss/node": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz",
- "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==",
- "license": "MIT",
- "dependencies": {
- "@ampproject/remapping": "^2.3.0",
- "enhanced-resolve": "^5.18.1",
- "jiti": "^2.4.2",
- "lightningcss": "1.30.1",
- "magic-string": "^0.30.17",
- "source-map-js": "^1.2.1",
- "tailwindcss": "4.1.11"
- }
- },
- "node_modules/@tailwindcss/oxide": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz",
- "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==",
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "detect-libc": "^2.0.4",
- "tar": "^7.4.3"
- },
- "engines": {
- "node": ">= 10"
- },
- "optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.1.11",
- "@tailwindcss/oxide-darwin-arm64": "4.1.11",
- "@tailwindcss/oxide-darwin-x64": "4.1.11",
- "@tailwindcss/oxide-freebsd-x64": "4.1.11",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11",
- "@tailwindcss/oxide-linux-arm64-musl": "4.1.11",
- "@tailwindcss/oxide-linux-x64-gnu": "4.1.11",
- "@tailwindcss/oxide-linux-x64-musl": "4.1.11",
- "@tailwindcss/oxide-wasm32-wasi": "4.1.11",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11",
- "@tailwindcss/oxide-win32-x64-msvc": "4.1.11"
- }
- },
- "node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz",
- "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz",
- "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz",
- "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz",
- "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz",
- "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz",
- "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz",
- "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz",
- "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz",
- "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz",
- "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==",
- "bundleDependencies": [
- "@napi-rs/wasm-runtime",
- "@emnapi/core",
- "@emnapi/runtime",
- "@tybys/wasm-util",
- "@emnapi/wasi-threads",
- "tslib"
- ],
- "cpu": [
- "wasm32"
- ],
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.4.3",
- "@emnapi/runtime": "^1.4.3",
- "@emnapi/wasi-threads": "^1.0.2",
- "@napi-rs/wasm-runtime": "^0.2.11",
- "@tybys/wasm-util": "^0.9.0",
- "tslib": "^2.8.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz",
- "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz",
- "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/postcss": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.11.tgz",
- "integrity": "sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==",
- "license": "MIT",
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "@tailwindcss/node": "4.1.11",
- "@tailwindcss/oxide": "4.1.11",
- "postcss": "^8.4.41",
- "tailwindcss": "4.1.11"
- }
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
- "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/events": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz",
- "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
- "license": "MIT"
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "20.19.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.4.tgz",
- "integrity": "sha512-OP+We5WV8Xnbuvw0zC2m4qfB/BJvjyCwtNjhHdJxV1639SGSKrLmJkc3fMnp2Qy8nJyHp8RO6umxELN/dS1/EA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@types/react": {
- "version": "19.1.8",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
- "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "19.1.6",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz",
- "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^19.0.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.36.0.tgz",
- "integrity": "sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/type-utils": "8.36.0",
- "@typescript-eslint/utils": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "graphemer": "^1.4.0",
- "ignore": "^7.0.0",
- "natural-compare": "^1.4.0",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^8.36.0",
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.36.0.tgz",
- "integrity": "sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/typescript-estree": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/project-service": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.36.0.tgz",
- "integrity": "sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.36.0",
- "@typescript-eslint/types": "^8.36.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.36.0.tgz",
- "integrity": "sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.36.0.tgz",
- "integrity": "sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.36.0.tgz",
- "integrity": "sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "8.36.0",
- "@typescript-eslint/utils": "8.36.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.36.0.tgz",
- "integrity": "sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.36.0.tgz",
- "integrity": "sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/project-service": "8.36.0",
- "@typescript-eslint/tsconfig-utils": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/visitor-keys": "8.36.0",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^2.1.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.36.0.tgz",
- "integrity": "sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.36.0",
- "@typescript-eslint/types": "8.36.0",
- "@typescript-eslint/typescript-estree": "8.36.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.9.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.36.0.tgz",
- "integrity": "sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.36.0",
- "eslint-visitor-keys": "^4.2.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@unrs/resolver-binding-android-arm-eabi": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.0.tgz",
- "integrity": "sha512-LRw5BW29sYj9NsQC6QoqeLVQhEa+BwVINYyMlcve+6stwdBsSt5UB7zw4UZB4+4PNqIVilHoMaPWCb/KhABHQw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-android-arm64": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.0.tgz",
- "integrity": "sha512-zYX8D2zcWCAHqghA8tPjbp7LwjVXbIZP++mpU/Mrf5jUVlk3BWIxkeB8yYzZi5GpFSlqMcRZQxQqbMI0c2lASQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-arm64": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.0.tgz",
- "integrity": "sha512-YsYOT049hevAY/lTYD77GhRs885EXPeAfExG5KenqMJ417nYLS2N/kpRpYbABhFZBVQn+2uRPasTe4ypmYoo3w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-x64": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.0.tgz",
- "integrity": "sha512-PSjvk3OZf1aZImdGY5xj9ClFG3bC4gnSSYWrt+id0UAv+GwwVldhpMFjAga8SpMo2T1GjV9UKwM+QCsQCQmtdA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-freebsd-x64": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.0.tgz",
- "integrity": "sha512-KC/iFaEN/wsTVYnHClyHh5RSYA9PpuGfqkFua45r4sweXpC0KHZ+BYY7ikfcGPt5w1lMpR1gneFzuqWLQxsRKg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.0.tgz",
- "integrity": "sha512-CDh/0v8uot43cB4yKtDL9CVY8pbPnMV0dHyQCE4lFz6PW/+9tS0i9eqP5a91PAqEBVMqH1ycu+k8rP6wQU846w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.0.tgz",
- "integrity": "sha512-+TE7epATDSnvwr3L/hNHX3wQ8KQYB+jSDTdywycg3qDqvavRP8/HX9qdq/rMcnaRDn4EOtallb3vL/5wCWGCkw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.0.tgz",
- "integrity": "sha512-VBAYGg3VahofpQ+L4k/ZO8TSICIbUKKTaMYOWHWfuYBFqPbSkArZZLezw3xd27fQkxX4BaLGb/RKnW0dH9Y/UA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.0.tgz",
- "integrity": "sha512-9IgGFUUb02J1hqdRAHXpZHIeUHRrbnGo6vrRbz0fREH7g+rzQy53/IBSyadZ/LG5iqMxukriNPu4hEMUn+uWEg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.0.tgz",
- "integrity": "sha512-LR4iQ/LPjMfivpL2bQ9kmm3UnTas3U+umcCnq/CV7HAkukVdHxrDD1wwx74MIWbbgzQTLPYY7Ur2MnnvkYJCBQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.0.tgz",
- "integrity": "sha512-HCupFQwMrRhrOg7YHrobbB5ADg0Q8RNiuefqMHVsdhEy9lLyXm/CxsCXeLJdrg27NAPsCaMDtdlm8Z2X8x91Tg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.0.tgz",
- "integrity": "sha512-Ckxy76A5xgjWa4FNrzcKul5qFMWgP5JSQ5YKd0XakmWOddPLSkQT+uAvUpQNnFGNbgKzv90DyQlxPDYPQ4nd6A==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.0.tgz",
- "integrity": "sha512-HfO0PUCCRte2pMJmVyxPI+eqT7KuV3Fnvn2RPvMe5mOzb2BJKf4/Vth8sSt9cerQboMaTVpbxyYjjLBWIuI5BQ==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.0.tgz",
- "integrity": "sha512-9PZdjP7tLOEjpXHS6+B/RNqtfVUyDEmaViPOuSqcbomLdkJnalt5RKQ1tr2m16+qAufV0aDkfhXtoO7DQos/jg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.0.tgz",
- "integrity": "sha512-qkE99ieiSKMnFJY/EfyGKVtNra52/k+lVF/PbO4EL5nU6AdvG4XhtJ+WHojAJP7ID9BNIra/yd75EHndewNRfA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.0.tgz",
- "integrity": "sha512-MjXek8UL9tIX34gymvQLecz2hMaQzOlaqYJJBomwm1gsvK2F7hF+YqJJ2tRyBDTv9EZJGMt4KlKkSD/gZWCOiw==",
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@napi-rs/wasm-runtime": "^0.2.11"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.0.tgz",
- "integrity": "sha512-9LT6zIGO7CHybiQSh7DnQGwFMZvVr0kUjah6qQfkH2ghucxPV6e71sUXJdSM4Ba0MaGE6DC/NwWf7mJmc3DAng==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.0.tgz",
- "integrity": "sha512-HYchBYOZ7WN266VjoGm20xFv5EonG/ODURRgwl9EZT7Bq1nLEs6VKJddzfFdXEAho0wfFlt8L/xIiE29Pmy1RA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.0.tgz",
- "integrity": "sha512-+oLKLHw3I1UQo4MeHfoLYF+e6YBa8p5vYUw3Rgt7IDzCs+57vIZqQlIo62NDpYM0VG6BjWOwnzBczMvbtH8hag==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
- "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "is-array-buffer": "^3.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
- "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.24.0",
- "es-object-atoms": "^1.1.1",
- "get-intrinsic": "^1.3.0",
- "is-string": "^1.1.1",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlast": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
- "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
- "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-shim-unscopables": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
- "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
- "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
- "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
- "es-errors": "^1.3.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
- "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
- "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/async-function": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
- "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axe-core": {
- "version": "4.10.3",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
- "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
- "dev": true,
- "license": "MPL-2.0",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
- "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "dependencies": {
- "streamsearch": "^1.1.0"
- },
- "engines": {
- "node": ">=10.16.0"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001727",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz",
- "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chownr": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
- "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
- "license": "MIT"
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
- "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "color-convert": "^2.0.1",
- "color-string": "^1.9.0"
- },
- "engines": {
- "node": ">=12.5.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/color-string": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
- "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
- "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
- "dev": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
- "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
- "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/inspect-js"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
- "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
- "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/enhanced-resolve": {
- "version": "5.18.2",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz",
- "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==",
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.24.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
- "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.2",
- "arraybuffer.prototype.slice": "^1.0.4",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "data-view-buffer": "^1.0.2",
- "data-view-byte-length": "^1.0.2",
- "data-view-byte-offset": "^1.0.1",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-set-tostringtag": "^2.1.0",
- "es-to-primitive": "^1.3.0",
- "function.prototype.name": "^1.1.8",
- "get-intrinsic": "^1.3.0",
- "get-proto": "^1.0.1",
- "get-symbol-description": "^1.1.0",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "internal-slot": "^1.1.0",
- "is-array-buffer": "^3.0.5",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.2",
- "is-negative-zero": "^2.0.3",
- "is-regex": "^1.2.1",
- "is-set": "^2.0.3",
- "is-shared-array-buffer": "^1.0.4",
- "is-string": "^1.1.1",
- "is-typed-array": "^1.1.15",
- "is-weakref": "^1.1.1",
- "math-intrinsics": "^1.1.0",
- "object-inspect": "^1.13.4",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.7",
- "own-keys": "^1.0.1",
- "regexp.prototype.flags": "^1.5.4",
- "safe-array-concat": "^1.1.3",
- "safe-push-apply": "^1.0.0",
- "safe-regex-test": "^1.1.0",
- "set-proto": "^1.0.0",
- "stop-iteration-iterator": "^1.1.0",
- "string.prototype.trim": "^1.2.10",
- "string.prototype.trimend": "^1.0.9",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.3",
- "typed-array-byte-length": "^1.0.3",
- "typed-array-byte-offset": "^1.0.4",
- "typed-array-length": "^1.0.7",
- "unbox-primitive": "^1.1.0",
- "which-typed-array": "^1.1.19"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-iterator-helpers": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
- "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.3",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.6",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "iterator.prototype": "^1.1.4",
- "safe-array-concat": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
- "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
- "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "9.30.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz",
- "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.0",
- "@eslint/config-helpers": "^0.3.0",
- "@eslint/core": "^0.14.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.30.1",
- "@eslint/plugin-kit": "^0.3.1",
- "@humanfs/node": "^0.16.6",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.2",
- "@types/estree": "^1.0.6",
- "@types/json-schema": "^7.0.15",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.6",
- "debug": "^4.3.2",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.4.0",
- "eslint-visitor-keys": "^4.2.1",
- "espree": "^10.4.0",
- "esquery": "^1.5.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- },
- "peerDependencies": {
- "jiti": "*"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-config-next": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.2.4.tgz",
- "integrity": "sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@next/eslint-plugin-next": "15.2.4",
- "@rushstack/eslint-patch": "^1.10.3",
- "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
- "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.31.0",
- "eslint-plugin-jsx-a11y": "^6.10.0",
- "eslint-plugin-react": "^7.37.0",
- "eslint-plugin-react-hooks": "^5.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
- "typescript": ">=3.3.1"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-typescript": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
- "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.4.0",
- "get-tsconfig": "^4.10.0",
- "is-bun-module": "^2.0.0",
- "stable-hash": "^0.0.5",
- "tinyglobby": "^0.2.13",
- "unrs-resolver": "^1.6.2"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-import-resolver-typescript"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
- "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.32.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
- "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.9",
- "array.prototype.findlastindex": "^1.2.6",
- "array.prototype.flat": "^1.3.3",
- "array.prototype.flatmap": "^1.3.3",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.1",
- "hasown": "^2.0.2",
- "is-core-module": "^2.16.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "object.groupby": "^1.0.3",
- "object.values": "^1.2.1",
- "semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.9",
- "tsconfig-paths": "^3.15.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
- "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-react": {
- "version": "7.37.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
- "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.8",
- "array.prototype.findlast": "^1.2.5",
- "array.prototype.flatmap": "^1.3.3",
- "array.prototype.tosorted": "^1.1.4",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.2.1",
- "estraverse": "^5.3.0",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.9",
- "object.fromentries": "^2.0.8",
- "object.values": "^1.2.1",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.5",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.12",
- "string.prototype.repeat": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
- "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-scope": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
- "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.15.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fastq": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
- "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^4.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.4"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/for-each": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
- "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
- "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "functions-have-names": "^1.2.3",
- "hasown": "^2.0.2",
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
- "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
- "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "license": "ISC"
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/has-bigints": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
- "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/internal-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
- "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
- "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/is-async-function": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
- "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
- "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
- "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bun-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
- "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.7.1"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
- "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
- "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
- "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.0",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
- "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
- "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
- "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-regex": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
- "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
- "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
- "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
- "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
- "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-symbols": "^1.1.0",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
- "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakmap": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
- "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
- "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
- "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/iterator.prototype": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
- "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "get-proto": "^1.0.0",
- "has-symbols": "^1.1.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/jiti": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
- "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
- "license": "MIT",
- "bin": {
- "jiti": "lib/jiti-cli.mjs"
- }
- },
- "node_modules/jotai": {
- "version": "2.12.5",
- "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.12.5.tgz",
- "integrity": "sha512-G8m32HW3lSmcz/4mbqx0hgJIQ0ekndKWiYP7kWVKi0p6saLXdSoye+FZiOFyonnd7Q482LCzm8sMDl7Ar1NWDw==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20.0"
- },
- "peerDependencies": {
- "@types/react": ">=17.0.0",
- "react": ">=17.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "react": {
- "optional": true
- }
- }
- },
- "node_modules/js-confetti": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/js-confetti/-/js-confetti-0.12.0.tgz",
- "integrity": "sha512-1R0Akxn3Zn82pMqW65N1V2NwKkZJ75bvBN/VAb36Ya0YHwbaSiAJZVRr/19HBxH/O8x2x01UFAbYI18VqlDN6g==",
- "license": "MIT"
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lightningcss": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
- "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
- "license": "MPL-2.0",
- "dependencies": {
- "detect-libc": "^2.0.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "lightningcss-darwin-arm64": "1.30.1",
- "lightningcss-darwin-x64": "1.30.1",
- "lightningcss-freebsd-x64": "1.30.1",
- "lightningcss-linux-arm-gnueabihf": "1.30.1",
- "lightningcss-linux-arm64-gnu": "1.30.1",
- "lightningcss-linux-arm64-musl": "1.30.1",
- "lightningcss-linux-x64-gnu": "1.30.1",
- "lightningcss-linux-x64-musl": "1.30.1",
- "lightningcss-win32-arm64-msvc": "1.30.1",
- "lightningcss-win32-x64-msvc": "1.30.1"
- }
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
- "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-x64": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
- "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-freebsd-x64": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
- "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
- "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
- "cpu": [
- "arm"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
- "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
- "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
- "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-musl": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
- "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
- "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
- "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/magic-string": {
- "version": "0.30.17",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
- "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/minizlib": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
- "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
- "license": "MIT",
- "dependencies": {
- "minipass": "^7.1.2"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/mkdirp": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
- "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
- "license": "MIT",
- "bin": {
- "mkdirp": "dist/cjs/src/bin.js"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/napi-postinstall": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.0.tgz",
- "integrity": "sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "napi-postinstall": "lib/cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/napi-postinstall"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/next": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz",
- "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==",
- "license": "MIT",
- "dependencies": {
- "@next/env": "15.2.4",
- "@swc/counter": "0.1.3",
- "@swc/helpers": "0.5.15",
- "busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001579",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.6"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "15.2.4",
- "@next/swc-darwin-x64": "15.2.4",
- "@next/swc-linux-arm64-gnu": "15.2.4",
- "@next/swc-linux-arm64-musl": "15.2.4",
- "@next/swc-linux-x64-gnu": "15.2.4",
- "@next/swc-linux-x64-musl": "15.2.4",
- "@next/swc-win32-arm64-msvc": "15.2.4",
- "@next/swc-win32-x64-msvc": "15.2.4",
- "sharp": "^0.33.5"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.41.2",
- "babel-plugin-react-compiler": "*",
- "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
- "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "babel-plugin-react-compiler": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
- "node_modules/next/node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
- "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0",
- "has-symbols": "^1.1.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
- "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
- "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
- "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.values": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
- "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/own-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
- "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.6",
- "object-keys": "^1.1.1",
- "safe-push-apply": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
- "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/react": {
- "version": "19.1.0",
- "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
- "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "19.1.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
- "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
- "license": "MIT",
- "dependencies": {
- "scheduler": "^0.26.0"
- },
- "peerDependencies": {
- "react": "^19.1.0"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
- "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
- "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.10",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
- "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.16.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-push-apply": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
- "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-regex-test": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
- "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-regex": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/scheduler": {
- "version": "0.26.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
- "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
- "license": "MIT"
- },
- "node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "devOptional": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-proto": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
- "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "license": "MIT",
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/sharp": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
- "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "color": "^4.2.3",
- "detect-libc": "^2.0.3",
- "semver": "^7.6.3"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.33.5",
- "@img/sharp-darwin-x64": "0.33.5",
- "@img/sharp-libvips-darwin-arm64": "1.0.4",
- "@img/sharp-libvips-darwin-x64": "1.0.4",
- "@img/sharp-libvips-linux-arm": "1.0.5",
- "@img/sharp-libvips-linux-arm64": "1.0.4",
- "@img/sharp-libvips-linux-s390x": "1.0.4",
- "@img/sharp-libvips-linux-x64": "1.0.4",
- "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
- "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
- "@img/sharp-linux-arm": "0.33.5",
- "@img/sharp-linux-arm64": "0.33.5",
- "@img/sharp-linux-s390x": "0.33.5",
- "@img/sharp-linux-x64": "0.33.5",
- "@img/sharp-linuxmusl-arm64": "0.33.5",
- "@img/sharp-linuxmusl-x64": "0.33.5",
- "@img/sharp-wasm32": "0.33.5",
- "@img/sharp-win32-ia32": "0.33.5",
- "@img/sharp-win32-x64": "0.33.5"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "is-arrayish": "^0.3.1"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stable-hash": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
- "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/stop-iteration-iterator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
- "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "internal-slot": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/string.prototype.includes": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
- "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/string.prototype.matchall": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
- "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "regexp.prototype.flags": "^1.5.3",
- "set-function-name": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.repeat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
- "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
- "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
- "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/styled-jsx": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
- "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
- "license": "MIT",
- "dependencies": {
- "client-only": "0.0.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tailwindcss": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
- "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
- "license": "MIT"
- },
- "node_modules/tapable": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
- "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tar": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
- "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
- "license": "ISC",
- "dependencies": {
- "@isaacs/fs-minipass": "^4.0.0",
- "chownr": "^3.0.0",
- "minipass": "^7.1.2",
- "minizlib": "^3.0.1",
- "mkdirp": "^3.0.1",
- "yallist": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
- "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.12"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4"
- }
- },
- "node_modules/tsconfig-paths": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
- "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD"
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
- "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
- "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
- "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
- "license": "MIT",
- "optionalDependencies": {
- "rxjs": "*"
- }
- },
- "node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
- "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/unrs-resolver": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.0.tgz",
- "integrity": "sha512-uw3hCGO/RdAEAb4zgJ3C/v6KIAFFOtBoxR86b2Ejc5TnH7HrhTWJR2o0A9ullC3eWMegKQCw/arQ/JivywQzkg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "napi-postinstall": "^0.3.0"
- },
- "funding": {
- "url": "https://opencollective.com/unrs-resolver"
- },
- "optionalDependencies": {
- "@unrs/resolver-binding-android-arm-eabi": "1.11.0",
- "@unrs/resolver-binding-android-arm64": "1.11.0",
- "@unrs/resolver-binding-darwin-arm64": "1.11.0",
- "@unrs/resolver-binding-darwin-x64": "1.11.0",
- "@unrs/resolver-binding-freebsd-x64": "1.11.0",
- "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.0",
- "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.0",
- "@unrs/resolver-binding-linux-arm64-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-arm64-musl": "1.11.0",
- "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-riscv64-musl": "1.11.0",
- "@unrs/resolver-binding-linux-s390x-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-x64-gnu": "1.11.0",
- "@unrs/resolver-binding-linux-x64-musl": "1.11.0",
- "@unrs/resolver-binding-wasm32-wasi": "1.11.0",
- "@unrs/resolver-binding-win32-arm64-msvc": "1.11.0",
- "@unrs/resolver-binding-win32-ia32-msvc": "1.11.0",
- "@unrs/resolver-binding-win32-x64-msvc": "1.11.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
- "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.1",
- "is-number-object": "^1.1.1",
- "is-string": "^1.1.1",
- "is-symbol": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-collection": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
- "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
- "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "for-each": "^0.3.5",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/yallist": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
- "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/examples/word-wrangler-gemini-live/client/package.json b/examples/word-wrangler-gemini-live/client/package.json
deleted file mode 100644
index 4c047f3e3..000000000
--- a/examples/word-wrangler-gemini-live/client/package.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "client",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "lint": "next lint"
- },
- "dependencies": {
- "@pipecat-ai/client-js": "^1.0.0",
- "@pipecat-ai/client-react": "^1.0.0",
- "@pipecat-ai/daily-transport": "^1.0.0",
- "@tabler/icons-react": "^3.31.0",
- "@tailwindcss/postcss": "^4.1.3",
- "jotai": "^2.12.5",
- "js-confetti": "^0.12.0",
- "next": "15.2.4",
- "react": "^19.0.0",
- "react-dom": "^19.0.0"
- },
- "devDependencies": {
- "@eslint/eslintrc": "^3",
- "@types/node": "^20",
- "@types/react": "^19",
- "@types/react-dom": "^19",
- "eslint": "^9",
- "eslint-config-next": "15.2.4",
- "postcss": "^8.5.3",
- "tailwindcss": "^4.1.3",
- "typescript": "^5"
- }
-}
diff --git a/examples/word-wrangler-gemini-live/client/postcss.config.mjs b/examples/word-wrangler-gemini-live/client/postcss.config.mjs
deleted file mode 100644
index c7bcb4b1e..000000000
--- a/examples/word-wrangler-gemini-live/client/postcss.config.mjs
+++ /dev/null
@@ -1,5 +0,0 @@
-const config = {
- plugins: ["@tailwindcss/postcss"],
-};
-
-export default config;
diff --git a/examples/word-wrangler-gemini-live/client/public/favicon.svg b/examples/word-wrangler-gemini-live/client/public/favicon.svg
deleted file mode 100644
index a0260a809..000000000
--- a/examples/word-wrangler-gemini-live/client/public/favicon.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/examples/word-wrangler-gemini-live/client/public/og-image.png b/examples/word-wrangler-gemini-live/client/public/og-image.png
deleted file mode 100644
index cc667ae8a..000000000
Binary files a/examples/word-wrangler-gemini-live/client/public/og-image.png and /dev/null differ
diff --git a/examples/word-wrangler-gemini-live/client/src/assets/logo.png b/examples/word-wrangler-gemini-live/client/src/assets/logo.png
deleted file mode 100644
index ddfac1a55..000000000
Binary files a/examples/word-wrangler-gemini-live/client/src/assets/logo.png and /dev/null differ
diff --git a/examples/word-wrangler-gemini-live/client/src/assets/star.png b/examples/word-wrangler-gemini-live/client/src/assets/star.png
deleted file mode 100644
index 8e2ebbf0f..000000000
Binary files a/examples/word-wrangler-gemini-live/client/src/assets/star.png and /dev/null differ
diff --git a/examples/word-wrangler-gemini-live/client/src/components/Card.tsx b/examples/word-wrangler-gemini-live/client/src/components/Card.tsx
deleted file mode 100644
index 16d5ca18d..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/Card.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-export function Card({
- children,
- className,
-}: {
- children: React.ReactNode;
- className?: string;
-}) {
- return (
-
- {children}
-
- );
-}
-
-export function CardInner({ children }: { children: React.ReactNode }) {
- return {children}
;
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/components/Game/GameContent.tsx b/examples/word-wrangler-gemini-live/client/src/components/Game/GameContent.tsx
deleted file mode 100644
index ca415856a..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/Game/GameContent.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import { GAME_STATES, GAME_TEXT, GameState } from "@/constants/gameConstants";
-import { IconArrowForwardUp, IconClockPause } from "@tabler/icons-react";
-import React from "react";
-import { GameWord } from "./GameWord";
-import { Timer } from "./Timer";
-import styles from "./WordWrangler.module.css";
-
-interface GameContentProps {
- gameState: GameState;
- currentWord: string;
- showAutoDetected: boolean;
- timeLeft: number;
- showIncorrect: boolean;
- score: number;
- skipsRemaining: number;
- // onCorrect: () => void;
- onSkip: () => void;
-}
-
-export const GameContent: React.FC = ({
- gameState,
- currentWord,
- showAutoDetected,
- showIncorrect,
- timeLeft,
- score,
- skipsRemaining,
- //onCorrect,
- onSkip,
-}) => {
- // Idle or Connecting State
- if (gameState === GAME_STATES.IDLE || gameState === GAME_STATES.CONNECTING) {
- return (
-
- {GAME_TEXT.startingGame}
-
- );
- }
-
- // Waiting for Intro State
- if (gameState === GAME_STATES.WAITING_FOR_INTRO) {
- return (
-
-
-
-
-
- {GAME_TEXT.waitingForIntro}
-
-
- );
- }
-
- // Finished State
- if (gameState === GAME_STATES.FINISHED) {
- return (
-
-
-
{GAME_TEXT.gameOver}
-
- {GAME_TEXT.finalScore}: {score}
-
-
-
{GAME_TEXT.clickToStart}
-
- );
- }
-
- // Active Game State
- return (
-
-
-
-
-
-
- {skipsRemaining > 0
- ? GAME_TEXT.skipsRemaining(skipsRemaining)
- : GAME_TEXT.noSkips}
-
-
-
- );
-};
diff --git a/examples/word-wrangler-gemini-live/client/src/components/Game/GameWord.tsx b/examples/word-wrangler-gemini-live/client/src/components/Game/GameWord.tsx
deleted file mode 100644
index 5f0002b7e..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/Game/GameWord.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import { GAME_TEXT } from "@/constants/gameConstants";
-import React from "react";
-import styles from "./WordWrangler.module.css";
-
-interface GameWordProps {
- word: string;
- showAutoDetected: boolean;
- showIncorrect: boolean;
-}
-
-export const GameWord: React.FC = ({
- word,
- showAutoDetected,
- showIncorrect,
-}) => {
- return (
-
- {GAME_TEXT.describeWord}
- {word}
-
- {showAutoDetected && }
- {showIncorrect && }
-
- );
-};
-
-const CorrectOverlay: React.FC = () => (
-
-);
-
-const IncorrectOverlay: React.FC = () => (
-
-);
diff --git a/examples/word-wrangler-gemini-live/client/src/components/Game/ScoreRow/ScoreRow.module.css b/examples/word-wrangler-gemini-live/client/src/components/Game/ScoreRow/ScoreRow.module.css
deleted file mode 100644
index e7a33213e..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/Game/ScoreRow/ScoreRow.module.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.divider {
- width: 100%;
- height: 2px;
- background: linear-gradient(
- 90deg,
- transparent 0%,
- rgba(255, 255, 255, 0.15) 30%,
- rgba(255, 255, 255, 0.15) 70%,
- transparent 100%
- );
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/components/Game/ScoreRow/index.tsx b/examples/word-wrangler-gemini-live/client/src/components/Game/ScoreRow/index.tsx
deleted file mode 100644
index a7bdac72a..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/Game/ScoreRow/index.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import { IconLaurelWreathFilled, IconStarFilled } from "@tabler/icons-react";
-import styles from "./ScoreRow.module.css";
-interface ScoreRowProps {
- score: number;
- bestScore: number;
-}
-
-export function ScoreRow({ score, bestScore = 0 }: ScoreRowProps) {
- return (
-
-
-
-
-
- Current score
-
-
- {score}
-
-
-
-
-
-
-
-
- Best score
-
-
- {bestScore}
-
-
-
-
- );
-}
-
-export default ScoreRow;
diff --git a/examples/word-wrangler-gemini-live/client/src/components/Game/Timer.tsx b/examples/word-wrangler-gemini-live/client/src/components/Game/Timer.tsx
deleted file mode 100644
index a14366d1d..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/Game/Timer.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { GAME_CONFIG, GAME_STATES } from "@/constants/gameConstants";
-import { formatTime } from "@/utils/formatTime";
-import { IconStopwatch } from "@tabler/icons-react";
-import styles from "./WordWrangler.module.css";
-
-interface TimerProps {
- timeLeft: number;
- gameState: string;
-}
-
-export function Timer({ timeLeft, gameState }: TimerProps) {
- const lowTimer =
- gameState === GAME_STATES.ACTIVE &&
- timeLeft <= GAME_CONFIG.LOW_TIME_WARNING;
-
- return (
-
-
-
- {formatTime(timeLeft)}
-
-
-
- );
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/components/Game/WordWrangler.module.css b/examples/word-wrangler-gemini-live/client/src/components/Game/WordWrangler.module.css
deleted file mode 100644
index 4e417f359..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/Game/WordWrangler.module.css
+++ /dev/null
@@ -1,589 +0,0 @@
-.gameContainer {
- position: relative;
- z-index: 1;
- padding: 4px;
- width: 100%;
- border-radius: 28px;
- margin-top: 50px;
- min-height: 300px;
- box-shadow: 0px 66px 26px rgba(0, 0, 0, 0.01),
- 0px 37px 22px rgba(0, 0, 0, 0.05), 0px 16px 16px rgba(0, 0, 0, 0.09),
- 0px 4px 9px rgba(0, 0, 0, 0.1);
-}
-
-@media (min-width: 1024px) {
- .gameContainer {
- width: auto;
- flex: none;
- min-width: 626px;
- height: 260px;
- margin-top: 0;
- }
-}
-
-.gameContainer:before {
- content: "";
- position: absolute;
- inset: -4px -4px -8px -4px;
- border-radius: 28px;
- background: linear-gradient(
- to bottom,
- rgba(0, 0, 0, 1) 0%,
- rgba(0, 0, 0, 0.15) 100%
- );
- z-index: -1;
-}
-
-.gameContainer:after {
- content: "";
- box-sizing: border-box;
- position: absolute;
- inset: 0;
- border-radius: var(--border-radius-card);
- border: var(--border-width-card) solid transparent;
- background-image: linear-gradient(#001146, #0655cc),
- linear-gradient(
- 180deg,
- var(--theme-gradient-start) 0%,
- var(--theme-gradient-end) 100%
- );
- background-origin: border-box;
- background-clip: padding-box, border-box;
-}
-
-.gameContent {
- position: relative;
- z-index: 1;
- background: transparent;
- border-radius: 20px;
- width: 100%;
- height: 100%;
- min-height: 292px;
- display: flex;
- overflow: hidden;
- border: 6px solid rgba(0, 0, 0, 0.25);
-}
-
-.gameContent:after {
- content: "";
- position: absolute;
- inset: 0;
- background: radial-gradient(
- 70% 40% at 50% 40%,
- #2da6ee 0%,
- rgba(45, 166, 238, 0) 100%
- );
- opacity: 0.76;
- z-index: -1;
-}
-
-.gameArea {
- display: flex;
- flex-direction: column;
- align-items: center;
- flex: 1;
- padding: 12px;
- position: relative;
- z-index: 2;
-}
-
-.timer {
- height: var(--button-height);
- border-radius: 9999px;
- width: 100%;
- flex-direction: row;
- gap: 12px;
- display: flex;
- align-items: center;
- justify-content: center;
- background-color: rgba(0, 0, 0, 0.2);
- padding: 12px;
-
- @media (min-width: 1024px) {
- flex: 1;
- }
-
- .timerBadge {
- display: flex;
- flex-direction: row;
- align-items: center;
- gap: 6px;
- background-color: black;
- border-radius: 9999px;
- color: white;
- height: 100%;
- padding: 0 12px;
- font-weight: 800;
- }
-
- .timerBar {
- height: 100%;
- width: 100%;
- border-radius: 9999px;
- overflow: hidden;
- background-color: var(--color-emerald-100);
- }
-
- .timerBarFill {
- height: 100%;
- width: 100%;
- background-color: var(--color-emerald-400);
- transition: width 0.3s ease;
- }
-
- &.lowTime {
- color: #e74c3c;
- animation: pulse 1s infinite;
-
- .timerBar {
- background-color: var(--color-orange-100);
- }
-
- .timerBarFill {
- background-color: var(--color-orange-400);
- }
- }
-}
-
-.scoreDisplay {
- font-size: 1.25rem;
- font-weight: 500;
- color: #0071e3;
-}
-
-.currentWord {
- display: flex;
- flex: 1;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- text-align: center;
- width: 100%;
- margin-top: 50px;
- .helpText {
- font-size: 1rem;
- font-weight: 700;
- color: rgba(255, 255, 255, 0.5);
- }
-
- .word {
- font-size: 2rem;
- font-weight: 800;
- letter-spacing: 0.05em;
- line-height: 2;
- color: #ffffff;
- text-shadow: 0px 4px 0px rgba(0, 0, 0, 0.45);
- }
-
- @media (min-width: 1024px) {
- margin-top: 0;
- .word {
- font-size: 3rem;
- text-shadow: 0px 6px 0px rgba(0, 0, 0, 0.45);
- }
- }
-}
-
-.gameButton {
- padding: 0.85rem 0;
- font-size: 1.1rem;
- font-weight: 500;
- border: none;
- border-radius: 8px;
- cursor: pointer;
- transition: all 0.2s ease;
-}
-
-/* Primary button (Skip) */
-.skipButton {
- flex: 2; /* Takes more space */
- background-color: #e74c3c;
- color: white;
-}
-
-.skipButton:hover {
- background-color: #c0392b;
- transform: translateY(-2px);
-}
-
-/* Secondary button (Correct) - more subdued */
-.correctButton {
- flex: 1; /* Takes less space */
- background-color: #f5f5f7; /* Light gray background */
- color: #333; /* Dark text */
- border: 1px solid #ddd; /* Subtle border */
-}
-
-.correctButton:hover {
- background-color: #e8e8ed;
- transform: translateY(-1px);
-}
-
-.gameReadyArea {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-.gameResults {
- margin-bottom: 1rem;
- padding: 0.75rem;
- background-color: #f8f9fa;
- border-radius: 8px;
- width: 100%;
- text-align: center;
-}
-
-.gameResults h2 {
- margin: 0 0 0.5rem 0;
- color: #333;
- font-size: 1.3rem;
-}
-
-.statusNote {
- margin: 0.5rem 0;
- padding: 0.6rem 1rem;
- background-color: #f8f9fa;
- border-left: 3px solid #0071e3;
- font-size: 0.95rem;
- color: #333;
- width: 100%;
- text-align: center;
- border-radius: 4px;
-}
-
-.compactInstructions {
- margin: 0.75rem 0;
- width: 100%;
- max-width: 400px;
- background-color: #f8f9fa;
- border-radius: 8px;
- padding: 0.75rem 1rem;
-}
-
-.compactInstructions h3 {
- margin: 0 0 0.5rem 0;
- color: #333;
- font-size: 1.1rem;
- text-align: center;
-}
-
-.compactInstructions ul {
- margin: 0;
- padding-left: 1.5rem;
- line-height: 1.4;
-}
-
-.compactInstructions li {
- margin-bottom: 0.4rem;
- font-size: 0.9rem;
-}
-
-.loadingDots {
- display: inline-block;
- animation: dotPulse 1.5s infinite linear;
-}
-
-@keyframes dotPulse {
- 0% {
- opacity: 0.2;
- }
- 20% {
- opacity: 1;
- }
- 100% {
- opacity: 0.2;
- }
-}
-
-@keyframes pulse {
- 0% {
- opacity: 0.8;
- }
- 50% {
- opacity: 1;
- }
- 100% {
- opacity: 0.8;
- }
-}
-
-/* Animation styles */
-.correctWordDetected {
- animation: correctPulse 1.5s ease-in-out;
- position: relative;
-}
-
-.autoDetectedOverlay {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- display: flex;
- justify-content: center;
- align-items: center;
- background-color: rgba(46, 204, 113, 0.6);
- border-radius: 8px;
- animation: fadeIn 0.3s ease-in-out;
- z-index: 10;
-}
-
-.checkmarkContainer {
- width: 80px;
- height: 80px;
- animation: scaleUp 0.4s ease-out;
-}
-
-.checkmarkSvg {
- width: 100%;
- height: 100%;
- border-radius: 50%;
- display: block;
- stroke-width: 4;
- stroke: #fff;
- stroke-miterlimit: 10;
- box-shadow: 0 0 0 rgba(46, 204, 113, 0.7);
- animation: fillCheck 0.3s ease-in-out 0.3s forwards,
- scale 0.2s ease-in-out 0.7s both;
-}
-
-.checkmarkCircle {
- stroke-dasharray: 166;
- stroke-dashoffset: 166;
- stroke-width: 4;
- stroke-miterlimit: 10;
- stroke: #fff;
- fill: transparent;
- animation: strokeCheck 0.5s cubic-bezier(0.65, 0, 0.45, 1) forwards;
-}
-
-.checkmarkCheck {
- transform-origin: 50% 50%;
- stroke-dasharray: 48;
- stroke-dashoffset: 48;
- animation: strokeCheck 0.25s cubic-bezier(0.65, 0, 0.45, 1) 0.6s forwards;
-}
-
-@keyframes strokeCheck {
- 100% {
- stroke-dashoffset: 0;
- }
-}
-
-@keyframes fillCheck {
- 100% {
- box-shadow: inset 0 0 0 50px transparent;
- }
-}
-
-@keyframes correctPulse {
- 0% {
- box-shadow: 0 0 0 0 rgba(46, 204, 113, 0.7);
- }
- 50% {
- box-shadow: 0 0 0 15px rgba(46, 204, 113, 0);
- }
- 100% {
- box-shadow: 0 0 0 0 rgba(46, 204, 113, 0);
- }
-}
-
-@keyframes fadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-
-@keyframes scaleUp {
- from {
- transform: scale(0.5);
- opacity: 0;
- }
- to {
- transform: scale(1);
- opacity: 1;
- }
-}
-
-.incorrectWordDetected {
- animation: incorrectPulse 1.5s ease-in-out,
- shake 0.5s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
- position: relative;
-}
-
-.incorrectOverlay {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- display: flex;
- justify-content: center;
- align-items: center;
- background-color: rgba(255, 59, 48, 0.6); /* Red with transparency */
- border-radius: 8px;
- animation: fadeIn 0.3s ease-in-out;
- z-index: 10;
-}
-
-.xmarkContainer {
- width: 80px;
- height: 80px;
- animation: scaleUp 0.4s ease-out;
-}
-
-.xmarkSvg {
- width: 100%;
- height: 100%;
- border-radius: 50%;
- display: block;
- stroke-width: 4;
- stroke: #fff;
- stroke-miterlimit: 10;
- box-shadow: 0 0 0 rgba(255, 59, 48, 0.7);
- animation: fillX 0.3s ease-in-out 0.3s forwards,
- scale 0.2s ease-in-out 0.7s both;
-}
-
-.xmarkCircle {
- stroke-dasharray: 166;
- stroke-dashoffset: 166;
- stroke-width: 4;
- stroke-miterlimit: 10;
- stroke: #fff;
- fill: transparent;
- animation: strokeX 0.5s cubic-bezier(0.65, 0, 0.45, 1) forwards;
-}
-
-.xmarkX {
- transform-origin: 50% 50%;
- stroke-dasharray: 48;
- stroke-dashoffset: 48;
- animation: strokeX 0.25s cubic-bezier(0.65, 0, 0.45, 1) 0.6s forwards;
-}
-
-@keyframes strokeX {
- 100% {
- stroke-dashoffset: 0;
- }
-}
-
-@keyframes fillX {
- 100% {
- box-shadow: inset 0 0 0 50px transparent;
- }
-}
-
-@keyframes incorrectPulse {
- 0% {
- box-shadow: 0 0 0 0 rgba(255, 59, 48, 0.7);
- }
- 50% {
- box-shadow: 0 0 0 15px rgba(255, 59, 48, 0);
- }
- 100% {
- box-shadow: 0 0 0 0 rgba(255, 59, 48, 0);
- }
-}
-
-@keyframes scale {
- 0%,
- 100% {
- transform: none;
- }
- 50% {
- transform: scale3d(1.1, 1.1, 1);
- }
-}
-
-@keyframes shake {
- 10%,
- 90% {
- transform: translate3d(-1px, 0, 0);
- }
- 20%,
- 80% {
- transform: translate3d(2px, 0, 0);
- }
- 30%,
- 50%,
- 70% {
- transform: translate3d(-3px, 0, 0);
- }
- 40%,
- 60% {
- transform: translate3d(3px, 0, 0);
- }
-}
-
-/* Game loading UI styles */
-.gameLoadingContainer {
- display: flex;
- justify-content: center;
- align-items: center;
- height: 250px; /* Fixed height to prevent layout shifts */
- width: 100%;
-}
-
-.gameLoadingContent {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- gap: 1.5rem;
- text-align: center;
-}
-
-.gameLoadingIcon {
- position: relative;
- width: 60px;
- height: 60px;
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.pulseDot {
- width: 16px;
- height: 16px;
- background-color: #0071e3;
- border-radius: 50%;
- position: relative;
-}
-
-.pulseDot:before {
- content: "";
- position: absolute;
- width: 100%;
- height: 100%;
- border-radius: 50%;
- background-color: #0071e3;
- opacity: 0.7;
- animation: pulse-wave 1.5s linear infinite;
-}
-
-.gameLoadingTitle {
- font-size: 1.5rem;
- font-weight: 500;
- color: #0071e3;
- margin: 0;
-}
-
-@keyframes pulse-wave {
- 0% {
- transform: scale(1);
- opacity: 0.7;
- }
- 50% {
- transform: scale(2.5);
- opacity: 0;
- }
- 100% {
- transform: scale(1);
- opacity: 0;
- }
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/components/Game/WordWrangler.tsx b/examples/word-wrangler-gemini-live/client/src/components/Game/WordWrangler.tsx
deleted file mode 100644
index c8053b250..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/Game/WordWrangler.tsx
+++ /dev/null
@@ -1,227 +0,0 @@
-import { GAME_STATES, GAME_TEXT } from "@/constants/gameConstants";
-import { useConnectionState } from "@/hooks/useConnectionState";
-import { useGameState } from "@/hooks/useGameState";
-import { useGameTimer } from "@/hooks/useGameTimer";
-import { useVisualFeedback } from "@/hooks/useVisualFeedback";
-import { useWordDetection } from "@/hooks/useWordDetection";
-import { RTVIEvent } from "@pipecat-ai/client-js";
-import { useRTVIClientEvent } from "@pipecat-ai/client-react";
-import { IconCircleDashedCheck, IconDoorExit } from "@tabler/icons-react";
-import { useCallback, useEffect, useRef } from "react";
-import Logo from "../../assets/logo.png";
-import { GameContent } from "./GameContent";
-import { ScoreRow } from "./ScoreRow";
-
-import JSConfetti from "js-confetti";
-
-import Image from "next/image";
-import styles from "./WordWrangler.module.css";
-
-export const WordWrangler: React.FC<{
- onGameEnded: (score: number, bestScore: number) => void;
-}> = ({ onGameEnded }) => {
- const botIntroCompletedRef = useRef(false);
- const currentScoreRef = useRef(0);
- const gameState = useGameState();
- const visualFeedback = useVisualFeedback();
- const { isConnected, client } = useConnectionState();
-
- // Update the ref whenever score changes
- useEffect(() => {
- currentScoreRef.current = gameState.score;
- }, [gameState.score]);
-
- // End the game
- const endGame = useCallback(async () => {
- const scoreAtCallTime = currentScoreRef.current;
-
- // Prevent multiple calls to endGame
- if (gameState.gameState === GAME_STATES.FINISHED) {
- console.log("endGame prevented - game already finished");
- return;
- }
-
- // Capture the current score before any state changes
- const finalScore = scoreAtCallTime;
- const currentBestScore = gameState.bestScore;
-
- // Update game state
- gameState.finishGame();
- visualFeedback.resetVisuals();
-
- // Update best score if needed
- if (currentBestScore < finalScore) {
- gameState.setBestScore(finalScore);
- }
-
- // Disconnect the bot
- if (client && isConnected) {
- try {
- await client.disconnectBot();
- await client.disconnect();
- } catch (error) {
- console.error("Error disconnecting bot:", error);
- }
- }
-
- // Call the callback with the captured scores
- onGameEnded(finalScore, Math.max(finalScore, currentBestScore));
- }, [gameState, visualFeedback, client, isConnected, onGameEnded]);
-
- const gameTimer = useGameTimer(endGame);
-
- const wordDetection = useWordDetection({
- gameState: gameState.gameState,
- currentWord: gameState.currentWord,
- onCorrectGuess: handleCorrectGuess,
- onIncorrectGuess: handleIncorrectGuess,
- });
-
- // Initialize on component mount
- useEffect(() => {
- gameState.initializeGame();
- }, []);
-
- // Handle connection state changes
- useEffect(() => {
- if (isConnected) {
- if (!botIntroCompletedRef.current) {
- // Connection is active, but bot hasn't completed intro
- gameState.setGameState(GAME_STATES.WAITING_FOR_INTRO);
- }
- } else {
- // Connection lost or never established
- if (gameState.gameState === GAME_STATES.ACTIVE) {
- // If game was active, it's now finished
- endGame();
- } else if (gameState.gameState !== GAME_STATES.FINISHED) {
- // Reset to idle state if not already finished
- gameState.setGameState(GAME_STATES.IDLE);
- }
-
- // Reset intro state when connection is lost
- botIntroCompletedRef.current = false;
- }
- }, [isConnected, gameState.gameState, endGame]);
-
- // Listen for the bot to stop speaking to detect intro completion
- useRTVIClientEvent(RTVIEvent.BotStoppedSpeaking, () => {
- if (
- gameState.gameState === GAME_STATES.WAITING_FOR_INTRO &&
- !botIntroCompletedRef.current
- ) {
- // First time the bot stops speaking, consider intro done and start the game
- botIntroCompletedRef.current = true;
- startGame();
- }
- });
-
- // Handle correct guess with animation
- function handleCorrectGuess() {
- visualFeedback.showCorrect(() => {
- gameState.incrementScore();
- gameState.moveToNextWord();
- wordDetection.resetLastProcessedMessage();
- });
- const jsConfetti = new JSConfetti();
- jsConfetti.addConfetti();
- }
-
- // Handle incorrect guess with animation
- function handleIncorrectGuess() {
- visualFeedback.showIncorrectAnimation();
- }
-
- // Start the game
- function startGame() {
- // Initialize game state
- gameState.initializeGame();
- wordDetection.resetLastProcessedMessage();
-
- // Start the timer - now it internally manages countdown and calls endGame when done
- gameTimer.startTimer();
- }
-
- // Handle manual marking as correct
- function handleManualCorrect() {
- if (gameState.gameState !== GAME_STATES.ACTIVE) return;
-
- gameState.incrementScore();
-
- const jsConfetti = new JSConfetti();
- jsConfetti.addConfetti();
-
- gameState.moveToNextWord();
- wordDetection.resetLastProcessedMessage();
- }
-
- // Handle skipping a word
- function handleSkip() {
- if (gameState.gameState !== GAME_STATES.ACTIVE) return;
-
- // Try to use a skip and proceed if successful
- if (gameState.useSkip()) {
- gameState.moveToNextWord();
- wordDetection.resetLastProcessedMessage();
- }
- }
-
- // Clean up on unmount
- useEffect(() => {
- return () => {
- gameTimer.stopTimer();
- visualFeedback.cleanup();
- };
- }, []);
-
- return (
-
-
-
-
-
-
- {GAME_TEXT.correct}
-
-
-
- End Game
-
-
-
-
- );
-};
diff --git a/examples/word-wrangler-gemini-live/client/src/components/StartButton/index.tsx b/examples/word-wrangler-gemini-live/client/src/components/StartButton/index.tsx
deleted file mode 100644
index 4e86626b4..000000000
--- a/examples/word-wrangler-gemini-live/client/src/components/StartButton/index.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import { BUTTON_TEXT } from "@/constants/gameConstants";
-import { useConnectionState } from "@/hooks/useConnectionState";
-import { IconArrowRight } from "@tabler/icons-react";
-
-interface StartGameButtonProps {
- onGameStarted?: () => void;
- onGameEnded?: () => void;
- isGameEnded?: boolean;
-}
-
-export function StartGameButton({
- onGameStarted,
- onGameEnded,
- isGameEnded,
-}: StartGameButtonProps) {
- const { isConnecting, isDisconnecting, toggleConnection } =
- useConnectionState(onGameStarted, onGameEnded);
-
- // Show spinner during connection process
- const showSpinner = isConnecting;
- const btnText = isGameEnded ? BUTTON_TEXT.RESTART : BUTTON_TEXT.START;
-
- return (
-
-
- <>
-
- {isConnecting ? BUTTON_TEXT.CONNECTING : btnText}
-
-
- {showSpinner ? (
-
- ) : (
-
- )}
-
- >
-
-
- );
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/constants/gameConstants.ts b/examples/word-wrangler-gemini-live/client/src/constants/gameConstants.ts
deleted file mode 100644
index abed59665..000000000
--- a/examples/word-wrangler-gemini-live/client/src/constants/gameConstants.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-// Game configuration
-export const GAME_CONFIG = {
- MAX_SKIPS: 3,
- GAME_DURATION: 60, // seconds
- WORD_POOL_SIZE: 30,
- ANIMATION_DURATION: 1000, // ms
- TIMER_INTERVAL: 1000, // ms
- LOW_TIME_WARNING: 10, // seconds
-};
-
-// Game states
-export const GAME_STATES = {
- IDLE: "idle",
- CONNECTING: "connecting",
- WAITING_FOR_INTRO: "waitingForIntro",
- ACTIVE: "active",
- FINISHED: "finished",
-} as const;
-
-export type GameState = (typeof GAME_STATES)[keyof typeof GAME_STATES];
-
-// Text used in the game
-export const GAME_TEXT = {
- time: "Time",
- score: "Score",
- gameOver: "Game Over!",
- finalScore: "Final Score",
- correct: "Mark Correct",
- skip: "Skip โ",
- noSkips: "No Skips Left",
- skipsRemaining: (num: number) => `Skip (${num} left)`,
- startingGame: `How many words can you describe in ${GAME_CONFIG.GAME_DURATION} seconds?`,
- waitingForIntro: "Getting ready...",
- clickToStart: "Press Start Game to begin",
- describeWord: "Describe the following word:",
- introTitle: "How many words can you describe within 60 seconds?",
- introGuide1: "Earn points each time the AI correctly guesses the word",
- introGuide2: "Do not say the word, or you will lose points",
- introGuide3: "You can skip the word if you don't know it",
- aiPersonality: "AI Personality",
- finalScoreMessage: "Your best score:",
-};
-
-// Pattern for detecting guesses in transcripts
-export const TRANSCRIPT_PATTERNS = {
- // Match both "Is it "word"?" and "Is it a/an word?" patterns
- GUESS_PATTERN:
- /is it [""]?([^""?]+)[""]?(?:\?)?|is it (?:a|an) ([^?]+)(?:\?)?/i,
-};
-
-// Connection states
-export const CONNECTION_STATES = {
- ACTIVE: ["connected", "ready"],
- CONNECTING: ["connecting", "initializing", "initialized", "authenticating"],
- DISCONNECTING: ["disconnecting"],
-};
-
-// Button text
-export const BUTTON_TEXT = {
- START: "Start Game",
- END: "End Game",
- CONNECTING: "Connecting...",
- STARTING: "Starting...",
- RESTART: "Play Again",
-};
diff --git a/examples/word-wrangler-gemini-live/client/src/contexts/Configuration.tsx b/examples/word-wrangler-gemini-live/client/src/contexts/Configuration.tsx
deleted file mode 100644
index 9e3fec610..000000000
--- a/examples/word-wrangler-gemini-live/client/src/contexts/Configuration.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import React, { createContext, useContext, useState, ReactNode } from 'react';
-import { PersonalityType, DEFAULT_PERSONALITY } from '@/types/personality';
-
-interface ConfigurationContextProps {
- personality: PersonalityType;
- setPersonality: (personality: PersonalityType) => void;
-}
-
-const ConfigurationContext = createContext<
- ConfigurationContextProps | undefined
->(undefined);
-
-interface ConfigurationProviderProps {
- children: ReactNode;
-}
-
-export function ConfigurationProvider({
- children,
-}: ConfigurationProviderProps) {
- const [personality, setPersonality] =
- useState(DEFAULT_PERSONALITY);
-
- const value = {
- personality,
- setPersonality,
- };
-
- return (
-
- {children}
-
- );
-}
-
-export function useConfigurationSettings() {
- const context = useContext(ConfigurationContext);
- if (context === undefined) {
- throw new Error(
- 'useConfigurationSettings must be used within a ConfigurationProvider'
- );
- }
- return context;
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/data/wordWranglerWords.ts b/examples/word-wrangler-gemini-live/client/src/data/wordWranglerWords.ts
deleted file mode 100644
index 07c08b5a0..000000000
--- a/examples/word-wrangler-gemini-live/client/src/data/wordWranglerWords.ts
+++ /dev/null
@@ -1,535 +0,0 @@
-// 100 Easy Words - Common, everyday objects and concepts
-export const EASY_CATCH_PHRASE_WORDS = [
- // Common Objects
- 'Chair',
- 'Table',
- 'Door',
- 'Window',
- 'Book',
- 'Pencil',
- 'Phone',
- 'Computer',
- 'Ball',
- 'Car',
- 'Shoe',
- 'Hat',
- 'Cup',
- 'Plate',
- 'Fork',
- 'Spoon',
- 'Knife',
- 'Key',
- 'Clock',
- 'Watch',
-
- // Food & Drink
- 'Pizza',
- 'Hamburger',
- 'Ice cream',
- 'Chocolate',
- 'Apple',
- 'Banana',
- 'Orange',
- 'Milk',
- 'Water',
- 'Cake',
- 'Cookie',
- 'Bread',
- 'Egg',
- 'Cheese',
- 'Chicken',
-
- // Animals
- 'Dog',
- 'Cat',
- 'Fish',
- 'Bird',
- 'Horse',
- 'Cow',
- 'Pig',
- 'Duck',
- 'Lion',
- 'Tiger',
- 'Bear',
- 'Elephant',
- 'Monkey',
- 'Rabbit',
- 'Frog',
-
- // Colors & Simple Concepts
- 'Red',
- 'Blue',
- 'Green',
- 'Yellow',
- 'Black',
- 'White',
- 'Big',
- 'Small',
- 'Hot',
- 'Cold',
- 'Happy',
- 'Sad',
- 'Fast',
- 'Slow',
- 'Old',
- 'Young',
- 'Up',
- 'Down',
- 'Left',
- 'Right',
-
- // Simple Activities
- 'Run',
- 'Walk',
- 'Jump',
- 'Swim',
- 'Sleep',
- 'Eat',
- 'Drink',
- 'Laugh',
- 'Cry',
- 'Smile',
- 'Play',
- 'Work',
- 'Read',
- 'Write',
- 'Draw',
- 'Sing',
- 'Dance',
- 'Talk',
- 'Listen',
- 'Cook',
-];
-
-// 300 Medium Words - More specific items, common concepts, popular culture
-export const MEDIUM_CATCH_PHRASE_WORDS = [
- // Household Items & Technology
- 'Refrigerator',
- 'Television',
- 'Microwave',
- 'Bookshelf',
- 'Couch',
- 'Dishwasher',
- 'Ceiling fan',
- 'Toaster',
- 'Vacuum cleaner',
- 'Blender',
- 'Printer',
- 'Headphones',
- 'Smartphone',
- 'Laptop',
- 'Tablet',
- 'Camera',
- 'Remote control',
- 'Charger',
- 'Keyboard',
- 'Mouse',
- 'Lightbulb',
- 'Shower curtain',
- 'Doorknob',
- 'Power outlet',
- 'Coffee maker',
-
- // Food & Cuisine
- 'Spaghetti',
- 'Burrito',
- 'Sushi',
- 'Pancake',
- 'Waffle',
- 'Cereal',
- 'Sandwich',
- 'Salad',
- 'French fries',
- 'Hot dog',
- 'Cupcake',
- 'Donut',
- 'Milkshake',
- 'Smoothie',
- 'Oatmeal',
- 'Peanut butter',
- 'Jelly',
- 'Bacon',
- 'Scrambled eggs',
- 'Toast',
- 'Steak',
- 'Mashed potatoes',
- 'Broccoli',
- 'Carrot',
- 'Onion',
-
- // Animals & Nature
- 'Giraffe',
- 'Penguin',
- 'Kangaroo',
- 'Dolphin',
- 'Octopus',
- 'Butterfly',
- 'Spider',
- 'Eagle',
- 'Turtle',
- 'Squirrel',
- 'Rainbow',
- 'Waterfall',
- 'Mountain',
- 'Beach',
- 'Forest',
- 'Hurricane',
- 'Snowflake',
- 'Thunderstorm',
- 'Volcano',
- 'Desert',
- 'Sunrise',
- 'Sunset',
- 'Moon',
- 'Stars',
- 'Planet',
-
- // Sports & Activities
- 'Basketball',
- 'Football',
- 'Soccer',
- 'Baseball',
- 'Tennis',
- 'Golf',
- 'Swimming',
- 'Skiing',
- 'Snowboarding',
- 'Hiking',
- 'Camping',
- 'Fishing',
- 'Gardening',
- 'Painting',
- 'Photography',
- 'Cycling',
- 'Jogging',
- 'Yoga',
- 'Dancing',
- 'Cooking',
- 'Driving',
- 'Flying',
- 'Sailing',
- 'Surfing',
- 'Rock climbing',
-
- // Clothing & Accessories
- 'Sunglasses',
- 'Umbrella',
- 'Necklace',
- 'Bracelet',
- 'Ring',
- 'Earrings',
- 'Backpack',
- 'Purse',
- 'Wallet',
- 'Watch',
- 'Sneakers',
- 'Sandals',
- 'Boots',
- 'High heels',
- 'Flip flops',
- 'Scarf',
- 'Gloves',
- 'Belt',
- 'Tie',
- 'Jacket',
- 'Sweater',
- 'Sweatshirt',
- 'Jeans',
- 'Shorts',
- 'Dress',
-
- // Places
- 'Restaurant',
- 'Grocery store',
- 'Shopping mall',
- 'Movie theater',
- 'Park',
- 'School',
- 'Library',
- 'Museum',
- 'Zoo',
- 'Airport',
- 'Hospital',
- 'Hotel',
- 'Bank',
- 'Post office',
- 'Gym',
- 'Beach',
- 'Swimming pool',
- 'Church',
- 'Stadium',
- 'Concert hall',
- 'Farm',
- 'City',
- 'Village',
- 'Country',
- 'Island',
-
- // Jobs & Professions
- 'Teacher',
- 'Doctor',
- 'Nurse',
- 'Police officer',
- 'Firefighter',
- 'Chef',
- 'Waiter',
- 'Pilot',
- 'Engineer',
- 'Scientist',
- 'Actor',
- 'Singer',
- 'Artist',
- 'Writer',
- 'Photographer',
- 'Farmer',
- 'Mechanic',
- 'Electrician',
- 'Plumber',
- 'Carpenter',
- 'Lawyer',
- 'Accountant',
- 'Businessman',
- 'Salesperson',
- 'Architect',
-
- // Transportation
- 'Bicycle',
- 'Motorcycle',
- 'Bus',
- 'Train',
- 'Airplane',
- 'Helicopter',
- 'Boat',
- 'Ship',
- 'Submarine',
- 'Rocket',
- 'Taxi',
- 'Ambulance',
- 'Fire truck',
- 'Police car',
- 'School bus',
- 'Skateboard',
- 'Scooter',
- 'Rollerblades',
- 'Wagon',
- 'Sled',
- 'Escalator',
- 'Elevator',
- 'Tractor',
- 'Bulldozer',
- 'Crane',
-
- // Entertainment & Hobbies
- 'Movie',
- 'Music',
- 'Book',
- 'Game',
- 'Puzzle',
- 'Toy',
- 'Doll',
- 'Action figure',
- 'Video game',
- 'Board game',
- 'Knitting',
- 'Sewing',
- 'Woodworking',
- 'Baking',
- 'Grilling',
- 'Hunting',
- 'Archery',
- 'Bowling',
- 'Karaoke',
- 'Dancing',
- 'Collecting',
- 'Reading',
- 'Writing',
- 'Drawing',
- 'Painting',
-
- // Body Parts & Health
- 'Heart',
- 'Brain',
- 'Stomach',
- 'Lungs',
- 'Liver',
- 'Kidneys',
- 'Skin',
- 'Hair',
- 'Nails',
- 'Teeth',
- 'Eyes',
- 'Ears',
- 'Nose',
- 'Mouth',
- 'Throat',
- 'Shoulder',
- 'Elbow',
- 'Wrist',
- 'Hip',
- 'Knee',
- 'Ankle',
- 'Exercise',
- 'Medicine',
- 'Doctor',
- 'Hospital',
-
- // Common Concepts
- 'Birthday',
- 'Wedding',
- 'Funeral',
- 'Holiday',
- 'Vacation',
- 'Friendship',
- 'Love',
- 'Family',
- 'Education',
- 'Career',
- 'Money',
- 'Time',
- 'Weather',
- 'Season',
- 'History',
- 'Future',
- 'Success',
- 'Failure',
- 'Challenge',
- 'Opportunity',
- 'Competition',
- 'Cooperation',
- 'Leadership',
- 'Creativity',
- 'Innovation',
-];
-
-// 100 Hard Words - Abstract concepts, specific terminology, complex ideas
-export const HARD_CATCH_PHRASE_WORDS = [
- // Academic & Scientific Terms
- 'Photosynthesis',
- 'Mitochondria',
- 'Quantum physics',
- 'Relativity',
- 'Biodiversity',
- 'Logarithm',
- 'Algorithm',
- 'Neural network',
- 'Nanotechnology',
- 'Thermodynamics',
- 'Paleontology',
- 'Archaeology',
- 'Linguistics',
- 'Metaphysics',
- 'Epistemology',
- 'Cryptocurrency',
- 'Blockchain',
- 'Artificial intelligence',
- 'Machine learning',
- 'Virtual reality',
-
- // Abstract Concepts
- 'Nostalgia',
- 'Ambivalence',
- 'Empathy',
- 'Serendipity',
- 'Irony',
- 'Existentialism',
- 'Utilitarianism',
- 'Nihilism',
- 'Altruism',
- 'Pragmatism',
- 'Transcendence',
- 'Symbolism',
- 'Paradox',
- 'Dichotomy',
- 'Synchronicity',
- 'Meritocracy',
- 'Bureaucracy',
- 'Democracy',
- 'Capitalism',
- 'Socialism',
-
- // Specialized Terminology
- 'Amortization',
- 'Cryptocurrency',
- 'Jurisprudence',
- 'Cartography',
- 'Meteorology',
- 'Gentrification',
- 'Immunology',
- 'Horticulture',
- 'Gerontology',
- 'Acoustics',
- 'Encryption',
- 'Astrophysics',
- 'Ornithology',
- 'Entomology',
- 'Viticulture',
- 'Numismatics',
- 'Philately',
- 'Calligraphy',
- 'Lexicography',
- 'Etymology',
-
- // Cultural & Historical References
- 'Renaissance',
- 'Industrial Revolution',
- 'Cold War',
- 'Enlightenment',
- 'Reformation',
- 'Colonialism',
- 'Globalization',
- 'Diaspora',
- 'Apartheid',
- 'Imperialism',
- 'Monarchy',
- 'Republic',
- 'Federation',
- 'Aristocracy',
- 'Oligarchy',
- 'Surrealism',
- 'Impressionism',
- 'Baroque',
- 'Neoclassicism',
- 'Romanticism',
-
- // Complex Activities & Processes
- 'Meditation',
- 'Negotiation',
- 'Diplomacy',
- 'Arbitration',
- 'Litigation',
- 'Legislation',
- 'Deliberation',
- 'Investigation',
- 'Implementation',
- 'Extrapolation',
- 'Procurement',
- 'Outsourcing',
- 'Diversification',
- 'Consolidation',
- 'Optimization',
- 'Orchestration',
- 'Choreography',
- 'Composition',
- 'Improvisation',
- 'Interpretation',
-];
-
-// Combined lists for random selection
-export const ALL_CATCH_PHRASE_WORDS = [
- ...EASY_CATCH_PHRASE_WORDS,
- ...MEDIUM_CATCH_PHRASE_WORDS,
- ...HARD_CATCH_PHRASE_WORDS,
-];
-
-// Get a batch of random words (useful for starting a game with multiple words)
-export const getRandomCatchPhraseWords = (count: number = 30): string[] => {
- const wordList = [...ALL_CATCH_PHRASE_WORDS];
-
- // Shuffle the array using Fisher-Yates algorithm
- for (let i = wordList.length - 1; i > 0; i--) {
- const j = Math.floor(Math.random() * (i + 1));
- [wordList[i], wordList[j]] = [wordList[j], wordList[i]];
- }
-
- return wordList.slice(0, count);
-};
diff --git a/examples/word-wrangler-gemini-live/client/src/hooks/useConnectionState.ts b/examples/word-wrangler-gemini-live/client/src/hooks/useConnectionState.ts
deleted file mode 100644
index e3f5b3212..000000000
--- a/examples/word-wrangler-gemini-live/client/src/hooks/useConnectionState.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { useEffect, useCallback } from 'react';
-import {
- usePipecatClient,
- usePipecatClientTransportState,
-} from '@pipecat-ai/client-react';
-import { CONNECTION_STATES } from '@/constants/gameConstants';
-import { useConfigurationSettings } from '@/contexts/Configuration';
-
-// Get the API base URL from environment variables
-// Default to "/api" if not specified
-// "/api" is the default for Next.js API routes and used
-// for the Pipecat Cloud deployed agent
-const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL || '/api';
-
-console.log('Using API base URL:', API_BASE_URL);
-
-export function useConnectionState(
- onConnected?: () => void,
- onDisconnected?: () => void
-) {
- const client = usePipecatClient();
- const transportState = usePipecatClientTransportState();
- const config = useConfigurationSettings();
-
- const isConnected = CONNECTION_STATES.ACTIVE.includes(transportState);
- const isConnecting = CONNECTION_STATES.CONNECTING.includes(transportState);
- const isDisconnecting =
- CONNECTION_STATES.DISCONNECTING.includes(transportState);
-
- // Handle connection changes
- useEffect(() => {
- if (isConnected && onConnected) {
- onConnected();
- }
- if (!isConnected && !isConnecting && onDisconnected) {
- onDisconnected();
- }
- }, [isConnected, isConnecting, onConnected, onDisconnected]);
-
- // Toggle connection state
- const toggleConnection = useCallback(async () => {
- if (!client) return;
-
- try {
- if (isConnected) {
- await client.disconnect();
- } else {
- await client.connect({
- endpoint: `${API_BASE_URL}/connect`,
- requestData: {
- personality: config.personality,
- },
- });
- }
- } catch (error) {
- console.error('Connection error:', error);
- }
- }, [client, config, isConnected]);
-
- return {
- isConnected,
- isConnecting,
- isDisconnecting,
- toggleConnection,
- transportState,
- client, // Expose the client for direct access when needed
- };
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/hooks/useGameState.ts b/examples/word-wrangler-gemini-live/client/src/hooks/useGameState.ts
deleted file mode 100644
index a0cedc78b..000000000
--- a/examples/word-wrangler-gemini-live/client/src/hooks/useGameState.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import { GAME_CONFIG, GAME_STATES, GameState } from "@/constants/gameConstants";
-import { getRandomCatchPhraseWords } from "@/data/wordWranglerWords";
-import { useCallback, useState } from "react";
-
-export function useGameState() {
- // Game state
- const [gameState, setGameState] = useState(GAME_STATES.IDLE);
- const [timeLeft, setTimeLeft] = useState(GAME_CONFIG.GAME_DURATION);
- const [score, setScore] = useState(0);
- const [words, setWords] = useState([]);
- const [currentWordIndex, setCurrentWordIndex] = useState(0);
- const [skipsRemaining, setSkipsRemaining] = useState(GAME_CONFIG.MAX_SKIPS);
- const [bestScore, _setBestScore] = useState(0);
-
- // Initialize or reset game state
- const initializeGame = useCallback(() => {
- const freshWords = getRandomCatchPhraseWords(GAME_CONFIG.WORD_POOL_SIZE);
- setWords(freshWords);
- setGameState(GAME_STATES.ACTIVE);
- setTimeLeft(GAME_CONFIG.GAME_DURATION);
- setScore(0);
- setCurrentWordIndex(0);
- setSkipsRemaining(GAME_CONFIG.MAX_SKIPS);
-
- // Get best score from local storage
- const storedScore = localStorage.getItem("bestScore");
- if (storedScore) {
- _setBestScore(Number(storedScore) || 0);
- }
- return freshWords;
- }, []);
-
- // End game
- const finishGame = useCallback(() => {
- setGameState(GAME_STATES.FINISHED);
- }, []);
-
- // Handle scoring
- const incrementScore = useCallback(() => {
- setScore((prev) => prev + 1);
- }, []);
-
- // Handle best score
- const setBestScore = useCallback((newBestScore: number) => {
- _setBestScore(newBestScore);
- localStorage.setItem("bestScore", newBestScore.toString());
- }, []);
-
- // Handle word navigation
- const moveToNextWord = useCallback(() => {
- setCurrentWordIndex((prev) => {
- if (prev >= words.length - 1) {
- // If we're at the end of the word list, get new words
- setWords(getRandomCatchPhraseWords(GAME_CONFIG.WORD_POOL_SIZE));
- return 0;
- }
- return prev + 1;
- });
- }, [words]);
-
- // Handle skipping
- const useSkip = useCallback(() => {
- if (skipsRemaining <= 0) return false;
- setSkipsRemaining((prev) => prev - 1);
- return true;
- }, [skipsRemaining]);
-
- // Update timer
- const decrementTimer = useCallback(() => {
- return setTimeLeft((prev) => {
- if (prev <= 1) {
- return 0;
- }
- return prev - 1;
- });
- }, []);
-
- return {
- // State
- gameState,
- setGameState,
- timeLeft,
- score,
- bestScore,
- words,
- currentWord: words[currentWordIndex] || "",
- skipsRemaining,
-
- // Actions
- initializeGame,
- finishGame,
- incrementScore,
- setBestScore,
- moveToNextWord,
- useSkip,
- decrementTimer,
- };
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/hooks/useGameTimer.ts b/examples/word-wrangler-gemini-live/client/src/hooks/useGameTimer.ts
deleted file mode 100644
index 91a1e8cc5..000000000
--- a/examples/word-wrangler-gemini-live/client/src/hooks/useGameTimer.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { GAME_CONFIG } from "@/constants/gameConstants";
-import { clearTimer } from "@/utils/timerUtils";
-import { useCallback, useEffect, useRef, useState } from "react";
-
-export function useGameTimer(onTimeUp: () => void) {
- const [timeLeft, setTimeLeft] = useState(GAME_CONFIG.GAME_DURATION);
- const timerRef = useRef(null);
- const hasCalledTimeUpRef = useRef(false);
-
- // Start the game timer with initial duration
- const startTimer = useCallback(() => {
- // Reset time left and timeUp flag
- setTimeLeft(GAME_CONFIG.GAME_DURATION);
- hasCalledTimeUpRef.current = false;
-
- // Clear any existing timer
- timerRef.current = clearTimer(timerRef.current);
-
- // Start a new timer
- timerRef.current = setInterval(() => {
- setTimeLeft((prev) => {
- if (prev <= 1 && !hasCalledTimeUpRef.current) {
- // Time's up - clear the interval and call the callback
- timerRef.current = clearTimer(timerRef.current);
- hasCalledTimeUpRef.current = true;
- onTimeUp();
- return 0;
- }
- return prev - 1;
- });
- }, GAME_CONFIG.TIMER_INTERVAL);
- }, [onTimeUp]);
-
- // Stop the timer
- const stopTimer = useCallback(() => {
- timerRef.current = clearTimer(timerRef.current);
- hasCalledTimeUpRef.current = false;
- }, []);
-
- // Reset the timer to initial value without starting it
- const resetTimer = useCallback(() => {
- setTimeLeft(GAME_CONFIG.GAME_DURATION);
- hasCalledTimeUpRef.current = false;
- }, []);
-
- // Cleanup on unmount
- useEffect(() => {
- return () => {
- timerRef.current = clearTimer(timerRef.current);
- };
- }, []);
-
- return {
- timeLeft,
- startTimer,
- stopTimer,
- resetTimer,
- };
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/hooks/useVisualFeedback.ts b/examples/word-wrangler-gemini-live/client/src/hooks/useVisualFeedback.ts
deleted file mode 100644
index 3cbae78c0..000000000
--- a/examples/word-wrangler-gemini-live/client/src/hooks/useVisualFeedback.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { useState, useRef, useCallback } from 'react';
-import { clearTimer } from '@/utils/timerUtils';
-import { GAME_CONFIG } from '@/constants/gameConstants';
-
-export function useVisualFeedback() {
- // Visual feedback state
- const [showAutoDetected, setShowAutoDetected] = useState(false);
- const [showIncorrect, setShowIncorrect] = useState(false);
- const autoDetectTimerRef = useRef(null);
-
- // Reset all visual states
- const resetVisuals = useCallback(() => {
- setShowAutoDetected(false);
- setShowIncorrect(false);
- autoDetectTimerRef.current = clearTimer(autoDetectTimerRef.current);
- }, []);
-
- // Show correct animation
- const showCorrect = useCallback((onComplete?: () => void) => {
- // Clear any existing animation
- autoDetectTimerRef.current = clearTimer(autoDetectTimerRef.current);
-
- // Show correct animation
- setShowAutoDetected(true);
- setShowIncorrect(false);
-
- // Set timeout to hide animation
- autoDetectTimerRef.current = setTimeout(() => {
- setShowAutoDetected(false);
- if (onComplete) onComplete();
- }, GAME_CONFIG.ANIMATION_DURATION);
- }, []);
-
- // Show incorrect animation
- const showIncorrectAnimation = useCallback(() => {
- // Clear any existing animation
- autoDetectTimerRef.current = clearTimer(autoDetectTimerRef.current);
-
- // Show incorrect animation
- setShowIncorrect(true);
- setShowAutoDetected(false);
-
- // Set timeout to hide animation
- autoDetectTimerRef.current = setTimeout(() => {
- setShowIncorrect(false);
- }, GAME_CONFIG.ANIMATION_DURATION);
- }, []);
-
- // Clean up function
- const cleanup = useCallback(() => {
- autoDetectTimerRef.current = clearTimer(autoDetectTimerRef.current);
- }, []);
-
- return {
- showAutoDetected,
- showIncorrect,
- resetVisuals,
- showCorrect,
- showIncorrectAnimation,
- cleanup,
- };
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/hooks/useWordDetection.ts b/examples/word-wrangler-gemini-live/client/src/hooks/useWordDetection.ts
deleted file mode 100644
index 9eaffad87..000000000
--- a/examples/word-wrangler-gemini-live/client/src/hooks/useWordDetection.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { useRef } from 'react';
-import { useRTVIClientEvent } from '@pipecat-ai/client-react';
-import { RTVIEvent } from '@pipecat-ai/client-js';
-import { detectWordGuess } from '@/utils/wordDetection';
-import { GAME_STATES, GameState } from '@/constants/gameConstants';
-
-interface UseWordDetectionProps {
- gameState: GameState;
- currentWord: string;
- onCorrectGuess: () => void;
- onIncorrectGuess: () => void;
-}
-
-export function useWordDetection({
- gameState,
- currentWord,
- onCorrectGuess,
- onIncorrectGuess,
-}: UseWordDetectionProps) {
- const lastProcessedMessageRef = useRef('');
-
- // Reset the last processed message
- const resetLastProcessedMessage = () => {
- lastProcessedMessageRef.current = '';
- };
-
- // Listen for bot transcripts to detect correct answers
- useRTVIClientEvent(RTVIEvent.BotTranscript, (data) => {
- if (gameState !== GAME_STATES.ACTIVE) {
- return;
- }
-
- if (!currentWord) {
- return;
- }
-
- if (!data.text) {
- return;
- }
-
- // Skip if this is a repeat of the same transcript
- if (data.text === lastProcessedMessageRef.current) {
- return;
- }
-
- lastProcessedMessageRef.current = data.text;
-
- // Use the utility function to detect word guesses
- const result = detectWordGuess(data.text, currentWord);
-
- if (result.isCorrect) {
- onCorrectGuess();
- } else if (result.isExplicitGuess) {
- onIncorrectGuess();
- } else {
- }
- });
-
- return {
- resetLastProcessedMessage,
- };
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/pages/_app.tsx b/examples/word-wrangler-gemini-live/client/src/pages/_app.tsx
deleted file mode 100644
index bd0ab9c8c..000000000
--- a/examples/word-wrangler-gemini-live/client/src/pages/_app.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { ConfigurationProvider } from '@/contexts/Configuration';
-import { PipecatProvider } from '@/providers/PipecatProvider';
-import { PipecatClientAudio } from '@pipecat-ai/client-react';
-import type { AppProps } from 'next/app';
-import { Nunito } from 'next/font/google';
-import Head from 'next/head';
-import '../styles/globals.css';
-
-const nunito = Nunito({
- subsets: ['latin'],
- display: 'swap',
- variable: '--font-sans',
-});
-
-export default function App({ Component, pageProps }: AppProps) {
- return (
- <>
-
- Daily | Word Wrangler
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/pages/_document.tsx b/examples/word-wrangler-gemini-live/client/src/pages/_document.tsx
deleted file mode 100644
index a19a03f3b..000000000
--- a/examples/word-wrangler-gemini-live/client/src/pages/_document.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import { Head, Html, Main, NextScript } from "next/document";
-
-export default function Document() {
- return (
-
-
-
-
-
-
-
- {/* Open Graph / Social Media Meta Tags */}
-
-
-
-
-
-
- {/* Twitter Card Meta Tags */}
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/pages/api/connect.ts b/examples/word-wrangler-gemini-live/client/src/pages/api/connect.ts
deleted file mode 100644
index ac6e70f1d..000000000
--- a/examples/word-wrangler-gemini-live/client/src/pages/api/connect.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import type { NextApiRequest, NextApiResponse } from 'next';
-
-export default async function handler(
- req: NextApiRequest,
- res: NextApiResponse
-) {
- if (req.method !== 'POST') {
- return res.status(405).json({ error: 'Method not allowed' });
- }
-
- try {
- const { personality } = req.body;
-
- // Validate required parameters
- if (!personality) {
- return res
- .status(400)
- .json({ error: 'Missing required configuration parameters' });
- }
-
- const response = await fetch(
- `https://api.pipecat.daily.co/v1/public/${process.env.AGENT_NAME}/start`,
- {
- method: 'POST',
- headers: {
- Authorization: `Bearer ${process.env.PIPECAT_CLOUD_API_KEY}`,
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- createDailyRoom: true,
- body: {
- personality,
- },
- }),
- }
- );
-
- const data = await response.json();
-
- console.log('Response from API:', JSON.stringify(data, null, 2));
-
- // Transform the response to match what Pipecat client expects
- return res.status(200).json({
- room_url: data.dailyRoom,
- token: data.dailyToken,
- });
- } catch (error) {
- console.error('Error starting agent:', error);
- return res.status(500).json({ error: 'Failed to start agent' });
- }
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/pages/index.tsx b/examples/word-wrangler-gemini-live/client/src/pages/index.tsx
deleted file mode 100644
index 0426c67a5..000000000
--- a/examples/word-wrangler-gemini-live/client/src/pages/index.tsx
+++ /dev/null
@@ -1,168 +0,0 @@
-import { Card, CardInner } from "@/components/Card";
-import { WordWrangler } from "@/components/Game/WordWrangler";
-import { StartGameButton } from "@/components/StartButton";
-import { GAME_TEXT } from "@/constants/gameConstants";
-import { useConfigurationSettings } from "@/contexts/Configuration";
-import { PERSONALITY_PRESETS, PersonalityType } from "@/types/personality";
-import {
- IconArrowForwardUp,
- IconCheck,
- IconCode,
- IconX,
-} from "@tabler/icons-react";
-import JSConfetti from "js-confetti";
-import Image from "next/image";
-import Link from "next/link";
-import { useEffect, useState } from "react";
-import Logo from "../assets/logo.png";
-import Star from "../assets/star.png";
-
-export default function Home() {
- const [hasStarted, setHasStarted] = useState(false);
- const [gameEnded, setGameEnded] = useState(false);
- const [score, setScore] = useState(0);
- const [bestScore, setBestScore] = useState(0);
- const config = useConfigurationSettings();
-
- useEffect(() => {
- if (gameEnded) {
- const confetti = new JSConfetti();
- confetti.addConfetti({
- emojis: ["โญ", "โก๏ธ", "๐", "โจ", "๐ซ", "๐", "๐ฏ"],
- });
- }
- }, [gameEnded]);
-
- if (gameEnded) {
- return (
-
-
-
-
-
-
-
- {GAME_TEXT.finalScore}
-
- {score}
-
-
- {GAME_TEXT.finalScoreMessage}{" "}
-
- {bestScore}
-
-
-
-
-
-
- View project source code
-
-
-
-
-
-
- {
- setGameEnded(false);
- setScore(0);
- setHasStarted(true);
- }}
- />
-
-
- );
- }
-
- if (!hasStarted) {
- return (
-
-
-
-
-
-
-
-
- {GAME_TEXT.introTitle}
-
-
-
-
-
-
-
- {GAME_TEXT.introGuide1}
-
-
-
-
-
-
-
- {GAME_TEXT.introGuide2}
-
-
-
-
-
-
-
- {GAME_TEXT.introGuide3}
-
-
-
-
-
-
-
- {GAME_TEXT.aiPersonality}
-
- config.setPersonality(e.target.value as PersonalityType)
- }
- >
- {Object.entries(PERSONALITY_PRESETS).map(
- ([value, label]) => (
-
- {label}
-
- )
- )}
-
-
-
-
-
-
-
- setHasStarted(true)} />
-
-
- );
- }
-
- return (
- {
- setScore(score);
- setBestScore(bestScore);
- setGameEnded(true);
- }}
- />
- );
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/providers/PipecatProvider.tsx b/examples/word-wrangler-gemini-live/client/src/providers/PipecatProvider.tsx
deleted file mode 100644
index 20f3ebc07..000000000
--- a/examples/word-wrangler-gemini-live/client/src/providers/PipecatProvider.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-'use client';
-
-import { PipecatClient } from '@pipecat-ai/client-js';
-import { DailyTransport } from '@pipecat-ai/daily-transport';
-import { PipecatClientProvider } from '@pipecat-ai/client-react';
-import { PropsWithChildren, useEffect, useState, useRef } from 'react';
-
-export function PipecatProvider({ children }: PropsWithChildren) {
- const [client, setClient] = useState(null);
- const clientCreated = useRef(false);
-
- useEffect(() => {
- // Only create the client once
- if (clientCreated.current) return;
-
- const pcClient = new PipecatClient({
- transport: new DailyTransport(),
- enableMic: true,
- enableCam: false,
- });
-
- setClient(pcClient);
- clientCreated.current = true;
-
- // Cleanup when component unmounts
- return () => {
- if (pcClient) {
- pcClient.disconnect().catch((err) => {
- console.error('Error disconnecting client:', err);
- });
- }
- clientCreated.current = false;
- };
- }, []);
-
- if (!client) {
- return null;
- }
-
- return (
- {children}
- );
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/styles/HomeStyles.ts b/examples/word-wrangler-gemini-live/client/src/styles/HomeStyles.ts
deleted file mode 100644
index 4ce297d61..000000000
--- a/examples/word-wrangler-gemini-live/client/src/styles/HomeStyles.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-export const styles = {
- main: {
- display: "flex",
- flexDirection: "column" as const,
- justifyContent: "flex-start",
- alignItems: "center",
- minHeight: "100vh",
- padding: "2rem 0",
- },
- container: {
- width: "100%",
- maxWidth: "800px",
- padding: "0 1rem",
- },
- title: {
- fontSize: "2rem",
- textAlign: "center" as const,
- marginBottom: "2rem",
- color: "#333",
- },
- gameContainer: {
- marginBottom: "2rem",
- },
- controlsContainer: {
- display: "flex",
- flexDirection: "column" as const,
- gap: "1rem",
- marginBottom: "2rem",
- },
- settings: {
- backgroundColor: "white",
- padding: "1rem",
- borderRadius: "8px",
- boxShadow: "0 1px 3px rgba(0,0,0,0.1)",
- },
- label: {
- display: "flex",
- flexDirection: "column" as const,
- gap: "0.5rem",
- fontSize: "0.9rem",
- color: "#555",
- },
- select: {
- padding: "0.5rem",
- border: "1px solid #ddd",
- borderRadius: "4px",
- fontSize: "1rem",
- },
- instructions: {
- backgroundColor: "white",
- padding: "1.5rem",
- borderRadius: "8px",
- boxShadow: "0 1px 3px rgba(0,0,0,0.1)",
- },
- instructionsTitle: {
- fontSize: "1.4rem",
- marginBottom: "1rem",
- color: "#333",
- },
- instructionsList: {
- paddingLeft: "1.5rem",
- lineHeight: 1.6,
- },
-};
diff --git a/examples/word-wrangler-gemini-live/client/src/styles/globals.css b/examples/word-wrangler-gemini-live/client/src/styles/globals.css
deleted file mode 100644
index 7e5733b1e..000000000
--- a/examples/word-wrangler-gemini-live/client/src/styles/globals.css
+++ /dev/null
@@ -1,297 +0,0 @@
-@import "tailwindcss";
-
-@theme {
- --border-radius-card: 24px;
- --border-width-card: 4px;
- --theme-gradient-start: #fdd256;
- --theme-gradient-end: #a62249;
- --button-height-sm: 52px;
- --button-height: 58px;
- --animate-bounce-in: zoom-bounce 0.75s ease-out forwards;
-}
-
-html,
-body {
- max-width: 100vw;
- overflow-x: hidden;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
- Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
-}
-
-body {
- height: 100dvh;
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- background: linear-gradient(180deg, #0059b7 0%, #7dceff 100%);
-}
-
-main {
- font-family: var(--font-sans);
- padding: 0 12px;
-}
-
-a {
- color: inherit;
- text-decoration: none;
-}
-
-button:disabled {
- opacity: 0.6;
- cursor: not-allowed;
-}
-
-button:not(:disabled):hover {
- opacity: 0.9;
-}
-
-button:not(:disabled):active {
- transform: translateY(1px);
-}
-
-.card-border {
- position: relative;
- z-index: 1;
-}
-
-.card-border:before {
- content: "";
- position: absolute;
- inset: -4px -4px -8px -4px;
- border-radius: 28px;
- background: linear-gradient(
- to bottom,
- rgba(0, 0, 0, 1) 0%,
- rgba(0, 0, 0, 0.15) 100%
- );
- z-index: -1;
-}
-
-.card-border:after {
- content: "";
- box-sizing: border-box;
- position: absolute;
- inset: 0;
- background: #ffffff;
- border-radius: var(--border-radius-card);
- border: var(--border-width-card) solid transparent;
- background-image: linear-gradient(#ffffff, #ffffff),
- linear-gradient(
- 180deg,
- var(--theme-gradient-start) 0%,
- var(--theme-gradient-end) 100%
- );
- background-origin: border-box;
- background-clip: padding-box, border-box;
-}
-
-select {
- appearance: none;
- -webkit-appearance: none;
- -moz-appearance: none;
- padding: 0 36px 0 12px;
- background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfNV80MSkiPjxwYXRoIGQ9Ik04IDlMMTIgNUwxNiA5IiBzdHJva2U9IiNCQkQ1RTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PHBhdGggZD0iTTE2IDE1TDEyIDE5TDggMTUiIHN0cm9rZT0iI0JCRDU4MSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJjbGlwMF81XzQxIj48cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIi8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+");
- background-repeat: no-repeat;
- background-position: right 12px center;
- background-size: 24px;
- border: 1px solid var(--color-slate-200);
- color: var(--color-slate-600);
-}
-
-select::-ms-expand {
- display: none;
-}
-
-.styled-button {
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: center;
- cursor: pointer;
- gap: 12px;
- border-radius: 16px;
- position: relative;
- color: #ffffff;
- text-align: center;
- height: 56px;
- padding: 0 32px;
- background: linear-gradient(
- to bottom,
- transparent 0%,
- transparent 88%,
- rgba(255, 255, 255, 0.2) 88%,
- rgba(255, 255, 255, 0.2) 100%
- ),
- linear-gradient(180deg, #10abe3 0%, #0046b5 98.08%);
- border-width: 2px 2px 5px 2px;
- border-style: solid;
- border-color: #000000;
- overflow: hidden;
- box-shadow: 0px 4px 0px 4px rgba(0, 0, 0, 0.12);
-}
-
-.styled-button:before {
- content: "";
- position: absolute;
- inset: 0;
- pointer-events: none;
- border-radius: 12px;
- border: 4px solid transparent;
- background-image: linear-gradient(
- 180deg,
- var(--theme-gradient-start) 0%,
- var(--theme-gradient-end) 100%
- );
- background-origin: border-box;
- background-clip: border-box;
- -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);
- -webkit-mask-composite: xor;
- mask-composite: exclude;
- z-index: 1;
-}
-
-.styled-button:after {
- content: "";
- position: absolute;
- inset: 2px;
- border-radius: 12px;
- border: 2px solid #0d1e4c;
- z-index: 2;
-}
-
-.styled-button-text {
- color: white;
- font-size: 14px;
- font-weight: 800;
- text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.35);
- text-transform: uppercase;
- letter-spacing: 1px;
- z-index: 2;
- position: relative;
-}
-
-.styled-button:active {
- transform: translateY(6px);
- box-shadow: 0 0 0 #000000, inset 0 -2px 12px rgba(0, 0, 0, 0.2),
- inset 0 2px 12px rgba(255, 255, 255, 0.4);
-}
-
-.styled-button-icon {
- position: relative;
- box-sizing: border-box;
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- flex-grow: 0;
- padding: 0px;
- width: 30px;
- height: 30px;
- background: rgba(42, 88, 173, 0.25);
- border-radius: 999px;
- z-index: 1;
-}
-.styled-button-icon:after {
- pointer-events: none;
- content: "";
- position: absolute;
- inset: 0px;
- background: rgba(3, 85, 188, 0.5);
- border-radius: 999px;
- border: 2px solid #0a82d1;
- z-index: -1;
-}
-
-@media (min-width: 1024px) {
- .styled-button {
- height: 60px;
- }
- .styled-button-text {
- font-size: 16px;
- }
-}
-
-.spinner {
- width: 16px;
- height: 16px;
- border: 2px solid rgba(255, 255, 255, 0.3);
- border-top: 2px solid #ffffff;
- border-radius: 50%;
- animation: spin 1s linear infinite;
-}
-
-@keyframes spin {
- 0% {
- transform: rotate(0deg);
- }
- 100% {
- transform: rotate(360deg);
- }
-}
-
-.button {
- appearance: none;
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: center;
- gap: 6px;
- cursor: pointer;
- background-color: rgba(0, 0, 0, 0.15);
- color: #ffffff;
- font-weight: 800;
- padding: 0 12px;
- height: var(--button-height-sm);
- border-radius: 999px;
- font-size: 16px;
-
- &.outline {
- border: 2px solid rgba(255, 255, 255, 0.35);
- background-color: transparent;
- outline: none;
- transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
- }
- &.outline:hover {
- background-color: rgba(255, 255, 255, 0.1);
- border-color: rgba(255, 255, 255, 0.5);
- }
-
- &.ghost {
- background-color: var(--color-slate-100);
- color: var(--color-slate-600);
- height: var(--button-height-sm);
- }
-
- &.ghost:hover {
- background-color: var(--color-slate-200);
- }
-}
-
-@media (min-width: 1024px) {
- .button {
- padding: 0 24px;
- gap: 12px;
- height: var(--button-height);
- }
-}
-
-/* Animations */
-
-@keyframes zoom-bounce {
- 0% {
- transform: scale(0.25);
- animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
- }
- 50% {
- transform: scale(1.1);
- animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
- }
- 75% {
- transform: scale(0.95);
- animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
- }
- 100% {
- transform: scale(1);
- }
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/types/personality.ts b/examples/word-wrangler-gemini-live/client/src/types/personality.ts
deleted file mode 100644
index 2807b0b51..000000000
--- a/examples/word-wrangler-gemini-live/client/src/types/personality.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-export type PersonalityType =
- | 'friendly'
- | 'professional'
- | 'enthusiastic'
- | 'thoughtful'
- | 'witty';
-
-// This object can be useful for displaying user-friendly labels or descriptions
-export const PERSONALITY_PRESETS: Record = {
- friendly: 'Friendly',
- professional: 'Professional',
- enthusiastic: 'Enthusiastic',
- thoughtful: 'Thoughtful',
- witty: 'Witty',
-};
-
-// Default personality to use
-export const DEFAULT_PERSONALITY: PersonalityType = 'witty';
diff --git a/examples/word-wrangler-gemini-live/client/src/utils/formatTime.ts b/examples/word-wrangler-gemini-live/client/src/utils/formatTime.ts
deleted file mode 100644
index 3ac096bf9..000000000
--- a/examples/word-wrangler-gemini-live/client/src/utils/formatTime.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Formats seconds into MM:SS format
- */
-export function formatTime(seconds: number): string {
- const mins = Math.floor(seconds / 60);
- const secs = seconds % 60;
- return `${mins}:${secs < 10 ? '0' : ''}${secs}`;
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/utils/timerUtils.ts b/examples/word-wrangler-gemini-live/client/src/utils/timerUtils.ts
deleted file mode 100644
index 374493829..000000000
--- a/examples/word-wrangler-gemini-live/client/src/utils/timerUtils.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Safely clears any type of timer
- * @param timer The timer to clear
- * @returns null to reassign to the timer reference
- */
-export function clearTimer(timer: NodeJS.Timeout | null): null {
- if (timer) {
- clearTimeout(timer);
- }
- return null;
-}
-
-/**
- * Creates a countdown timer that calls the callback every second
- * @returns A function to stop the timer
- */
-export function createCountdownTimer(
- durationSeconds: number,
- onTick: (secondsLeft: number) => void,
- onComplete: () => void
-): () => void {
- let secondsLeft = durationSeconds;
-
- const timer = setInterval(() => {
- secondsLeft--;
- onTick(secondsLeft);
-
- if (secondsLeft <= 0) {
- clearInterval(timer);
- onComplete();
- }
- }, 1000);
-
- return () => {
- clearInterval(timer);
- };
-}
diff --git a/examples/word-wrangler-gemini-live/client/src/utils/wordDetection.ts b/examples/word-wrangler-gemini-live/client/src/utils/wordDetection.ts
deleted file mode 100644
index da02acdd6..000000000
--- a/examples/word-wrangler-gemini-live/client/src/utils/wordDetection.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { TRANSCRIPT_PATTERNS } from '@/constants/gameConstants';
-
-/**
- * Checks if a transcript contains a correct guess for the target word
- */
-export function detectWordGuess(transcript: string, targetWord: string) {
- const currentWordLower = targetWord.toLowerCase().trim();
-
- // Primary detection: Look for explicit guesses
- const guessPattern = TRANSCRIPT_PATTERNS.GUESS_PATTERN;
- const guessMatch = transcript.match(guessPattern);
-
- if (guessMatch) {
- // Extract the guessed word from whichever group matched (group 1 or 2)
- let guessedWord = (guessMatch[1] || guessMatch[2] || '')
- .toLowerCase()
- .trim();
-
- // Remove articles ("a", "an", "the") from the beginning of the guessed word
- guessedWord = guessedWord.replace(/^(a|an|the)\s+/i, '');
-
- return {
- isCorrect: guessedWord === currentWordLower,
- isExplicitGuess: true,
- guessedWord,
- };
- }
-
- // Secondary detection: Check if word appears in transcript
- const containsWord = transcript.toLowerCase().includes(currentWordLower);
-
- return {
- isCorrect: containsWord,
- isExplicitGuess: false,
- guessedWord: containsWord ? targetWord : null,
- };
-}
diff --git a/examples/word-wrangler-gemini-live/client/tsconfig.json b/examples/word-wrangler-gemini-live/client/tsconfig.json
deleted file mode 100644
index c361dd5b2..000000000
--- a/examples/word-wrangler-gemini-live/client/tsconfig.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2017",
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "paths": {
- "@/components/*": ["./src/components/*"],
- "@/contexts/*": ["./src/contexts/*"],
- "@/providers/*": ["./src/providers/*"],
- "@/styles/*": ["./src/styles/*"],
- "@/data/*": ["./src/data/*"],
- "@/types/*": ["./src/types/*"],
- "@/constants/*": ["./src/constants/*"],
- "@/utils/*": ["./src/utils/*"],
- "@/hooks/*": ["./src/hooks/*"]
- }
- },
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
- "exclude": ["node_modules"]
-}
diff --git a/examples/word-wrangler-gemini-live/images/word-wrangler-twilio-architecture.png b/examples/word-wrangler-gemini-live/images/word-wrangler-twilio-architecture.png
deleted file mode 100644
index 9762719ea..000000000
Binary files a/examples/word-wrangler-gemini-live/images/word-wrangler-twilio-architecture.png and /dev/null differ
diff --git a/examples/word-wrangler-gemini-live/images/word-wrangler-web-architecture.png b/examples/word-wrangler-gemini-live/images/word-wrangler-web-architecture.png
deleted file mode 100644
index fa778882f..000000000
Binary files a/examples/word-wrangler-gemini-live/images/word-wrangler-web-architecture.png and /dev/null differ
diff --git a/examples/word-wrangler-gemini-live/images/word-wrangler-web-screenshot.png b/examples/word-wrangler-gemini-live/images/word-wrangler-web-screenshot.png
deleted file mode 100644
index ce8b65962..000000000
Binary files a/examples/word-wrangler-gemini-live/images/word-wrangler-web-screenshot.png and /dev/null differ
diff --git a/examples/word-wrangler-gemini-live/server/.gitignore b/examples/word-wrangler-gemini-live/server/.gitignore
deleted file mode 100644
index 68a1d9b56..000000000
--- a/examples/word-wrangler-gemini-live/server/.gitignore
+++ /dev/null
@@ -1,53 +0,0 @@
-# Python
-__pycache__/
-*.py[cod]
-*$py.class
-*.so
-.Python
-build/
-dist/
-*.egg-info/
-.installed.cfg
-*.egg
-.pytest_cache/
-.coverage
-.coverage.*
-.env
-.venv
-env/
-venv/
-ENV/
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# JavaScript/Node.js
-node_modules/
-dist/
-dist-ssr/
-*.local
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-# Logs
-logs/
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-# Editor/IDE
-.vscode/*
-!.vscode/extensions.json
-.idea/
-*.swp
-*.swo
-.DS_Store
-
-# Project specific
-runpod.toml
-pcc-deploy.toml
-build.sh
\ No newline at end of file
diff --git a/examples/word-wrangler-gemini-live/server/Dockerfile b/examples/word-wrangler-gemini-live/server/Dockerfile
deleted file mode 100644
index d10e666ea..000000000
--- a/examples/word-wrangler-gemini-live/server/Dockerfile
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM dailyco/pipecat-base:latest
-
-COPY ./requirements.txt requirements.txt
-
-RUN pip install --no-cache-dir --upgrade -r requirements.txt
-
-COPY ./bot.py bot.py
diff --git a/examples/word-wrangler-gemini-live/server/bot.py b/examples/word-wrangler-gemini-live/server/bot.py
deleted file mode 100644
index 63cf187a7..000000000
--- a/examples/word-wrangler-gemini-live/server/bot.py
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import asyncio
-import os
-import sys
-from typing import Any, Dict
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from pipecatcloud.agent import DailySessionArguments
-
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
-from pipecat.processors.filters.stt_mute_filter import STTMuteConfig, STTMuteFilter, STTMuteStrategy
-from pipecat.processors.frameworks.rtvi import (
- RTVIConfig,
- RTVIObserver,
- RTVIProcessor,
-)
-from pipecat.services.gemini_multimodal_live.gemini import GeminiMultimodalLiveLLMService
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-
-load_dotenv(override=True)
-
-# Check if we're in local development mode
-LOCAL_RUN = os.getenv("LOCAL_RUN")
-
-logger.add(sys.stderr, level="DEBUG")
-
-# Define conversation modes with their respective prompt templates
-game_prompt = """You are the AI host and player for a game of Word Wrangler.
-
-GAME RULES:
-1. The user will be given a word or phrase that they must describe to you
-2. The user CANNOT say any part of the word/phrase directly
-3. You must try to guess the word/phrase based on the user's description
-4. Once you guess correctly, the user will move on to their next word
-5. The user is trying to get through as many words as possible in 60 seconds
-6. The external application will handle timing and keeping score
-
-YOUR ROLE:
-1. Start with this exact brief introduction: "Welcome to Word Wrangler! I'll try to guess the words you describe. Remember, don't say any part of the word itself. Ready? Let's go!"
-2. Listen carefully to the user's descriptions
-3. Make intelligent guesses based on what they say
-4. When you think you know the answer, state it clearly: "Is it [your guess]?"
-5. If you're struggling, ask for more specific clues
-6. Keep the game moving quickly - make guesses promptly
-7. Be enthusiastic and encouraging
-
-IMPORTANT:
-- Keep all responses brief - the game is timed!
-- Make multiple guesses if needed
-- Use your common knowledge to make educated guesses
-- If the user indicates you got it right, just say "Got it!" and prepare for the next word
-- If you've made several wrong guesses, simply ask for "Another clue please?"
-
-Start with the exact introduction specified above, then wait for the user to begin describing their first word."""
-
-# Define personality presets
-PERSONALITY_PRESETS = {
- "friendly": "You have a warm, approachable personality. You use conversational language, occasional humor, and express enthusiasm for the topic. Make the user feel comfortable and engaged.",
- "professional": "You have a formal, precise personality. You communicate clearly and directly with a focus on accuracy and relevance. Your tone is respectful and business-like.",
- "enthusiastic": "You have an energetic, passionate personality. You express excitement about the topic and use dynamic language. You're encouraging and positive throughout the conversation.",
- "thoughtful": "You have a reflective, philosophical personality. You speak carefully, considering multiple angles of each point. You ask thought-provoking questions and acknowledge nuance.",
- "witty": "You have a clever, humorous personality. While remaining informative, you inject appropriate wit and playful language. Your goal is to be engaging and entertaining while still being helpful.",
-}
-
-
-async def main(transport: DailyTransport, config: Dict[str, Any]):
- # Use the provided session logger if available, otherwise use the default logger
- logger.debug("Configuration: {}", config)
-
- # Extract configuration parameters with defaults
- personality = config.get("personality", "witty")
-
- personality_prompt = PERSONALITY_PRESETS.get(personality, PERSONALITY_PRESETS["friendly"])
-
- system_instruction = f"""{game_prompt}
-
-{personality_prompt}
-
-Important guidelines:
-1. Your responses will be converted to speech, so keep them concise and conversational.
-2. Don't use special characters or formatting that wouldn't be natural in speech.
-3. Encourage the user to elaborate when appropriate."""
-
- intro_message = """Start with this exact brief introduction: "Welcome to Word Wrangler! I'll try to guess the words you describe. Remember, don't say any part of the word itself. Ready? Let's go!"""
-
- # Create the STT mute filter if we have strategies to apply
- stt_mute_filter = STTMuteFilter(
- config=STTMuteConfig(strategies={STTMuteStrategy.MUTE_UNTIL_FIRST_BOT_COMPLETE})
- )
-
- llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- transcribe_user_audio=True,
- system_instruction=system_instruction,
- )
-
- # Set up the initial context for the conversation
- messages = [
- {
- "role": "user",
- "content": intro_message,
- },
- ]
-
- # This sets up the LLM context by providing messages and tools
- context = OpenAILLMContext(messages)
- context_aggregator = llm.create_context_aggregator(context)
-
- # RTVI events for Pipecat client UI
- rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
-
- pipeline = Pipeline(
- [
- transport.input(),
- rtvi,
- stt_mute_filter,
- context_aggregator.user(),
- llm,
- transport.output(),
- context_aggregator.assistant(),
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- observers=[RTVIObserver(rtvi)],
- )
-
- @rtvi.event_handler("on_client_ready")
- async def on_client_ready(rtvi):
- logger.debug("Client ready event received")
- await rtvi.set_bot_ready()
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.info("First participant joined: {}", participant["id"])
- # Capture the participant's transcription
- await transport.capture_participant_transcription(participant["id"])
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.info("Participant left: {}", participant)
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False, force_gc=True)
-
- await runner.run(task)
-
-
-async def bot(args: DailySessionArguments):
- """Main bot entry point compatible with the FastAPI route handler.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: The configuration object from the request body
- session_id: The session ID for logging
- """
- from pipecat.audio.filters.krisp_filter import KrispFilter
-
- logger.info(f"Bot process initialized {args.room_url} {args.token}")
-
- transport = DailyTransport(
- args.room_url,
- args.token,
- "Word Wrangler Bot",
- DailyParams(
- audio_in_enabled=True,
- audio_in_filter=None if LOCAL_RUN else KrispFilter(),
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- try:
- await main(transport, args.body)
- logger.info("Bot process completed")
- except Exception as e:
- logger.exception(f"Error in bot process: {str(e)}")
- raise
-
-
-# Local development
-async def local_daily(args: DailySessionArguments):
- """Daily transport for local development."""
- # from runner import configure
-
- try:
- async with aiohttp.ClientSession() as session:
- transport = DailyTransport(
- room_url=args.room_url,
- token=args.token,
- bot_name="Bot",
- params=DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- test_config = {
- "personality": args.personality,
- }
-
- await main(transport, test_config)
- except Exception as e:
- logger.exception(f"Error in local development mode: {e}")
-
-
-# Local development entry point
-if LOCAL_RUN and __name__ == "__main__":
- parser = argparse.ArgumentParser(
- description="Run the Word Wrangler bot in local development mode"
- )
- parser.add_argument(
- "-u", "--room-url", type=str, default=os.getenv("DAILY_SAMPLE_ROOM_URL", "")
- )
- parser.add_argument(
- "-t", "--token", type=str, default=os.getenv("DAILY_SAMPLE_ROOM_TOKEN", None)
- )
- parser.add_argument(
- "-p",
- "--personality",
- default="witty",
- choices=["friendly", "professional", "enthusiastic", "thoughtful", "witty"],
- help="Personality preset for the bot (friendly, professional, enthusiastic, thoughtful, witty)",
- )
- args = parser.parse_args()
- try:
- asyncio.run(local_daily(args))
- except Exception as e:
- logger.exception(f"Failed to run in local mode: {e}")
diff --git a/examples/word-wrangler-gemini-live/server/bot_phone_local.py b/examples/word-wrangler-gemini-live/server/bot_phone_local.py
deleted file mode 100644
index 0e2739411..000000000
--- a/examples/word-wrangler-gemini-live/server/bot_phone_local.py
+++ /dev/null
@@ -1,751 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""Word Wrangler: A voice-based word guessing game.
-
-To run this demo:
-1. Set up environment variables:
- - GOOGLE_API_KEY: API key for Google services
- - GOOGLE_TEST_CREDENTIALS_FILE: Path to Google credentials JSON file
-
-2. Install requirements:
- pip install -r requirements.txt
-
-3. Run in local development mode:
- LOCAL_RUN=1 python word_wrangler.py
-"""
-
-import asyncio
-import os
-import re
-import sys
-from typing import Any, Mapping, Optional
-
-import aiohttp
-from dotenv import load_dotenv
-from loguru import logger
-from pipecatcloud.agent import DailySessionArguments
-from word_list import generate_game_words
-
-from pipecat.audio.utils import create_default_resampler
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- BotStoppedSpeakingFrame,
- CancelFrame,
- EndFrame,
- Frame,
- InputAudioRawFrame,
- LLMFullResponseEndFrame,
- LLMTextFrame,
- StartFrame,
- TTSAudioRawFrame,
- TTSSpeakFrame,
-)
-from pipecat.pipeline.parallel_pipeline import ParallelPipeline
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import (
- OpenAILLMContext,
-)
-from pipecat.processors.consumer_processor import ConsumerProcessor
-from pipecat.processors.filters.stt_mute_filter import STTMuteConfig, STTMuteFilter, STTMuteStrategy
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.producer_processor import ProducerProcessor
-from pipecat.services.gemini_multimodal_live.gemini import (
- GeminiMultimodalLiveLLMService,
- GeminiMultimodalModalities,
- InputParams,
-)
-from pipecat.services.google.tts import GoogleTTSService
-from pipecat.sync.base_notifier import BaseNotifier
-from pipecat.sync.event_notifier import EventNotifier
-from pipecat.transports.services.daily import DailyParams, DailyTransport
-from pipecat.utils.text.base_text_filter import BaseTextFilter
-
-load_dotenv(override=True)
-
-# Check if we're in local development mode
-LOCAL_RUN = os.getenv("LOCAL_RUN")
-if LOCAL_RUN:
- import webbrowser
-
- try:
- from runner import configure
- except ImportError:
- logger.error("Could not import local_runner module. Local development mode may not work.")
-
-
-logger.add(sys.stderr, level="DEBUG")
-
-GAME_DURATION_SECONDS = 120
-NUM_WORDS_PER_GAME = 20
-HOST_VOICE_ID = "en-US-Chirp3-HD-Charon"
-PLAYER_VOICE_ID = "Kore"
-
-# Define conversation modes with their respective prompt templates
-game_player_prompt = """You are a player for a game of Word Wrangler.
-
-GAME RULES:
-1. The user will be given a word or phrase that they must describe to you
-2. The user CANNOT say any part of the word/phrase directly
-3. You must try to guess the word/phrase based on the user's description
-4. Once you guess correctly, the user will move on to their next word
-5. The user is trying to get through as many words as possible in 60 seconds
-6. The external application will handle timing and keeping score
-
-YOUR ROLE:
-1. Listen carefully to the user's descriptions
-2. Make intelligent guesses based on what they say
-3. When you think you know the answer, state it clearly: "Is it [your guess]?"
-4. If you're struggling, ask for more specific clues
-5. Keep the game moving quickly - make guesses promptly
-6. Be enthusiastic and encouraging
-
-IMPORTANT:
-- Keep all responses brief - the game is timed!
-- Make multiple guesses if needed
-- Use your common knowledge to make educated guesses
-- If the user indicates you got it right, just say "Got it!" and prepare for the next word
-- If you've made several wrong guesses, simply ask for "Another clue please?"
-
-Start by guessing once you hear the user describe the word or phrase."""
-
-game_host_prompt = """You are the AI host for a game of Word Wrangler. There are two players in the game: the human describer and the AI guesser.
-
-GAME RULES:
-1. You, the host, will give the human describer a word or phrase that they must describe
-2. The describer CANNOT say any part of the word/phrase directly
-3. The AI guesser will try to guess the word/phrase based on the describer's description
-4. Once the guesser guesses correctly, move on to the next word
-5. The describer is trying to get through as many words as possible in 60 seconds
-6. The describer can say "skip" or "pass" to get a new word if they find a word too difficult
-7. The describer can ask you to repeat the current word if they didn't hear it clearly
-8. You'll keep track of the score (1 point for each correct guess)
-9. The external application will handle timing
-
-YOUR ROLE:
-1. Start with this exact brief introduction: "Welcome to Word Wrangler! I'll give you words to describe, and the A.I. player will try to guess them. Remember, don't say any part of the word itself. Here's your first word: [word]."
-2. Provide words to the describer. Choose 1 or 2 word phrases that cover a variety of topics, including animals, objects, places, and actions.
-3. IMPORTANT: You will hear DIFFERENT types of input:
- a. DESCRIPTIONS from the human (which you should IGNORE)
- b. AFFIRMATIONS from the human (like "correct", "that's right", "you got it") which you should IGNORE
- c. GUESSES from the AI player (which will be in the form of "Is it [word]?" or similar question format)
- d. SKIP REQUESTS from the human (if they say "skip", "pass", or "next word please")
- e. REPEAT REQUESTS from the human (if they say "repeat", "what was that?", "say again", etc.)
-
-4. HOW TO RESPOND:
- - If you hear a DESCRIPTION or AFFIRMATION from the human, respond with exactly "IGNORE" (no other text)
- - If you hear a GUESS (in question form) and it's INCORRECT, respond with exactly "NO" (no other text)
- - If you hear a GUESS (in question form) and it's CORRECT, respond with "Correct! That's [N] points. Your next word is [new word]" where N is the current score
- - If you hear a SKIP REQUEST, respond with "The new word is [new word]" (don't change the score)
- - If you hear a REPEAT REQUEST, respond with "Your word is [current word]" (don't change the score)
-
-5. SCORING:
- - Start with a score of 0
- - Add 1 point for each correct guess by the AI player
- - Do NOT add points for skipped words
- - Announce the current score after every correct guess
-
-RESPONSE EXAMPLES:
-- Human says: "This is something you use to write" โ You respond: "IGNORE"
-- Human says: "That's right!" or "You got it!" โ You respond: "IGNORE"
-- Human says: "Wait, what was my word again?" โ You respond: "Your word is [current word]"
-- Human says: "Can you repeat that?" โ You respond: "Your word is [current word]"
-- AI says: "Is it a pen?" โ If correct and it's the first point, you respond: "Correct! That's 1 point. Your next word is [new word]"
-- AI says: "Is it a pencil?" โ If correct and it's the third point, you respond: "Correct! That's 3 points. Your next word is [new word]"
-- AI says: "Is it a marker?" โ If incorrect, you respond: "NO"
-- Human says: "Skip this one" or "Pass" โ You respond: "The new word is [new word]"
-
-IMPORTANT GUIDELINES:
-- Choose words that range from easy to moderately difficult
-- Keep all responses brief - the game is timed!
-- Your "NO" and "IGNORE" responses won't be verbalized, but will be visible in the chat
-- Always keep track of the CURRENT word so you can repeat it when asked
-- Always keep track of the CURRENT SCORE and announce it after every correct guess
-- Make sure your word choices are appropriate for all audiences
-- If the human asks to skip, always provide a new word immediately without changing the score
-- If the human asks you to repeat the word, say ONLY "Your word is [current word]" - don't add additional text
-- CRUCIAL: Never interpret the human saying "correct", "that's right", "good job", or similar affirmations as a correct guess. These are just the human giving feedback to the AI player.
-
-Start with the exact introduction specified above and give the first word."""
-
-
-class HostResponseTextFilter(BaseTextFilter):
- """Custom text filter for Word Wrangler game.
-
- This filter removes "NO" and "IGNORE" responses from the host so they don't get verbalized,
- allowing for silent incorrect guess handling and ignoring descriptions.
- """
-
- def __init__(self):
- self._interrupted = False
-
- def update_settings(self, settings: Mapping[str, Any]):
- # No settings to update for this filter
- pass
-
- async def filter(self, text: str) -> str:
- # Remove case and whitespace for comparison
- clean_text = text.strip().upper()
-
- # If the text is exactly "NO" or "IGNORE", return empty string
- if clean_text == "NO" or clean_text == "IGNORE":
- return ""
-
- return text
-
- async def handle_interruption(self):
- self._interrupted = True
-
- async def reset_interruption(self):
- self._interrupted = False
-
-
-class BotStoppedSpeakingNotifier(FrameProcessor):
- """A processor that notifies whenever a BotStoppedSpeakingFrame is detected."""
-
- def __init__(self, notifier: BaseNotifier):
- super().__init__()
- self._notifier = notifier
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- # Check if this is a BotStoppedSpeakingFrame
- if isinstance(frame, BotStoppedSpeakingFrame):
- logger.debug(f"{self}: Host bot stopped speaking, notifying listeners")
- await self._notifier.notify()
-
- # Always push the frame through
- await self.push_frame(frame, direction)
-
-
-class StartFrameGate(FrameProcessor):
- """A gate that blocks only StartFrame until notified by a notifier.
-
- Once opened, all frames pass through normally.
- """
-
- def __init__(self, notifier: BaseNotifier):
- super().__init__()
- self._notifier = notifier
- self._blocked_start_frame: Optional[Frame] = None
- self._gate_opened = False
- self._gate_task: Optional[asyncio.Task] = None
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if self._gate_opened:
- # Once the gate is open, let everything through
- await self.push_frame(frame, direction)
- elif isinstance(frame, StartFrame):
- # Store the StartFrame and wait for notification
- logger.debug(f"{self}: Blocking StartFrame until host bot stops speaking")
- self._blocked_start_frame = frame
-
- # Start the gate task if not already running
- if not self._gate_task:
- self._gate_task = self.create_task(self._wait_for_notification())
-
- async def _wait_for_notification(self):
- try:
- # Wait for the notifier
- await self._notifier.wait()
-
- # Gate is now open - only run this code once
- if not self._gate_opened:
- self._gate_opened = True
- logger.debug(f"{self}: Gate opened, passing through blocked StartFrame")
-
- # Push the blocked StartFrame if we have one
- if self._blocked_start_frame:
- await self.push_frame(self._blocked_start_frame)
- self._blocked_start_frame = None
- except asyncio.CancelledError:
- logger.debug(f"{self}: Gate task was cancelled")
- raise
- except Exception as e:
- logger.exception(f"{self}: Error in gate task: {e}")
- raise
-
-
-class GameStateTracker(FrameProcessor):
- """Tracks game state including new words and score by monitoring host responses."""
-
- def __init__(self, new_word_notifier: BaseNotifier):
- super().__init__()
- self._new_word_notifier = new_word_notifier
- self._text_buffer = ""
- self._current_score = 0
-
- # Words/phrases that indicate a new word being provided
- self._key_phrases = ["your word is", "new word is", "next word is"]
-
- # Pattern to extract score from responses
- self._score_pattern = re.compile(r"that's (\d+) point", re.IGNORECASE)
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- # Collect text from LLMTextFrames
- if isinstance(frame, LLMTextFrame):
- text = frame.text
-
- # Skip responses that are "NO" or "IGNORE"
- if text.strip() in ["NO", "IGNORE"]:
- logger.debug(f"Skipping NO/IGNORE response")
- await self.push_frame(frame, direction)
- return
-
- # Add the new text to our buffer
- self._text_buffer += text
-
- # Process complete responses when we get an end frame
- elif isinstance(frame, LLMFullResponseEndFrame):
- if self._text_buffer:
- buffer_lower = self._text_buffer.lower()
-
- # 1. Check for new word announcements
- new_word_detected = False
- for phrase in self._key_phrases:
- if phrase in buffer_lower:
- await self._new_word_notifier.notify()
- new_word_detected = True
- break
-
- if not new_word_detected:
- logger.debug(f"No new word phrases detected")
-
- # 2. Check for score updates
- score_match = self._score_pattern.search(buffer_lower)
- if score_match:
- try:
- score = int(score_match.group(1))
- # Only update if the new score is higher
- if score > self._current_score:
- logger.debug(f"Score updated from {self._current_score} to {score}")
- self._current_score = score
- else:
- logger.debug(
- f"Ignoring score {score} <= current score {self._current_score}"
- )
- except ValueError as e:
- logger.warning(f"Error parsing score: {e}")
- else:
- logger.debug(f"No score pattern match in: '{buffer_lower}'")
-
- # Reset the buffer after processing the complete response
- self._text_buffer = ""
-
- # Always push the frame through
- await self.push_frame(frame, direction)
-
- @property
- def current_score(self) -> int:
- """Get the current score."""
- return self._current_score
-
-
-class GameTimer:
- """Manages the game timer and triggers end-game events."""
-
- def __init__(
- self,
- task: PipelineTask,
- game_state_tracker: GameStateTracker,
- game_duration_seconds: int = 120,
- ):
- self._task = task
- self._game_state_tracker = game_state_tracker
- self._game_duration = game_duration_seconds
- self._timer_task = None
- self._start_time = None
-
- def start(self):
- """Start the game timer."""
- if self._timer_task is None:
- self._start_time = asyncio.get_event_loop().time()
- self._timer_task = asyncio.create_task(self._run_timer())
- logger.info(f"Game timer started: {self._game_duration} seconds")
-
- def stop(self):
- """Stop the game timer."""
- if self._timer_task:
- self._timer_task.cancel()
- self._timer_task = None
- logger.info("Game timer stopped")
-
- def get_remaining_time(self) -> int:
- """Get the remaining time in seconds."""
- if self._start_time is None:
- return self._game_duration
-
- elapsed = asyncio.get_event_loop().time() - self._start_time
- remaining = max(0, self._game_duration - int(elapsed))
- return remaining
-
- async def _run_timer(self):
- """Run the timer and end the game when time is up."""
- try:
- # Wait for the game duration
- await asyncio.sleep(self._game_duration)
-
- # Game time is up, get the final score
- final_score = self._game_state_tracker.current_score
-
- # Create end game message
- end_message = f"Time's up! Thank you for playing Word Wrangler. Your final score is {final_score} point"
- if final_score != 1:
- end_message += "s"
- end_message += ". Great job!"
-
- # Send end game message as TTSSpeakFrame
- logger.info(f"Game over! Final score: {final_score}")
- await self._task.queue_frames([TTSSpeakFrame(text=end_message)])
-
- # End the game
- await self._task.queue_frames([EndFrame()])
-
- except asyncio.CancelledError:
- logger.debug("Game timer task cancelled")
- except Exception as e:
- logger.exception(f"Error in game timer: {e}")
-
-
-class ResettablePlayerLLM(GeminiMultimodalLiveLLMService):
- """A specialized LLM service that can reset its context when notified about a new word.
-
- This LLM intelligently waits for the host to finish speaking before reconnecting.
- """
-
- def __init__(
- self,
- api_key: str,
- system_instruction: str,
- new_word_notifier: BaseNotifier,
- host_stopped_speaking_notifier: BaseNotifier,
- voice_id: str = PLAYER_VOICE_ID,
- **kwargs,
- ):
- super().__init__(
- api_key=api_key, voice_id=voice_id, system_instruction=system_instruction, **kwargs
- )
- self._new_word_notifier = new_word_notifier
- self._host_stopped_speaking_notifier = host_stopped_speaking_notifier
- self._base_system_instruction = system_instruction
- self._reset_task: Optional[asyncio.Task] = None
- self._pending_reset: bool = False
-
- async def start(self, frame: StartFrame):
- await super().start(frame)
-
- # Start the notifier listener task
- if not self._reset_task or self._reset_task.done():
- self._reset_task = self.create_task(self._listen_for_notifications())
-
- async def stop(self, frame: EndFrame):
- # Cancel the reset task if it exists
- if self._reset_task and not self._reset_task.done():
- await self.cancel_task(self._reset_task)
- self._reset_task = None
-
- await super().stop(frame)
-
- async def cancel(self, frame: CancelFrame):
- # Cancel the reset task if it exists
- if self._reset_task and not self._reset_task.done():
- await self.cancel_task(self._reset_task)
- self._reset_task = None
-
- await super().cancel(frame)
-
- async def _listen_for_notifications(self):
- """Listen for new word and host stopped speaking notifications."""
- try:
- # Create tasks for both notifiers
- new_word_task = self.create_task(self._listen_for_new_word())
- host_stopped_task = self.create_task(self._listen_for_host_stopped())
-
- # Wait for both tasks to complete (which should never happen)
- await asyncio.gather(new_word_task, host_stopped_task)
-
- except asyncio.CancelledError:
- logger.debug(f"{self}: Notification listener tasks cancelled")
- raise
- except Exception as e:
- logger.exception(f"{self}: Error in notification listeners: {e}")
- raise
-
- async def _listen_for_new_word(self):
- """Listen for new word notifications and flag a reset is needed."""
- while True:
- # Wait for a new word notification
- await self._new_word_notifier.wait()
- logger.info(
- f"{self}: Received new word notification, disconnecting and waiting for host to finish"
- )
-
- # Disconnect immediately to stop processing
- await self._disconnect()
-
- # Reset the system instruction
- self._system_instruction = self._base_system_instruction
-
- # Flag that we need to reconnect when the host stops speaking
- self._pending_reset = True
-
- async def _listen_for_host_stopped(self):
- """Listen for host stopped speaking and reconnect if a reset is pending."""
- while True:
- # Wait for host stopped speaking notification
- await self._host_stopped_speaking_notifier.wait()
-
- # If we have a pending reset, reconnect now
- if self._pending_reset:
- logger.info(f"{self}: Host finished speaking, completing the LLM reset")
-
- # Reconnect
- await self._connect()
-
- # Reset the flag
- self._pending_reset = False
-
- logger.info(f"{self}: LLM reset complete")
-
-
-async def tts_audio_raw_frame_filter(frame: Frame):
- """Filter to check if the frame is a TTSAudioRawFrame."""
- return isinstance(frame, TTSAudioRawFrame)
-
-
-# Create a resampler instance once
-resampler = create_default_resampler()
-
-
-async def tts_to_input_audio_transformer(frame: Frame):
- """Transform TTS audio frames to InputAudioRawFrame with resampling.
-
- Converts 24kHz TTS output to 16kHz input audio required by the player LLM.
-
- Args:
- frame (Frame): The frame to transform (expected to be TTSAudioRawFrame)
-
- Returns:
- InputAudioRawFrame: The transformed and resampled input audio frame
- """
- if isinstance(frame, TTSAudioRawFrame):
- # Resample the audio from 24kHz to 16kHz
- resampled_audio = await resampler.resample(
- frame.audio,
- frame.sample_rate, # Source rate (24kHz)
- 16000, # Target rate (16kHz)
- )
-
- # Create a new InputAudioRawFrame with the resampled audio
- input_frame = InputAudioRawFrame(
- audio=resampled_audio,
- sample_rate=16000, # New sample rate
- num_channels=frame.num_channels,
- )
- return input_frame
-
-
-async def main(room_url: str, token: str):
- # Use the provided session logger if available, otherwise use the default logger
- logger.debug("Starting bot in room: {}", room_url)
-
- game_words = generate_game_words(NUM_WORDS_PER_GAME)
- words_string = ", ".join(f'"{word}"' for word in game_words)
- logger.debug(f"Game words: {words_string}")
-
- transport = DailyTransport(
- room_url,
- token,
- "Word Wrangler Bot",
- DailyParams(
- audio_in_enabled=True,
- audio_out_enabled=True,
- vad_analyzer=SileroVADAnalyzer(),
- ),
- )
-
- player_instruction = f"""{game_player_prompt}
-
-Important guidelines:
-1. Your responses will be converted to speech, so keep them concise and conversational.
-2. Don't use special characters or formatting that wouldn't be natural in speech.
-3. Encourage the user to elaborate when appropriate."""
-
- host_instruction = f"""{game_host_prompt}
-
-GAME WORDS:
-Use ONLY these words for the game (in any order): {words_string}
-
-Important guidelines:
-1. Your responses will be converted to speech, so keep them concise and conversational.
-2. Don't use special characters or formatting that wouldn't be natural in speech.
-3. ONLY use words from the provided list above when giving words to the player."""
-
- intro_message = """Start with this exact brief introduction: "Welcome to Word Wrangler! I'll give you words to describe, and the A.I. player will try to guess them. Remember, don't say any part of the word itself. Here's your first word: [word]." """
-
- # Create the STT mute filter if we have strategies to apply
- stt_mute_filter = STTMuteFilter(
- config=STTMuteConfig(strategies={STTMuteStrategy.MUTE_UNTIL_FIRST_BOT_COMPLETE})
- )
-
- host_llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- system_instruction=host_instruction,
- params=InputParams(modalities=GeminiMultimodalModalities.TEXT),
- )
-
- host_tts = GoogleTTSService(
- voice_id=HOST_VOICE_ID,
- credentials_path=os.getenv("GOOGLE_TEST_CREDENTIALS_FILE"),
- text_filters=[HostResponseTextFilter()],
- )
-
- producer = ProducerProcessor(
- filter=tts_audio_raw_frame_filter,
- transformer=tts_to_input_audio_transformer,
- passthrough=True,
- )
- consumer = ConsumerProcessor(producer=producer)
-
- # Create the notifiers
- bot_speaking_notifier = EventNotifier()
- new_word_notifier = EventNotifier()
-
- # Create BotStoppedSpeakingNotifier to detect when host bot stops speaking
- bot_stopped_speaking_detector = BotStoppedSpeakingNotifier(bot_speaking_notifier)
-
- # Create StartFrameGate to block Player LLM until host has stopped speaking
- start_frame_gate = StartFrameGate(bot_speaking_notifier)
-
- # Create GameStateTracker to handle new words and score tracking
- game_state_tracker = GameStateTracker(new_word_notifier)
-
- # Create a resettable player LLM that coordinates between notifiers
- player_llm = ResettablePlayerLLM(
- api_key=os.getenv("GOOGLE_API_KEY"),
- system_instruction=player_instruction,
- new_word_notifier=new_word_notifier,
- host_stopped_speaking_notifier=bot_speaking_notifier,
- voice_id=PLAYER_VOICE_ID,
- )
-
- # Set up the initial context for the conversation
- messages = [
- {
- "role": "user",
- "content": intro_message,
- },
- ]
-
- # This sets up the LLM context by providing messages and tools
- context = OpenAILLMContext(messages)
- context_aggregator = host_llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(), # Receive audio/video from Daily call
- stt_mute_filter, # Filter out speech during the bot's initial turn
- ParallelPipeline(
- # Host branch: manages the game and provides words
- [
- consumer, # Receives audio from the player branch
- host_llm, # AI host that provides words and tracks score
- game_state_tracker, # Tracks words and score from host responses
- host_tts, # Converts host text to speech
- bot_stopped_speaking_detector, # Notifies when host stops speaking
- ],
- # Player branch: guesses words based on human descriptions
- [
- start_frame_gate, # Gates the player until host finishes intro
- player_llm, # AI player that makes guesses
- producer, # Collects audio frames to be passed to the consumer
- ],
- ),
- transport.output(), # Send audio/video back to Daily call
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # Create the game timer
- game_timer = GameTimer(task, game_state_tracker, game_duration_seconds=GAME_DURATION_SECONDS)
-
- @transport.event_handler("on_first_participant_joined")
- async def on_first_participant_joined(transport, participant):
- logger.info("First participant joined: {}", participant["id"])
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
- # Start the game timer
- game_timer.start()
-
- @transport.event_handler("on_participant_left")
- async def on_participant_left(transport, participant, reason):
- logger.info("Participant left: {}", participant)
- # Stop the timer
- game_timer.stop()
- # Cancel the pipeline task
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False, force_gc=True)
-
- await runner.run(task)
-
-
-async def bot(args: DailySessionArguments):
- """Main bot entry point compatible with the FastAPI route handler.
-
- Args:
- room_url: The Daily room URL
- token: The Daily room token
- body: The configuration object from the request body
- session_id: The session ID for logging
- """
- logger.info(f"Bot process initialized {args.room_url} {args.token}")
-
- try:
- await main(args.room_url, args.token)
- logger.info("Bot process completed")
- except Exception as e:
- logger.exception(f"Error in bot process: {str(e)}")
- raise
-
-
-# Local development functions
-async def local_main():
- """Function for local development testing."""
- try:
- async with aiohttp.ClientSession() as session:
- (room_url, token) = await configure(session)
- logger.warning("_")
- logger.warning("_")
- logger.warning(f"Talk to your voice agent here: {room_url}")
- logger.warning("_")
- logger.warning("_")
- webbrowser.open(room_url)
- await main(room_url, token)
- except Exception as e:
- logger.exception(f"Error in local development mode: {e}")
-
-
-# Local development entry point
-if LOCAL_RUN and __name__ == "__main__":
- try:
- asyncio.run(local_main())
- except Exception as e:
- logger.exception(f"Failed to run in local mode: {e}")
diff --git a/examples/word-wrangler-gemini-live/server/bot_phone_twilio.py b/examples/word-wrangler-gemini-live/server/bot_phone_twilio.py
deleted file mode 100644
index 0b0c12e1e..000000000
--- a/examples/word-wrangler-gemini-live/server/bot_phone_twilio.py
+++ /dev/null
@@ -1,741 +0,0 @@
-#
-# Copyright (c) 2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""Word Wrangler: A voice-based word guessing game.
-
-This demo version is intended to be deployed to
-Pipecat Cloud. For more information, visit:
-- Deployment Quickstart: https://docs.pipecat.daily.co/quickstart
-- Build for Twilio: https://docs.pipecat.daily.co/pipecat-in-production/telephony/twilio-mediastreams
-"""
-
-import asyncio
-import json
-import os
-import re
-import sys
-from typing import Any, Mapping, Optional
-
-from dotenv import load_dotenv
-from fastapi import WebSocket
-from loguru import logger
-from pipecatcloud import WebSocketSessionArguments
-from word_list import generate_game_words
-
-from pipecat.audio.filters.krisp_filter import KrispFilter
-from pipecat.audio.resamplers.soxr_resampler import SOXRAudioResampler
-from pipecat.audio.vad.silero import SileroVADAnalyzer
-from pipecat.frames.frames import (
- BotStoppedSpeakingFrame,
- CancelFrame,
- EndFrame,
- Frame,
- InputAudioRawFrame,
- LLMFullResponseEndFrame,
- LLMTextFrame,
- StartFrame,
- TTSAudioRawFrame,
- TTSSpeakFrame,
-)
-from pipecat.pipeline.parallel_pipeline import ParallelPipeline
-from pipecat.pipeline.pipeline import Pipeline
-from pipecat.pipeline.runner import PipelineRunner
-from pipecat.pipeline.task import PipelineParams, PipelineTask
-from pipecat.processors.aggregators.openai_llm_context import (
- OpenAILLMContext,
-)
-from pipecat.processors.consumer_processor import ConsumerProcessor
-from pipecat.processors.filters.stt_mute_filter import STTMuteConfig, STTMuteFilter, STTMuteStrategy
-from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
-from pipecat.processors.producer_processor import ProducerProcessor
-from pipecat.serializers.twilio import TwilioFrameSerializer
-from pipecat.services.gemini_multimodal_live.gemini import (
- GeminiMultimodalLiveLLMService,
- GeminiMultimodalModalities,
- InputParams,
-)
-from pipecat.services.google.tts import GoogleTTSService
-from pipecat.sync.base_notifier import BaseNotifier
-from pipecat.sync.event_notifier import EventNotifier
-from pipecat.transports.network.fastapi_websocket import (
- FastAPIWebsocketParams,
- FastAPIWebsocketTransport,
-)
-from pipecat.utils.text.base_text_filter import BaseTextFilter
-
-load_dotenv(override=True)
-
-
-logger.add(sys.stderr, level="DEBUG")
-
-GAME_DURATION_SECONDS = 120
-NUM_WORDS_PER_GAME = 20
-HOST_VOICE_ID = "en-US-Chirp3-HD-Charon"
-PLAYER_VOICE_ID = "Kore"
-
-# Define conversation modes with their respective prompt templates
-game_player_prompt = """You are a player for a game of Word Wrangler.
-
-GAME RULES:
-1. The user will be given a word or phrase that they must describe to you
-2. The user CANNOT say any part of the word/phrase directly
-3. You must try to guess the word/phrase based on the user's description
-4. Once you guess correctly, the user will move on to their next word
-5. The user is trying to get through as many words as possible in 60 seconds
-6. The external application will handle timing and keeping score
-
-YOUR ROLE:
-1. Listen carefully to the user's descriptions
-2. Make intelligent guesses based on what they say
-3. When you think you know the answer, state it clearly: "Is it [your guess]?"
-4. If you're struggling, ask for more specific clues
-5. Keep the game moving quickly - make guesses promptly
-6. Be enthusiastic and encouraging
-
-IMPORTANT:
-- Keep all responses brief - the game is timed!
-- Make multiple guesses if needed
-- Use your common knowledge to make educated guesses
-- If the user indicates you got it right, just say "Got it!" and prepare for the next word
-- If you've made several wrong guesses, simply ask for "Another clue please?"
-
-Start by guessing once you hear the user describe the word or phrase."""
-
-game_host_prompt = """You are the AI host for a game of Word Wrangler. There are two players in the game: the human describer and the AI guesser.
-
-GAME RULES:
-1. You, the host, will give the human describer a word or phrase that they must describe
-2. The describer CANNOT say any part of the word/phrase directly
-3. The AI guesser will try to guess the word/phrase based on the describer's description
-4. Once the guesser guesses correctly, move on to the next word
-5. The describer is trying to get through as many words as possible in 60 seconds
-6. The describer can say "skip" or "pass" to get a new word if they find a word too difficult
-7. The describer can ask you to repeat the current word if they didn't hear it clearly
-8. You'll keep track of the score (1 point for each correct guess)
-9. The external application will handle timing
-
-YOUR ROLE:
-1. Start with this exact brief introduction: "Welcome to Word Wrangler! I'll give you words to describe, and the A.I. player will try to guess them. Remember, don't say any part of the word itself. Here's your first word: [word]."
-2. Provide words to the describer. Choose 1 or 2 word phrases that cover a variety of topics, including animals, objects, places, and actions.
-3. IMPORTANT: You will hear DIFFERENT types of input:
- a. DESCRIPTIONS from the human (which you should IGNORE)
- b. AFFIRMATIONS from the human (like "correct", "that's right", "you got it") which you should IGNORE
- c. GUESSES from the AI player (which will be in the form of "Is it [word]?" or similar question format)
- d. SKIP REQUESTS from the human (if they say "skip", "pass", or "next word please")
- e. REPEAT REQUESTS from the human (if they say "repeat", "what was that?", "say again", etc.)
-
-4. HOW TO RESPOND:
- - If you hear a DESCRIPTION or AFFIRMATION from the human, respond with exactly "IGNORE" (no other text)
- - If you hear a GUESS (in question form) and it's INCORRECT, respond with exactly "NO" (no other text)
- - If you hear a GUESS (in question form) and it's CORRECT, respond with "Correct! That's [N] points. Your next word is [new word]" where N is the current score
- - If you hear a SKIP REQUEST, respond with "The new word is [new word]" (don't change the score)
- - If you hear a REPEAT REQUEST, respond with "Your word is [current word]" (don't change the score)
-
-5. SCORING:
- - Start with a score of 0
- - Add 1 point for each correct guess by the AI player
- - Do NOT add points for skipped words
- - Announce the current score after every correct guess
-
-RESPONSE EXAMPLES:
-- Human says: "This is something you use to write" โ You respond: "IGNORE"
-- Human says: "That's right!" or "You got it!" โ You respond: "IGNORE"
-- Human says: "Wait, what was my word again?" โ You respond: "Your word is [current word]"
-- Human says: "Can you repeat that?" โ You respond: "Your word is [current word]"
-- AI says: "Is it a pen?" โ If correct and it's the first point, you respond: "Correct! That's 1 point. Your next word is [new word]"
-- AI says: "Is it a pencil?" โ If correct and it's the third point, you respond: "Correct! That's 3 points. Your next word is [new word]"
-- AI says: "Is it a marker?" โ If incorrect, you respond: "NO"
-- Human says: "Skip this one" or "Pass" โ You respond: "The new word is [new word]"
-
-IMPORTANT GUIDELINES:
-- Choose words that range from easy to moderately difficult
-- Keep all responses brief - the game is timed!
-- Your "NO" and "IGNORE" responses won't be verbalized, but will be visible in the chat
-- Always keep track of the CURRENT word so you can repeat it when asked
-- Always keep track of the CURRENT SCORE and announce it after every correct guess
-- Make sure your word choices are appropriate for all audiences
-- If the human asks to skip, always provide a new word immediately without changing the score
-- If the human asks you to repeat the word, say ONLY "Your word is [current word]" - don't add additional text
-- CRUCIAL: Never interpret the human saying "correct", "that's right", "good job", or similar affirmations as a correct guess. These are just the human giving feedback to the AI player.
-
-Start with the exact introduction specified above and give the first word."""
-
-
-class HostResponseTextFilter(BaseTextFilter):
- """Custom text filter for Word Wrangler game.
-
- This filter removes "NO" and "IGNORE" responses from the host so they don't get verbalized,
- allowing for silent incorrect guess handling and ignoring descriptions.
- """
-
- def __init__(self):
- self._interrupted = False
-
- def update_settings(self, settings: Mapping[str, Any]):
- # No settings to update for this filter
- pass
-
- async def filter(self, text: str) -> str:
- # Remove case and whitespace for comparison
- clean_text = text.strip().upper()
-
- # If the text is exactly "NO" or "IGNORE", return empty string
- if clean_text == "NO" or clean_text == "IGNORE":
- return ""
-
- return text
-
- async def handle_interruption(self):
- self._interrupted = True
-
- async def reset_interruption(self):
- self._interrupted = False
-
-
-class BotStoppedSpeakingNotifier(FrameProcessor):
- """A processor that notifies whenever a BotStoppedSpeakingFrame is detected."""
-
- def __init__(self, notifier: BaseNotifier):
- super().__init__()
- self._notifier = notifier
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- # Check if this is a BotStoppedSpeakingFrame
- if isinstance(frame, BotStoppedSpeakingFrame):
- logger.debug(f"{self}: Host bot stopped speaking, notifying listeners")
- await self._notifier.notify()
-
- # Always push the frame through
- await self.push_frame(frame, direction)
-
-
-class StartFrameGate(FrameProcessor):
- """A gate that blocks only StartFrame until notified by a notifier.
-
- Once opened, all frames pass through normally.
- """
-
- def __init__(self, notifier: BaseNotifier):
- super().__init__()
- self._notifier = notifier
- self._blocked_start_frame: Optional[Frame] = None
- self._gate_opened = False
- self._gate_task: Optional[asyncio.Task] = None
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- if self._gate_opened:
- # Once the gate is open, let everything through
- await self.push_frame(frame, direction)
- elif isinstance(frame, StartFrame):
- # Store the StartFrame and wait for notification
- logger.debug(f"{self}: Blocking StartFrame until host bot stops speaking")
- self._blocked_start_frame = frame
-
- # Start the gate task if not already running
- if not self._gate_task:
- self._gate_task = self.create_task(self._wait_for_notification())
-
- async def _wait_for_notification(self):
- try:
- # Wait for the notifier
- await self._notifier.wait()
-
- # Gate is now open - only run this code once
- if not self._gate_opened:
- self._gate_opened = True
- logger.debug(f"{self}: Gate opened, passing through blocked StartFrame")
-
- # Push the blocked StartFrame if we have one
- if self._blocked_start_frame:
- await self.push_frame(self._blocked_start_frame)
- self._blocked_start_frame = None
- except asyncio.CancelledError:
- logger.debug(f"{self}: Gate task was cancelled")
- raise
- except Exception as e:
- logger.exception(f"{self}: Error in gate task: {e}")
- raise
-
-
-class GameStateTracker(FrameProcessor):
- """Tracks game state including new words and score by monitoring host responses.
-
- This processor aggregates streamed text from the host LLM to detect:
- 1. New word announcements (triggering player LLM resets)
- 2. Score updates (to track the current score)
- """
-
- def __init__(self, new_word_notifier: BaseNotifier):
- super().__init__()
- self._new_word_notifier = new_word_notifier
- self._text_buffer = ""
- self._current_score = 0
-
- # Words/phrases that indicate a new word being provided
- self._key_phrases = ["your word is", "new word is", "next word is"]
-
- # Pattern to extract score from responses
- self._score_pattern = re.compile(r"that's (\d+) point", re.IGNORECASE)
-
- async def process_frame(self, frame: Frame, direction: FrameDirection):
- await super().process_frame(frame, direction)
-
- # Collect text from LLMTextFrames
- if isinstance(frame, LLMTextFrame):
- text = frame.text
-
- # Skip responses that are "NO" or "IGNORE"
- if text.strip() in ["NO", "IGNORE"]:
- logger.debug(f"Skipping NO/IGNORE response")
- await self.push_frame(frame, direction)
- return
-
- # Add the new text to our buffer
- self._text_buffer += text
-
- # Process complete responses when we get an end frame
- elif isinstance(frame, LLMFullResponseEndFrame):
- if self._text_buffer:
- buffer_lower = self._text_buffer.lower()
-
- # 1. Check for new word announcements
- new_word_detected = False
- for phrase in self._key_phrases:
- if phrase in buffer_lower:
- await self._new_word_notifier.notify()
- new_word_detected = True
- break
-
- if not new_word_detected:
- logger.debug(f"No new word phrases detected")
-
- # 2. Check for score updates
- score_match = self._score_pattern.search(buffer_lower)
- if score_match:
- try:
- score = int(score_match.group(1))
- # Only update if the new score is higher
- if score > self._current_score:
- logger.debug(f"Score updated from {self._current_score} to {score}")
- self._current_score = score
- else:
- logger.debug(
- f"Ignoring score {score} <= current score {self._current_score}"
- )
- except ValueError as e:
- logger.warning(f"Error parsing score: {e}")
- else:
- logger.debug(f"No score pattern match in: '{buffer_lower}'")
-
- # Reset the buffer after processing the complete response
- self._text_buffer = ""
-
- # Always push the frame through
- await self.push_frame(frame, direction)
-
- @property
- def current_score(self) -> int:
- """Get the current score."""
- return self._current_score
-
-
-class GameTimer:
- """Manages the game timer and triggers end-game events."""
-
- def __init__(
- self,
- task: PipelineTask,
- game_state_tracker: GameStateTracker,
- game_duration_seconds: int = 120,
- ):
- self._task = task
- self._game_state_tracker = game_state_tracker
- self._game_duration = game_duration_seconds
- self._timer_task = None
- self._start_time = None
-
- def start(self):
- """Start the game timer."""
- if self._timer_task is None:
- self._start_time = asyncio.get_event_loop().time()
- self._timer_task = asyncio.create_task(self._run_timer())
- logger.info(f"Game timer started: {self._game_duration} seconds")
-
- def stop(self):
- """Stop the game timer."""
- if self._timer_task:
- self._timer_task.cancel()
- self._timer_task = None
- logger.info("Game timer stopped")
-
- def get_remaining_time(self) -> int:
- """Get the remaining time in seconds."""
- if self._start_time is None:
- return self._game_duration
-
- elapsed = asyncio.get_event_loop().time() - self._start_time
- remaining = max(0, self._game_duration - int(elapsed))
- return remaining
-
- async def _run_timer(self):
- """Run the timer and end the game when time is up."""
- try:
- # Wait for the game duration
- await asyncio.sleep(self._game_duration)
-
- # Game time is up, get the final score
- final_score = self._game_state_tracker.current_score
-
- # Create end game message
- end_message = f"Time's up! Thank you for playing Word Wrangler. Your final score is {final_score} point"
- if final_score != 1:
- end_message += "s"
- end_message += ". Great job!"
-
- # Send end game message as TTSSpeakFrame
- logger.info(f"Game over! Final score: {final_score}")
- await self._task.queue_frames([TTSSpeakFrame(text=end_message)])
-
- # End the game
- await self._task.queue_frames([EndFrame()])
-
- except asyncio.CancelledError:
- logger.debug("Game timer task cancelled")
- except Exception as e:
- logger.exception(f"Error in game timer: {e}")
-
-
-class ResettablePlayerLLM(GeminiMultimodalLiveLLMService):
- """A specialized LLM service that can reset its context when notified about a new word.
-
- This LLM intelligently waits for the host to finish speaking before reconnecting.
- """
-
- def __init__(
- self,
- api_key: str,
- system_instruction: str,
- new_word_notifier: BaseNotifier,
- host_stopped_speaking_notifier: BaseNotifier,
- voice_id: str = PLAYER_VOICE_ID,
- **kwargs,
- ):
- super().__init__(
- api_key=api_key, voice_id=voice_id, system_instruction=system_instruction, **kwargs
- )
- self._new_word_notifier = new_word_notifier
- self._host_stopped_speaking_notifier = host_stopped_speaking_notifier
- self._base_system_instruction = system_instruction
- self._reset_task: Optional[asyncio.Task] = None
- self._pending_reset: bool = False
-
- async def start(self, frame: StartFrame):
- await super().start(frame)
-
- # Start the notifier listener task
- if not self._reset_task or self._reset_task.done():
- self._reset_task = self.create_task(self._listen_for_notifications())
-
- async def stop(self, frame: EndFrame):
- # Cancel the reset task if it exists
- if self._reset_task and not self._reset_task.done():
- await self.cancel_task(self._reset_task)
- self._reset_task = None
-
- await super().stop(frame)
-
- async def cancel(self, frame: CancelFrame):
- # Cancel the reset task if it exists
- if self._reset_task and not self._reset_task.done():
- await self.cancel_task(self._reset_task)
- self._reset_task = None
-
- await super().cancel(frame)
-
- async def _listen_for_notifications(self):
- """Listen for new word and host stopped speaking notifications."""
- try:
- # Create tasks for both notifiers
- new_word_task = self.create_task(self._listen_for_new_word())
- host_stopped_task = self.create_task(self._listen_for_host_stopped())
-
- # Wait for both tasks to complete (which should never happen)
- await asyncio.gather(new_word_task, host_stopped_task)
-
- except asyncio.CancelledError:
- logger.debug(f"{self}: Notification listener tasks cancelled")
- raise
- except Exception as e:
- logger.exception(f"{self}: Error in notification listeners: {e}")
- raise
-
- async def _listen_for_new_word(self):
- """Listen for new word notifications and flag a reset is needed."""
- while True:
- # Wait for a new word notification
- await self._new_word_notifier.wait()
- logger.info(
- f"{self}: Received new word notification, disconnecting and waiting for host to finish"
- )
-
- # Disconnect immediately to stop processing
- await self._disconnect()
-
- # Reset the system instruction
- self._system_instruction = self._base_system_instruction
-
- # Flag that we need to reconnect when the host stops speaking
- self._pending_reset = True
-
- async def _listen_for_host_stopped(self):
- """Listen for host stopped speaking and reconnect if a reset is pending."""
- while True:
- # Wait for host stopped speaking notification
- await self._host_stopped_speaking_notifier.wait()
-
- # If we have a pending reset, reconnect now
- if self._pending_reset:
- logger.info(f"{self}: Host finished speaking, completing the LLM reset")
-
- # Reconnect
- await self._connect()
-
- # Reset the flag
- self._pending_reset = False
-
- logger.info(f"{self}: LLM reset complete")
-
-
-async def tts_audio_raw_frame_filter(frame: Frame):
- """Filter to check if the frame is a TTSAudioRawFrame."""
- return isinstance(frame, TTSAudioRawFrame)
-
-
-# Create a resampler instance once
-resampler = SOXRAudioResampler()
-
-
-async def tts_to_input_audio_transformer(frame: Frame):
- """Transform TTS audio frames to InputAudioRawFrame with resampling.
-
- Converts 24kHz TTS output to 16kHz input audio required by the player LLM.
-
- Args:
- frame (Frame): The frame to transform (expected to be TTSAudioRawFrame)
-
- Returns:
- InputAudioRawFrame: The transformed and resampled input audio frame
- """
- if isinstance(frame, TTSAudioRawFrame):
- # Resample the audio from 24kHz to 16kHz
- resampled_audio = await resampler.resample(
- frame.audio,
- frame.sample_rate, # Source rate (24kHz)
- 16000, # Target rate (16kHz)
- )
-
- # Create a new InputAudioRawFrame with the resampled audio
- input_frame = InputAudioRawFrame(
- audio=resampled_audio,
- sample_rate=16000, # New sample rate
- num_channels=frame.num_channels,
- )
- return input_frame
-
-
-async def main(ws: WebSocket):
- logger.debug("Starting WebSocket bot")
-
- game_words = generate_game_words(NUM_WORDS_PER_GAME)
- words_string = ", ".join(f'"{word}"' for word in game_words)
- logger.debug(f"Game words: {words_string}")
-
- # Read initial WebSocket messages
- start_data = ws.iter_text()
- await start_data.__anext__()
-
- # Second message contains the call details
- call_data = json.loads(await start_data.__anext__())
-
- # Extract both StreamSid and CallSid
- stream_sid = call_data["start"]["streamSid"]
- call_sid = call_data["start"]["callSid"]
-
- logger.info(f"Connected to Twilio call: CallSid={call_sid}, StreamSid={stream_sid}")
-
- # Create serializer with both IDs and auto_hang_up enabled
- serializer = TwilioFrameSerializer(
- stream_sid=stream_sid,
- call_sid=call_sid,
- account_sid=os.getenv("TWILIO_ACCOUNT_SID"),
- auth_token=os.getenv("TWILIO_AUTH_TOKEN"),
- )
-
- transport = FastAPIWebsocketTransport(
- websocket=ws,
- params=FastAPIWebsocketParams(
- audio_in_enabled=True,
- audio_in_filter=KrispFilter(),
- audio_out_enabled=True,
- add_wav_header=False,
- vad_analyzer=SileroVADAnalyzer(),
- serializer=serializer,
- ),
- )
-
- player_instruction = f"""{game_player_prompt}
-
-Important guidelines:
-1. Your responses will be converted to speech, so keep them concise and conversational.
-2. Don't use special characters or formatting that wouldn't be natural in speech.
-3. Encourage the user to elaborate when appropriate."""
-
- host_instruction = f"""{game_host_prompt}
-
-GAME WORDS:
-Use ONLY these words for the game (in any order): {words_string}
-
-Important guidelines:
-1. Your responses will be converted to speech, so keep them concise and conversational.
-2. Don't use special characters or formatting that wouldn't be natural in speech.
-3. ONLY use words from the provided list above when giving words to the player."""
-
- intro_message = """Start with this exact brief introduction: "Welcome to Word Wrangler! I'll give you words to describe, and the A.I. player will try to guess them. Remember, don't say any part of the word itself. Here's your first word: [word]." """
-
- # Create the STT mute filter if we have strategies to apply
- stt_mute_filter = STTMuteFilter(
- config=STTMuteConfig(strategies={STTMuteStrategy.MUTE_UNTIL_FIRST_BOT_COMPLETE})
- )
-
- host_llm = GeminiMultimodalLiveLLMService(
- api_key=os.getenv("GOOGLE_API_KEY"),
- system_instruction=host_instruction,
- params=InputParams(modalities=GeminiMultimodalModalities.TEXT),
- )
-
- host_tts = GoogleTTSService(
- voice_id=HOST_VOICE_ID,
- credentials_path=os.getenv("GOOGLE_TEST_CREDENTIALS_FILE"),
- text_filters=[HostResponseTextFilter()],
- )
-
- producer = ProducerProcessor(
- filter=tts_audio_raw_frame_filter,
- transformer=tts_to_input_audio_transformer,
- passthrough=True,
- )
- consumer = ConsumerProcessor(producer=producer)
-
- # Create the notifiers
- bot_speaking_notifier = EventNotifier()
- new_word_notifier = EventNotifier()
-
- # Create BotStoppedSpeakingNotifier to detect when host bot stops speaking
- bot_stopped_speaking_detector = BotStoppedSpeakingNotifier(bot_speaking_notifier)
-
- # Create StartFrameGate to block Player LLM until host has stopped speaking
- start_frame_gate = StartFrameGate(bot_speaking_notifier)
-
- # Create GameStateTracker to handle new words and score tracking
- game_state_tracker = GameStateTracker(new_word_notifier)
-
- # Create a resettable player LLM that coordinates between notifiers
- player_llm = ResettablePlayerLLM(
- api_key=os.getenv("GOOGLE_API_KEY"),
- system_instruction=player_instruction,
- new_word_notifier=new_word_notifier,
- host_stopped_speaking_notifier=bot_speaking_notifier,
- voice_id=PLAYER_VOICE_ID,
- )
-
- # Set up the initial context for the conversation
- messages = [
- {
- "role": "user",
- "content": intro_message,
- },
- ]
-
- # This sets up the LLM context by providing messages and tools
- context = OpenAILLMContext(messages)
- context_aggregator = host_llm.create_context_aggregator(context)
-
- pipeline = Pipeline(
- [
- transport.input(), # Receive audio/video from Daily call
- stt_mute_filter, # Filter out speech during the bot's initial turn
- ParallelPipeline(
- # Host branch: manages the game and provides words
- [
- consumer, # Receives audio from the player branch
- host_llm, # AI host that provides words and tracks score
- game_state_tracker, # Tracks words and score from host responses
- host_tts, # Converts host text to speech
- bot_stopped_speaking_detector, # Notifies when host stops speaking
- ],
- # Player branch: guesses words based on human descriptions
- [
- start_frame_gate, # Gates the player until host finishes intro
- player_llm, # AI player that makes guesses
- producer, # Collects audio frames to be passed to the consumer
- ],
- ),
- transport.output(), # Send audio/video back to Daily call
- ]
- )
-
- task = PipelineTask(
- pipeline,
- params=PipelineParams(
- audio_out_sample_rate=8000,
- enable_metrics=True,
- enable_usage_metrics=True,
- ),
- )
-
- # Create the game timer
- game_timer = GameTimer(task, game_state_tracker, game_duration_seconds=GAME_DURATION_SECONDS)
-
- @transport.event_handler("on_client_connected")
- async def on_client_connected(transport, client):
- logger.info(f"Client connected: {client}")
- # Kick off the conversation
- await task.queue_frames([context_aggregator.user().get_context_frame()])
- # Start the game timer
- game_timer.start()
-
- @transport.event_handler("on_client_disconnected")
- async def on_client_disconnected(transport, client):
- logger.info(f"Client disconnected: {client}")
- # Stop the timer
- game_timer.stop()
- # Cancel the pipeline task
- await task.cancel()
-
- runner = PipelineRunner(handle_sigint=False, force_gc=True)
-
- await runner.run(task)
-
-
-async def bot(args: WebSocketSessionArguments):
- """Main bot entry point for WebSocket connections.
-
- Args:
- ws: The WebSocket connection
- session_logger: The session-specific logger
- """
- logger.info("WebSocket bot process initialized")
-
- try:
- await main(args.websocket)
- logger.info("WebSocket bot process completed")
- except Exception as e:
- logger.exception(f"Error in WebSocket bot process: {str(e)}")
- raise
diff --git a/examples/word-wrangler-gemini-live/server/env.example b/examples/word-wrangler-gemini-live/server/env.example
deleted file mode 100644
index e64d4c2af..000000000
--- a/examples/word-wrangler-gemini-live/server/env.example
+++ /dev/null
@@ -1,5 +0,0 @@
-DAILY_API_KEY=
-DAILY_API_URL=https://api.daily.co/v1/
-DAILY_SAMPLE_ROOM_URL=
-GOOGLE_API_KEY=
-GOOGLE_TEST_CREDENTIALS_FILE=
\ No newline at end of file
diff --git a/examples/word-wrangler-gemini-live/server/requirements.txt b/examples/word-wrangler-gemini-live/server/requirements.txt
deleted file mode 100644
index 9e3a7052c..000000000
--- a/examples/word-wrangler-gemini-live/server/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-pipecatcloud
-pipecat-ai[daily,google,silero]
-fastapi
-uvicorn
-python-dotenv
diff --git a/examples/word-wrangler-gemini-live/server/runner.py b/examples/word-wrangler-gemini-live/server/runner.py
deleted file mode 100644
index 9e050c997..000000000
--- a/examples/word-wrangler-gemini-live/server/runner.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-import argparse
-import os
-
-import aiohttp
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper
-
-
-async def configure(aiohttp_session: aiohttp.ClientSession):
- """Configure the Daily room and Daily REST helper."""
- parser = argparse.ArgumentParser(description="Daily AI SDK Bot Sample")
- parser.add_argument(
- "-u", "--url", type=str, required=False, help="URL of the Daily room to join"
- )
- parser.add_argument(
- "-k",
- "--apikey",
- type=str,
- required=False,
- help="Daily API Key (needed to create an owner token for the room)",
- )
-
- args, unknown = parser.parse_known_args()
-
- url = args.url or os.getenv("DAILY_SAMPLE_ROOM_URL")
- key = args.apikey or os.getenv("DAILY_API_KEY")
-
- if not url:
- raise Exception(
- "No Daily room specified. use the -u/--url option from the command line, or set DAILY_SAMPLE_ROOM_URL in your environment to specify a Daily room URL."
- )
-
- if not key:
- raise Exception(
- "No Daily API key specified. use the -k/--apikey option from the command line, or set DAILY_API_KEY in your environment to specify a Daily API key, available from https://dashboard.daily.co/developers."
- )
-
- daily_rest_helper = DailyRESTHelper(
- daily_api_key=key,
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
-
- # Create a meeting token for the given room with an expiration 1 hour in
- # the future.
- expiry_time: float = 60 * 60
-
- token = await daily_rest_helper.get_token(url, expiry_time)
-
- return (url, token)
diff --git a/examples/word-wrangler-gemini-live/server/server.py b/examples/word-wrangler-gemini-live/server/server.py
deleted file mode 100644
index 056978a76..000000000
--- a/examples/word-wrangler-gemini-live/server/server.py
+++ /dev/null
@@ -1,229 +0,0 @@
-#
-# Copyright (c) 2024โ2025, Daily
-#
-# SPDX-License-Identifier: BSD 2-Clause License
-#
-
-"""RTVI Bot Server Implementation.
-
-This FastAPI server manages RTVI bot instances and provides endpoints for both
-direct browser access and RTVI client connections. It handles:
-- Creating Daily rooms
-- Managing bot processes
-- Providing connection credentials
-- Monitoring bot status
-
-Requirements:
-- Daily API key (set in .env file)
-- Python 3.10+
-- FastAPI
-- Running bot implementation
-"""
-
-import argparse
-import os
-import subprocess
-from contextlib import asynccontextmanager
-from typing import Any, Dict
-
-import aiohttp
-from dotenv import load_dotenv
-from fastapi import FastAPI, HTTPException, Request
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, RedirectResponse
-
-from pipecat.transports.services.helpers.daily_rest import DailyRESTHelper, DailyRoomParams
-
-# Load environment variables from .env file
-load_dotenv(override=True)
-
-# Maximum number of bot instances allowed per room
-MAX_BOTS_PER_ROOM = 1
-
-# Dictionary to track bot processes: {pid: (process, room_url)}
-bot_procs = {}
-
-# Store Daily API helpers
-daily_helpers = {}
-
-
-def cleanup():
- """Cleanup function to terminate all bot processes.
-
- Called during server shutdown.
- """
- for entry in bot_procs.values():
- proc = entry[0]
- proc.terminate()
- proc.wait()
-
-
-@asynccontextmanager
-async def lifespan(app: FastAPI):
- """FastAPI lifespan manager that handles startup and shutdown tasks.
-
- - Creates aiohttp session
- - Initializes Daily API helper
- - Cleans up resources on shutdown
- """
- aiohttp_session = aiohttp.ClientSession()
- daily_helpers["rest"] = DailyRESTHelper(
- daily_api_key=os.getenv("DAILY_API_KEY", ""),
- daily_api_url=os.getenv("DAILY_API_URL", "https://api.daily.co/v1"),
- aiohttp_session=aiohttp_session,
- )
- yield
- await aiohttp_session.close()
- cleanup()
-
-
-# Initialize FastAPI app with lifespan manager
-app = FastAPI(lifespan=lifespan)
-
-# Configure CORS to allow requests from any origin
-app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
-)
-
-
-async def create_room_and_token() -> tuple[str, str]:
- """Helper function to create a Daily room and generate an access token.
-
- Returns:
- tuple[str, str]: A tuple containing (room_url, token)
-
- Raises:
- HTTPException: If room creation or token generation fails
- """
- room = await daily_helpers["rest"].create_room(DailyRoomParams())
- if not room.url:
- raise HTTPException(status_code=500, detail="Failed to create room")
-
- token = await daily_helpers["rest"].get_token(room.url)
- if not token:
- raise HTTPException(status_code=500, detail=f"Failed to get token for room: {room.url}")
-
- return room.url, token
-
-
-@app.get("/")
-async def start_agent(request: Request):
- """Endpoint for direct browser access to the bot.
-
- Creates a room, starts a bot instance, and redirects to the Daily room URL.
-
- Returns:
- RedirectResponse: Redirects to the Daily room URL
-
- Raises:
- HTTPException: If room creation, token generation, or bot startup fails
- """
- print("Creating room")
- room_url, token = await create_room_and_token()
- print(f"Room URL: {room_url}")
-
- # Check if there is already an existing process running in this room
- num_bots_in_room = sum(
- 1 for proc in bot_procs.values() if proc[1] == room_url and proc[0].poll() is None
- )
- if num_bots_in_room >= MAX_BOTS_PER_ROOM:
- raise HTTPException(status_code=500, detail=f"Max bot limit reached for room: {room_url}")
-
- # Spawn a new bot process
- try:
- proc = subprocess.Popen(
- [f"python3 bot.py -u {room_url} -t {token}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room_url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- return RedirectResponse(room_url)
-
-
-@app.post("/connect")
-async def rtvi_connect(request: Request) -> Dict[Any, Any]:
- """RTVI connect endpoint that creates a room and returns connection credentials.
-
- This endpoint is called by RTVI clients to establish a connection.
-
- Returns:
- Dict[Any, Any]: Authentication bundle containing room_url and token
-
- Raises:
- HTTPException: If room creation, token generation, or bot startup fails
- """
- body = await request.json()
- print("Creating room for RTVI connection", body)
- room_url, token = await create_room_and_token()
- print(f"Room URL: {room_url}")
-
- # Start the bot process
- try:
- proc = subprocess.Popen(
- [f"python3 -m bot -u {room_url} -t {token} -p {body.get('personality', 'witty')}"],
- shell=True,
- bufsize=1,
- cwd=os.path.dirname(os.path.abspath(__file__)),
- )
- bot_procs[proc.pid] = (proc, room_url)
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"Failed to start subprocess: {e}")
-
- # Return the authentication bundle in format expected by DailyTransport
- return {"room_url": room_url, "token": token}
-
-
-@app.get("/status/{pid}")
-def get_status(pid: int):
- """Get the status of a specific bot process.
-
- Args:
- pid (int): Process ID of the bot
-
- Returns:
- JSONResponse: Status information for the bot
-
- Raises:
- HTTPException: If the specified bot process is not found
- """
- # Look up the subprocess
- proc = bot_procs.get(pid)
-
- # If the subprocess doesn't exist, return an error
- if not proc:
- raise HTTPException(status_code=404, detail=f"Bot with process id: {pid} not found")
-
- # Check the status of the subprocess
- status = "running" if proc[0].poll() is None else "finished"
- return JSONResponse({"bot_id": pid, "status": status})
-
-
-if __name__ == "__main__":
- import uvicorn
-
- # Parse command line arguments for server configuration
- default_host = os.getenv("HOST", "0.0.0.0")
- default_port = int(os.getenv("FAST_API_PORT", "7860"))
-
- parser = argparse.ArgumentParser(description="Daily Storyteller FastAPI server")
- parser.add_argument("--host", type=str, default=default_host, help="Host address")
- parser.add_argument("--port", type=int, default=default_port, help="Port number")
- parser.add_argument("--reload", action="store_true", help="Reload code on change")
-
- config = parser.parse_args()
-
- # Start the FastAPI server
- uvicorn.run(
- "server:app",
- host=config.host,
- port=config.port,
- reload=config.reload,
- )
diff --git a/examples/word-wrangler-gemini-live/server/word_list.py b/examples/word-wrangler-gemini-live/server/word_list.py
deleted file mode 100644
index 2f11daf3b..000000000
--- a/examples/word-wrangler-gemini-live/server/word_list.py
+++ /dev/null
@@ -1,669 +0,0 @@
-import random
-
-# Define categories and words for the Word Wrangler game
-WORD_CATEGORIES = {
- "animals": [
- "elephant",
- "penguin",
- "giraffe",
- "dolphin",
- "kangaroo",
- "octopus",
- "panda",
- "tiger",
- "koala",
- "flamingo",
- "hedgehog",
- "turtle",
- "zebra",
- "eagle",
- "sloth",
- "raccoon",
- "chameleon",
- "squirrel",
- "hamster",
- "cheetah",
- "platypus",
- "jellyfish",
- "parrot",
- "wolf",
- "hippo",
- "porcupine",
- "ostrich",
- "peacock",
- "alligator",
- "gorilla",
- "armadillo",
- "chipmunk",
- "walrus",
- "weasel",
- "skunk",
- "llama",
- "badger",
- "mongoose",
- "lemur",
- "otter",
- "bison",
- "falcon",
- "meerkat",
- "pelican",
- "cobra",
- "salamander",
- "lobster",
- "seal",
- "narwhal",
- "iguana",
- "piranha",
- "toucan",
- "moose",
- "lynx",
- "stingray",
- "starfish",
- "beaver",
- "vulture",
- "antelope",
- "jaguar",
- "seahorse",
- ],
- "food": [
- "pizza",
- "sushi",
- "burrito",
- "pancake",
- "donut",
- "lasagna",
- "popcorn",
- "chocolate",
- "mango",
- "pretzel",
- "taco",
- "waffle",
- "cupcake",
- "avocado",
- "cookie",
- "croissant",
- "omelette",
- "cheesecake",
- "dumpling",
- "hummus",
- "gelato",
- "risotto",
- "ramen",
- "salsa",
- "kebab",
- "brownie",
- "guacamole",
- "bagel",
- "falafel",
- "biscuit",
- "churro",
- "meatball",
- "tiramisu",
- "enchilada",
- "couscous",
- "gumbo",
- "jambalaya",
- "baklava",
- "popsicle",
- "cannoli",
- "tofu",
- "macaron",
- "empanada",
- "pho",
- "casserole",
- "porridge",
- "granola",
- "fritter",
- "hazelnut",
- "kiwi",
- "pomegranate",
- "artichoke",
- "edamame",
- "zucchini",
- "cashew",
- "brisket",
- "custard",
- "nutmeg",
- "ginger",
- ],
- "household": [
- "chair",
- "pillow",
- "mirror",
- "blanket",
- "lamp",
- "curtain",
- "sofa",
- "refrigerator",
- "blender",
- "bookshelf",
- "dishwasher",
- "carpet",
- "microwave",
- "table",
- "clock",
- "vase",
- "ottoman",
- "candle",
- "drawer",
- "cabinet",
- "doorknob",
- "silverware",
- "bathtub",
- "plunger",
- "toaster",
- "kettle",
- "spatula",
- "doormat",
- "hanger",
- "blinds",
- "ladle",
- "platter",
- "coaster",
- "napkin",
- "sponge",
- "thermostat",
- "showerhead",
- "coatrack",
- "nightstand",
- "cushion",
- "windowsill",
- "bedsheet",
- "countertop",
- "dustpan",
- "footstool",
- "flowerpot",
- "trashcan",
- "colander",
- "detergent",
- "chandelier",
- "laundry",
- "vacuum",
- "teapot",
- "duster",
- "lightbulb",
- "corkscrew",
- "paperweight",
- "doorstop",
- "radiator",
- ],
- "activities": [
- "swimming",
- "painting",
- "dancing",
- "gardening",
- "skiing",
- "cooking",
- "hiking",
- "reading",
- "yoga",
- "fishing",
- "jogging",
- "biking",
- "baking",
- "singing",
- "camping",
- "knitting",
- "surfing",
- "photography",
- "bowling",
- "archery",
- "horseback",
- "meditation",
- "gymnastics",
- "volleyball",
- "tennis",
- "skating",
- "kayaking",
- "climbing",
- "juggling",
- "rowing",
- "snorkeling",
- "embroidery",
- "canoeing",
- "paddleboarding",
- "pottery",
- "birdwatching",
- "karaoke",
- "sailing",
- "pilates",
- "calligraphy",
- "skateboarding",
- "crossword",
- "origami",
- "beekeeping",
- "stargazing",
- "snowboarding",
- "woodworking",
- "fencing",
- "quilting",
- "foraging",
- "geocaching",
- "scrapbooking",
- "welding",
- "glassblowing",
- "whittling",
- "ziplining",
- ],
- "places": [
- "beach",
- "library",
- "mountain",
- "airport",
- "stadium",
- "museum",
- "hospital",
- "castle",
- "garden",
- "hotel",
- "island",
- "desert",
- "university",
- "restaurant",
- "forest",
- "aquarium",
- "theater",
- "canyon",
- "lighthouse",
- "waterfall",
- "vineyard",
- "cathedral",
- "rainforest",
- "farmhouse",
- "greenhouse",
- "observatory",
- "marketplace",
- "boardwalk",
- "temple",
- "courtyard",
- "plantation",
- "lagoon",
- "volcano",
- "meadow",
- "oasis",
- "grotto",
- "peninsula",
- "aviary",
- "chapel",
- "coliseum",
- "bazaar",
- "marina",
- "orchard",
- "brewery",
- "sanctuary",
- "fortress",
- "prairie",
- "reservation",
- "tavern",
- "monument",
- "manor",
- "pavilion",
- "boulevard",
- "campground",
- ],
- "objects": [
- "umbrella",
- "scissors",
- "camera",
- "wallet",
- "bicycle",
- "backpack",
- "telescope",
- "balloon",
- "compass",
- "notebook",
- "keyboard",
- "magnet",
- "headphones",
- "hammer",
- "envelope",
- "binoculars",
- "tambourine",
- "boomerang",
- "megaphone",
- "suitcase",
- "pinwheel",
- "kaleidoscope",
- "microscope",
- "hourglass",
- "harmonica",
- "trampoline",
- "bubblegum",
- "xylophone",
- "typewriter",
- "screwdriver",
- "whistle",
- "chessboard",
- "handcuffs",
- "stethoscope",
- "stopwatch",
- "parachute",
- "blowtorch",
- "calculator",
- "thermometer",
- "mousetrap",
- "crowbar",
- "paintbrush",
- "metronome",
- "surfboard",
- "flipchart",
- "dartboard",
- "wrench",
- "flippers",
- "thimble",
- "protractor",
- "snorkel",
- "doorbell",
- "flashlight",
- "pendulum",
- "abacus",
- ],
- "jobs": [
- "teacher",
- "doctor",
- "chef",
- "firefighter",
- "pilot",
- "astronaut",
- "carpenter",
- "musician",
- "detective",
- "scientist",
- "farmer",
- "architect",
- "journalist",
- "electrician",
- "dentist",
- "veterinarian",
- "librarian",
- "photographer",
- "mechanic",
- "attorney",
- "barista",
- "plumber",
- "bartender",
- "surgeon",
- "therapist",
- "animator",
- "programmer",
- "pharmacist",
- "translator",
- "accountant",
- "florist",
- "butcher",
- "lifeguard",
- "beekeeper",
- "locksmith",
- "choreographer",
- "mortician",
- "paramedic",
- "blacksmith",
- "surveyor",
- "botanist",
- "chiropractor",
- "undertaker",
- "acrobat",
- "welder",
- "hypnotist",
- "zoologist",
- "mime",
- "sommelier",
- "meteorologist",
- "stuntman",
- "diplomat",
- "entomologist",
- "puppeteer",
- "archivist",
- "cartographer",
- "paleontologist",
- ],
- "transportation": [
- "helicopter",
- "submarine",
- "scooter",
- "sailboat",
- "train",
- "motorcycle",
- "airplane",
- "canoe",
- "tractor",
- "limousine",
- "escalator",
- "skateboard",
- "ambulance",
- "ferry",
- "rocket",
- "hovercraft",
- "gondola",
- "segway",
- "zeppelin",
- "bulldozer",
- "speedboat",
- "unicycle",
- "monorail",
- "snowmobile",
- "paddleboat",
- "trolley",
- "rickshaw",
- "caboose",
- "glider",
- "bobsled",
- "jetpack",
- "forklift",
- "dirigible",
- "chariot",
- "sidecar",
- "tandem",
- "battleship",
- "catamaran",
- "toboggan",
- "dinghy",
- "hydrofoil",
- "sleigh",
- "hatchback",
- "kayak",
- "stagecoach",
- "tugboat",
- "airship",
- "skiff",
- "carriage",
- "rowboat",
- "chairlift",
- "steamroller",
- ],
- "clothing": [
- "sweater",
- "sandals",
- "tuxedo",
- "poncho",
- "sneakers",
- "bikini",
- "cardigan",
- "overalls",
- "kimono",
- "mittens",
- "suspenders",
- "kilt",
- "leggings",
- "apron",
- "bowtie",
- "earmuffs",
- "fedora",
- "wetsuit",
- "pajamas",
- "sombrero",
- "raincoat",
- "beret",
- "turtleneck",
- "parka",
- "tiara",
- "toga",
- "bandana",
- "corset",
- "sarong",
- "tunic",
- "visor",
- "ascot",
- "fez",
- "moccasins",
- "blazer",
- "chaps",
- "romper",
- "waders",
- "clogs",
- "garter",
- "camisole",
- "galoshes",
- "bolero",
- "spats",
- "pantyhose",
- "onesie",
- "stiletto",
- "vest",
- "windbreaker",
- "scarf",
- "bonnet",
- ],
- "nature": [
- "glacier",
- "sequoia",
- "geyser",
- "avalanche",
- "tornado",
- "quicksand",
- "stalactite",
- "hurricane",
- "asteroid",
- "tundra",
- "galaxy",
- "nebula",
- "earthquake",
- "stalagmite",
- "constellation",
- "crystal",
- "tributary",
- "abyss",
- "monsoon",
- "magma",
- "erosion",
- "iceberg",
- "mudslide",
- "delta",
- "aurora",
- "gravity",
- "humidity",
- "sinkhole",
- "wildfire",
- "tropics",
- "tsunami",
- "eclipse",
- "metabolism",
- "mirage",
- "hemisphere",
- "spectrum",
- "fossil",
- "plateau",
- "groundwater",
- "undergrowth",
- "oxygen",
- "molecule",
- "pollination",
- "algae",
- "carbon",
- "nitrogen",
- "organism",
- "nucleus",
- "equator",
- "solstice",
- "cocoon",
- "germination",
- "metamorphosis",
- "nocturnal",
- "symbiosis",
- "ecosystem",
- "biodiversity",
- ],
- "emotions": [
- "happiness",
- "sadness",
- "anxiety",
- "surprise",
- "anger",
- "curiosity",
- "embarrassment",
- "nostalgia",
- "envy",
- "gratitude",
- "remorse",
- "boredom",
- "excitement",
- "loneliness",
- "pride",
- "jealousy",
- "contentment",
- "disgust",
- "empathy",
- "euphoria",
- "melancholy",
- "frustration",
- "anticipation",
- "amusement",
- "serenity",
- "disappointment",
- "confidence",
- "resentment",
- "apathy",
- "optimism",
- "pessimism",
- "bewilderment",
- "exhilaration",
- "indifference",
- "enthusiasm",
- "desperation",
- "satisfaction",
- "regret",
- "determination",
- "compassion",
- "hopelessness",
- "relief",
- "infatuation",
- "tranquility",
- "impatience",
- "exasperation",
- "agitation",
- "yearning",
- "sympathy",
- "admiration",
- "astonishment",
- "inspiration",
- "dread",
- "hope",
- ],
-}
-
-
-def generate_game_words(num_words=20):
- """Generate a random selection of words for the Word Wrangler game.
-
- 1. Create a flat list of all words
- 2. Remove any duplicates
- 3. Randomly select the requested number of words
-
- Args:
- num_words: Number of words to select for the game
-
- Returns:
- List of randomly selected words
- """
- # Create a flat list of all words from all categories
- all_words = []
- for category_words in WORD_CATEGORIES.values():
- all_words.extend(category_words)
-
- # Remove duplicates by converting to a set and back to a list
- all_words = list(set(all_words))
-
- # Randomly select words
- selected_words = random.sample(all_words, min(num_words, len(all_words)))
-
- return selected_words
diff --git a/src/pipecat/processors/aggregators/openai_llm_context.py b/src/pipecat/processors/aggregators/openai_llm_context.py
index 82edcadb0..c00b9fbe7 100644
--- a/src/pipecat/processors/aggregators/openai_llm_context.py
+++ b/src/pipecat/processors/aggregators/openai_llm_context.py
@@ -111,8 +111,6 @@ class OpenAILLMContext:
context = OpenAILLMContext()
for message in messages:
- if "name" not in message:
- message["name"] = message["role"]
context.add_message(message)
return context
diff --git a/src/pipecat/processors/transcript_processor.py b/src/pipecat/processors/transcript_processor.py
index df6dd469b..424374faf 100644
--- a/src/pipecat/processors/transcript_processor.py
+++ b/src/pipecat/processors/transcript_processor.py
@@ -140,11 +140,13 @@ class AssistantTranscriptProcessor(BaseTranscriptProcessor):
Result: "Hello there how are you"
"""
if self._current_text_parts and self._aggregation_start_time:
+ # Check specifically for space characters, previously isspace() was used
+ # but that includes all whitespace characters (e.g. \n), not just spaces.
has_leading_spaces = any(
- part and part[0].isspace() for part in self._current_text_parts[1:]
+ part and part[0] == " " for part in self._current_text_parts[1:]
)
has_trailing_spaces = any(
- part and part[-1].isspace() for part in self._current_text_parts[:-1]
+ part and part[-1] == " " for part in self._current_text_parts[:-1]
)
# If there are embedded spaces in the fragments, use direct concatenation
diff --git a/src/pipecat/transports/services/daily.py b/src/pipecat/transports/services/daily.py
index ce1f671a6..1ad443cb5 100644
--- a/src/pipecat/transports/services/daily.py
+++ b/src/pipecat/transports/services/daily.py
@@ -226,6 +226,8 @@ class DailyCallbacks(BaseModel):
on_participant_left: Called when a participant leaves.
on_participant_updated: Called when participant info is updated.
on_transcription_message: Called when receiving transcription.
+ on_transcription_stopped: Called when transcription is stopped.
+ on_transcription_error: Called when transcription encounters an error.
on_recording_started: Called when recording starts.
on_recording_stopped: Called when recording stops.
on_recording_error: Called when recording encounters an error.
@@ -253,6 +255,8 @@ class DailyCallbacks(BaseModel):
on_participant_left: Callable[[Mapping[str, Any], str], Awaitable[None]]
on_participant_updated: Callable[[Mapping[str, Any]], Awaitable[None]]
on_transcription_message: Callable[[Mapping[str, Any]], Awaitable[None]]
+ on_transcription_stopped: Callable[[str, bool], Awaitable[None]]
+ on_transcription_error: Callable[[str], Awaitable[None]]
on_recording_started: Callable[[Mapping[str, Any]], Awaitable[None]]
on_recording_stopped: Callable[[str], Awaitable[None]]
on_recording_error: Callable[[str, str], Awaitable[None]]
@@ -1233,6 +1237,9 @@ class DailyTransportClient(EventHandler):
stopped_by_error: Whether stopped due to error.
"""
logger.debug("Transcription stopped")
+ self._call_event_callback(
+ self._callbacks.on_transcription_stopped, stopped_by, stopped_by_error
+ )
def on_transcription_error(self, message):
"""Handle transcription error events.
@@ -1241,6 +1248,7 @@ class DailyTransportClient(EventHandler):
message: Error message.
"""
logger.error(f"Transcription error: {message}")
+ self._call_event_callback(self._callbacks.on_transcription_error, message)
def on_transcription_message(self, message):
"""Handle transcription message events.
@@ -1834,6 +1842,8 @@ class DailyTransport(BaseTransport):
on_participant_left=self._on_participant_left,
on_participant_updated=self._on_participant_updated,
on_transcription_message=self._on_transcription_message,
+ on_transcription_stopped=self._on_transcription_stopped,
+ on_transcription_error=self._on_transcription_error,
on_recording_started=self._on_recording_started,
on_recording_stopped=self._on_recording_stopped,
on_recording_error=self._on_recording_error,
@@ -2318,6 +2328,14 @@ class DailyTransport(BaseTransport):
if self._input:
await self._input.push_transcription_frame(frame)
+ async def _on_transcription_stopped(self, stopped_by, stopped_by_error):
+ """Handle transcription stopped events."""
+ await self._call_event_handler("on_transcription_stopped", stopped_by, stopped_by_error)
+
+ async def _on_transcription_error(self, message):
+ """Handle transcription error events."""
+ await self._call_event_handler("on_transcription_error", message)
+
async def _on_recording_started(self, status):
"""Handle recording started events."""
await self._call_event_handler("on_recording_started", status)
diff --git a/src/pipecat/transports/services/helpers/daily_rest.py b/src/pipecat/transports/services/helpers/daily_rest.py
index a283b4dfc..e69047de4 100644
--- a/src/pipecat/transports/services/helpers/daily_rest.py
+++ b/src/pipecat/transports/services/helpers/daily_rest.py
@@ -52,6 +52,25 @@ class RecordingsBucketConfig(BaseModel):
allow_api_access: bool = False
+class TranscriptionBucketConfig(BaseModel):
+ """Configuration for storing Daily transcription in a custom S3 bucket.
+
+ Refer to the Daily API documentation for more information:
+ https://docs.daily.co/guides/products/live-streaming-recording/storing-recordings-in-a-custom-s3-bucket
+
+ Parameters:
+ bucket_name: Name of the S3 bucket for storing transcription.
+ bucket_region: AWS region where the S3 bucket is located.
+ assume_role_arn: ARN of the IAM role to assume for S3 access.
+ allow_api_access: Whether to allow API access to the transcription.
+ """
+
+ bucket_name: str
+ bucket_region: str
+ assume_role_arn: str
+ allow_api_access: bool = False
+
+
class DailyRoomProperties(BaseModel, extra="allow"):
"""Properties for configuring a Daily room.
@@ -65,9 +84,11 @@ class DailyRoomProperties(BaseModel, extra="allow"):
eject_at_room_exp: Whether to remove participants when room expires.
enable_dialout: Whether SIP dial-out is enabled.
enable_recording: Recording settings ('cloud', 'local', 'raw-tracks').
+ enable_transcription_storage: Whether transcription storage is enabled.
geo: Geographic region for room.
max_participants: Maximum number of participants allowed in the room.
recordings_bucket: Configuration for custom S3 bucket recordings.
+ transcription_bucket: Configuration for custom S3 bucket transcription.
sip: SIP configuration parameters.
sip_uri: SIP URI information returned by Daily.
start_video_off: Whether video is off by default.
@@ -80,9 +101,11 @@ class DailyRoomProperties(BaseModel, extra="allow"):
eject_at_room_exp: bool = False
enable_dialout: Optional[bool] = None
enable_recording: Optional[Literal["cloud", "local", "raw-tracks"]] = None
+ enable_transcription_storage: Optional[bool] = None
geo: Optional[str] = None
max_participants: Optional[int] = None
recordings_bucket: Optional[RecordingsBucketConfig] = None
+ transcription_bucket: Optional[TranscriptionBucketConfig] = None
sip: Optional[DailyRoomSipParams] = None
sip_uri: Optional[dict] = None
start_video_off: bool = False
diff --git a/src/pipecat/utils/asyncio/watchdog_priority_queue.py b/src/pipecat/utils/asyncio/watchdog_priority_queue.py
index 98d7f9172..900242d1d 100644
--- a/src/pipecat/utils/asyncio/watchdog_priority_queue.py
+++ b/src/pipecat/utils/asyncio/watchdog_priority_queue.py
@@ -63,7 +63,7 @@ class WatchdogPriorityQueue(asyncio.PriorityQueue):
get_result = await super().get()
if isinstance(get_result, _WatchdogPriorityCancelSentinel):
- logger.debug(
+ logger.trace(
"Received WatchdogPriorityCancelSentinel, throwing CancelledError to force cancelling"
)
raise asyncio.CancelledError("Cancelling watchdog queue get() call.")
diff --git a/src/pipecat/utils/asyncio/watchdog_queue.py b/src/pipecat/utils/asyncio/watchdog_queue.py
index 53b04c534..b18632d10 100644
--- a/src/pipecat/utils/asyncio/watchdog_queue.py
+++ b/src/pipecat/utils/asyncio/watchdog_queue.py
@@ -62,7 +62,7 @@ class WatchdogQueue(asyncio.Queue):
get_result = await super().get()
if isinstance(get_result, _WatchdogQueueCancelSentinel):
- logger.debug(
+ logger.trace(
"Received WatchdogQueueCancelFrame, throwing CancelledError to force cancelling"
)
raise asyncio.CancelledError("Cancelling watchdog queue get() call.")