diff --git a/.gitignore b/.gitignore index 05f83509..65a82003 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ # Production /build - +/typesense/ # Generated files .docusaurus .cache-loader diff --git a/docs/Protocol/Protocol_v2/overview.md b/docs/Protocol/Protocol_v2/overview.md index c68b6de3..7772bb6f 100644 --- a/docs/Protocol/Protocol_v2/overview.md +++ b/docs/Protocol/Protocol_v2/overview.md @@ -4,6 +4,10 @@ sidebar_position: 0 # Overview +:::info +This page documents the Protocol v2 upgrade path and its historical architecture framing. For the live decentralized sequencer-validator network, see [`DSV Mainnet`](/category/dsv-mainnet), especially [`Why DSV Exists`](/dsv-mainnet/why-dsv-exists) and [`Protocol Workflow`](/dsv-mainnet/protocol-workflow). +::: + ## Necessity of an upgrade @@ -30,7 +34,7 @@ The above approach required the snapshotter peers to send out their submissions ### Composed snapshots finality -A combination of the above couple of issues also affects the [composability principle](/Protocol/data-composition.md) of building higher order snapshots. Dropped transactions and increased delays in confirmation times of snapshot submissions ultimately affect the aggregate data points that power complex use cases like the [Uniswap V2 dashboard](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/) and [Aave V3 dashboard](/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/). +A combination of the above issues also affects the [composability principle](/Protocol/data-composition.md) of building higher order snapshots. Dropped transactions and increased delays in confirmation times of snapshot submissions ultimately affect aggregate data products and downstream consumers. ## Upgraded workflow diff --git a/docs/Protocol/Protocol_v2/sequencer.md b/docs/Protocol/Protocol_v2/sequencer.md index 651313fe..2762361f 100644 --- a/docs/Protocol/Protocol_v2/sequencer.md +++ b/docs/Protocol/Protocol_v2/sequencer.md @@ -5,6 +5,10 @@ sidebar_position: 1 # Sequencer +:::info +This page describes the Protocol v2 sequencer model. For the live DSV mainnet flow, including two-level validator aggregation and VPA-based submission, see [`Protocol Workflow`](/dsv-mainnet/protocol-workflow) and [`Roles and Topology`](/dsv-mainnet/roles-and-topology). +::: + :::warning The sequencer listening interfaces for specific data markets are listed in the following trusted sequencer JSON file hosted on the Powerloom Github repository: diff --git a/docs/Protocol/Protocol_v2/validator.md b/docs/Protocol/Protocol_v2/validator.md index 5a191808..e8e0cb8d 100644 --- a/docs/Protocol/Protocol_v2/validator.md +++ b/docs/Protocol/Protocol_v2/validator.md @@ -4,6 +4,10 @@ sidebar_position: 3 # Validator +:::info +This page describes the Protocol v2 validator flow. For the live DSV mainnet consensus path, see [`Protocol Workflow`](/dsv-mainnet/protocol-workflow), [`On-Chain Submission and Verification`](/dsv-mainnet/onchain-submission-and-verification), and [`Stability and Scale`](/dsv-mainnet/stability-and-scale). +::: + ## Overview ![Protocol V2 validator worklow](/images/validator-workflow.png) diff --git a/docs/Protocol/Specifications/Snapshotter/components.md b/docs/Protocol/Specifications/Snapshotter/components.md index 757fd16d..d96af92c 100644 --- a/docs/Protocol/Specifications/Snapshotter/components.md +++ b/docs/Protocol/Specifications/Snapshotter/components.md @@ -113,4 +113,4 @@ In the end, Its API endpoints are used by a decoupled frontend adapter logic that ultimately support building of rich data products for smart contracts and other web3 based applications. -In our [`All about Data` section of docs](/build-with-powerloom/snapshotter-node/data), find out more about the way this API is used by a frontend adapter to serve the Uniswap V2, Uniswap V3, and Aave V3 dashboards. \ No newline at end of file +In the [`All about Data` section](/build-with-powerloom/snapshotter-node/data), learn how resolver APIs serve finalized data while preserving verification metadata for applications and agents. \ No newline at end of file diff --git a/docs/Protocol/Specifications/Snapshotter/snapshot-build.md b/docs/Protocol/Specifications/Snapshotter/snapshot-build.md index f865868b..5338f62c 100644 --- a/docs/Protocol/Specifications/Snapshotter/snapshot-build.md +++ b/docs/Protocol/Specifications/Snapshotter/snapshot-build.md @@ -7,7 +7,7 @@ sidebar_position: 2 ## Snapshot Computation Modules --- -As briefly introduced in the section on Snapshotter implementations that [leverage Git Submodules for specific computation logic](/build-with-powerloom/snapshotter-node/architecture), the modules are specified in the configuration for project types under the key `processor`. +As briefly introduced in the section on [Snapshotter architecture](/build-with-powerloom/snapshotter-node/architecture), compute modules are pulled into the node runtime by setup scripts and are specified in the configuration for project types under the key `processor`. ```json reference https://github.com/powerloom/snapshotter-configs/blob/39e4713cdd96fff99d100f1dea7fb7332df9e491/projects.example.json#L15-L28 @@ -102,7 +102,7 @@ https://github.com/powerloom/pooler/blob/634610801a7fcbd8d863f2e72a04aa8204d27d0 ### Example of snapshot computation -#### Base snapshot of trade events for the [Uniswap V2 and V3 dashboard data markets](/category/uniswap-dashboard): +#### Base snapshot of trade events: ```python reference https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/trade_volume.py#L14-L44 ``` @@ -111,13 +111,13 @@ https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc8 ## Aggregate Snapshots --- -Aggregate and higher-order snapshots that build on base snapshots are configured in their specific repositories, such as the following in our [Uniswap Dashboard use case](/category/uniswap-dashboard). This is where you can observe the [dependency graph of snapshot composition](/Protocol/data-composition#dependency-graph) in action. +Aggregate and higher-order snapshots that build on base snapshots are configured in market-specific repositories. This is where you can observe the [dependency graph of snapshot composition](/Protocol/data-composition#dependency-graph) in action. :::info - [Single Project Composition](/Protocol/data-composition#single-project-composition) - [Multi-Project Composition](/Protocol/data-composition#multiple-projects-composition) -- [Walkthrough of the Snapshotter Implementation for the Uniswap V2 and V3 Dashboards](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/) +- [BDS Data Market](/category/bds-data-market) ::: The order and dependencies of these compositions are specified according to the `aggregate_on` key. @@ -133,7 +133,7 @@ https://github.com/powerloom/snapshotter-configs/blob/fcf9b852bac9694258d7afcd8b * For example, a base snapshot built on a project ID like `pairContract_trade_volume:0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc:UNISWAPV2` triggers the worker `AggregateTradeVolumeProcessor` as defined in the `processor` config, against the pair contract `0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc`. * The span of epochs on which corresponding base snapshots will be aggregated is determined by the logic contained in the module specified in the `processor` key. -The following implementation aggregates [trade volume snapshots](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/closer-look-at-snapshots.md) across a span of 24 hours worth of epochs, if available. Otherwise, it aggregates the entire span of epochs available on the protocol against the data market and reports it back. +The following implementation aggregates trade volume snapshots across a span of 24 hours worth of epochs, if available. Otherwise, it aggregates the entire span of epochs available on the protocol against the data market and reports it back. ```python reference diff --git a/docs/Protocol/Specifications/state-v1.md b/docs/Protocol/Specifications/state-v1.md index e5c8374c..5d298209 100644 --- a/docs/Protocol/Specifications/state-v1.md +++ b/docs/Protocol/Specifications/state-v1.md @@ -130,4 +130,4 @@ event SnapshotFinalized(uint256 indexed epochId, uint256 epochEnd, string projec ## See Also --- -* [Build with Powerloom – All about data](/build-with-powerloom/snapshotter-node/data.md#verifying-data) +* [Build with Powerloom – All about data](/build-with-powerloom/snapshotter-node/data.md) diff --git a/docs/Protocol/Specifications/state-v2.md b/docs/Protocol/Specifications/state-v2.md index f9fc943c..5f2916bd 100644 --- a/docs/Protocol/Specifications/state-v2.md +++ b/docs/Protocol/Specifications/state-v2.md @@ -4,6 +4,10 @@ sidebar_position: 1 # Protocol State: V2 +:::info +This page documents the Protocol v2 state model. For the live DSV mainnet submission and verification path, see [`On-Chain Submission and Verification`](/dsv-mainnet/onchain-submission-and-verification) and [`Why DSV Exists`](/dsv-mainnet/why-dsv-exists). +::: + ## Overview: Smart Contract Architecture The smart contracts that maintain the state of the protocol V2 interact are arranged as depicted in the diagram that follows. diff --git a/docs/Protocol/data-composition.md b/docs/Protocol/data-composition.md index 35d06412..312c590a 100644 --- a/docs/Protocol/data-composition.md +++ b/docs/Protocol/data-composition.md @@ -24,7 +24,7 @@ As defined by the data sources configuration, the protocol state collects snapsh ## Higher-Order Aggregations -An example of this can be found in the [Uniswap V2 and V3 dashboard implementation](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/), where a trade activity aggregation dataset is generated by: +A market can generate higher-order aggregation datasets by: - Combining individual snapshots of trade volume and fees across multiple pair contracts. - Spanning a specific set of epochs that satisfy a time duration (e.g., 24 hours). diff --git a/docs/Protocol/data-sources.md b/docs/Protocol/data-sources.md index 16bd9e5b..44289411 100644 --- a/docs/Protocol/data-sources.md +++ b/docs/Protocol/data-sources.md @@ -11,18 +11,15 @@ The data sources defined by a market can be static or dynamic, depending on the ## Static Data Sources -Our implementation of a data market serves datasets to render live Uniswap V2, Uniswap V3, and Aave V3 dashboards. Further details about the data source configurations and snapshot schemas can be found in the following sections of our documentation: +Static data sources are useful when a market tracks a known set of contracts. In the current BDS market, snapshotter nodes track active Uniswap V3 pools on Ethereum mainnet and submit market-specific snapshots for DSV finalization. -* [Building with Powerloom -- Uniswap V2 and V3 Dashboards](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/) -* [Building with Powerloom -- Aave V3 Dashboard](/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/) - -Continuing with the Uniswap V2 example, you can explore the data sources list defined as part of the Uniswap v2 specific configuration in the [`snapshotter-configs`](https://github.com/powerloom/snapshotter-configs/blob/fcf9b852bac9694258d7afcd8beeaa4cf961c65f/projects.example.json#L1-L11) repository. +You can explore an older static configuration example in the [`snapshotter-configs`](https://github.com/powerloom/snapshotter-configs/blob/fcf9b852bac9694258d7afcd8beeaa4cf961c65f/projects.example.json#L1-L11) repository. ```json reference https://github.com/powerloom/snapshotter-configs/blob/fcf9b852bac9694258d7afcd8beeaa4cf961c65f/projects.example.json#L1-L11 ``` -The `projects` field in the above configuration snippet represents the Uniswap v2 pair contract addresses that are tracked, and snapshots are generated for these contracts. To further understand how snapshots on these contracts are tracked, refer to the section on [Project Types and IDs](#project-types-and-ids). +The `projects` field in the above configuration snippet represents contract addresses that are tracked, and snapshots are generated for those contracts. To further understand how snapshots on these contracts are tracked, refer to the section on [Project Types and IDs](#project-types-and-ids). ## Dynamic Data Sources diff --git a/docs/agents-and-bds/_category_.json b/docs/agents-and-bds/_category_.json new file mode 100644 index 00000000..94be6bdb --- /dev/null +++ b/docs/agents-and-bds/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Agents & BDS", + "position": 1.7, + "link": { + "type": "generated-index" + } +} diff --git a/docs/agents-and-bds/aeon-whale-radar.md b/docs/agents-and-bds/aeon-whale-radar.md new file mode 100644 index 00000000..7d94ef04 --- /dev/null +++ b/docs/agents-and-bds/aeon-whale-radar.md @@ -0,0 +1,209 @@ +--- +sidebar_position: 5 +title: Aeon Whale Radar (GitHub Actions) +--- + +# Aeon Whale Radar — GitHub Actions Setup + +Run verified Uniswap V3 whale alerts on a schedule using [Aeon](https://github.com/aaronjmars/aeon) + the [aeon-skills](https://github.com/powerloom/aeon-skills) package. Python prefetch owns BDS fetch and epoch cursor; the LLM only dispatches pre-built alerts via `./notify`. No VPS, no MCP server, no cron server. + +**Skill repository:** [github.com/powerloom/aeon-skills](https://github.com/powerloom/aeon-skills) + +--- + +## What you get + +- Per-block BDS snapshot catch-up (`GET /mpp/snapshot/allTrades/{block}`) +- Deterministic cursor in `memory/powerloom-bds-state.json` (auto-committed) +- LLM only dispatches pre-built alerts — no sandbox fetch, no cursor hallucination +- OpenClaw `whale-cron.mjs` parity, adapted for GitHub Actions +- Alerts delivered to Telegram, Discord, or Slack via Aeon `./notify` + +## Prerequisites + +1. A GitHub account +2. BDS API key (`sk_live_...`) from [metering signup](./metering-and-api-keys.md#browser-signup-free--2-credits-included) (2 free credits) +3. At least one notify channel (Telegram bot token + chat ID, Discord webhook, or Slack webhook) + +--- + +## Step 1 — Fork Aeon and enable Actions + +Go to [github.com/aaronjmars/aeon](https://github.com/aaronjmars/aeon) and click **Fork**. Clone your fork locally. + +GitHub disables Actions on new forks by default. Go to your fork → **Settings → Actions → General** and enable workflow runs: + +![Enable GitHub Actions on the Aeon fork — Settings → Actions → General, allow workflows](/images/bds-agentic-workflow/aeon-fork-enable-actions.png) + +--- + +## Step 2 — Install the powerloom-bds skill + +Clone the skill repo and run the installer against your Aeon fork: + +```bash +git clone https://github.com/powerloom/aeon-skills.git +cd your-aeon-fork # must contain aeon.yml at repo root + +/path/to/aeon-skills/install-into-aeon.sh +``` + +**Usage note:** The script defaults to `$(pwd)` when no argument is given — so **cd into your Aeon fork first**, or pass the fork path explicitly: + +```bash +/path/to/aeon-skills/install-into-aeon.sh /path/to/your-aeon-fork +``` + +This copies: + +| Source | Destination | +|--------|-------------| +| `powerloom-bds/` | `skills/powerloom-bds/` | +| 5 scripts | `scripts/prefetch-bds.sh`, `fetch-bds-epochs.py`, `bds_normalize.py`, `process-bds-skill.py`, `postprocess-bds.sh` | + +It also runs `patch-aeon-fork.sh` (`.gitignore`, workflow env, commit allowlist). + +--- + +## Step 3 — Enable the skill in aeon.yml + +Open `aeon.yml` in your fork root. Under `skills:`, add: + +```yaml + powerloom-bds: { enabled: true, schedule: "*/5 * * * *" } +``` + +The schedule is cron syntax. `*/5` runs every 5 minutes, but Aeon's scheduler dedup typically gives you an effective ~15 minute cadence, which is fine for whale radar. + +![aeon.yml with powerloom-bds skill enabled — add the skill entry under the skills block](/images/bds-agentic-workflow/aeon-yml-skill-enabled.png) + +--- + +## Step 4 — Set GitHub secrets + +In your fork: **Settings → Secrets and variables → Actions → New repository secret** + +| Secret | Required | Value | +|--------|----------|-------| +| `BDS_API_KEY` | **Yes** | `sk_live_...` from [metering signup](./metering-and-api-keys.md#browser-signup-free--2-credits-included) | +| `TELEGRAM_BOT_TOKEN` | For TG alerts | Your Telegram bot token from @BotFather | +| `TELEGRAM_CHAT_ID` | For TG alerts | Target chat ID (use @userchatidbot to find it) | +| `DISCORD_WEBHOOK_URL` | For Discord | Webhook URL from your Discord channel settings | + +If you want Telegram alerts, set both `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID`. For Discord, set `DISCORD_WEBHOOK_URL`. For Slack, set `SLACK_WEBHOOK_URL`. At least one notify channel is required, otherwise alerts go nowhere. + +![GitHub secrets configured in the Aeon fork — BDS_API_KEY plus Telegram bot token and chat ID](/images/bds-agentic-workflow/aeon-fork-github-secrets.png) + +:::note +Vanilla Aeon does **not** pass `BDS_API_KEY` into the prefetch step automatically. The `patch-aeon-fork.sh` script (run by the installer) adds it to the workflow env block. If you skipped patching, add this under the prefetch step in `.github/workflows/aeon.yml`: + +```yaml + BDS_API_KEY: ${{ secrets.BDS_API_KEY }} +``` +::: + +--- + +## Step 5 — Optional: configure whale threshold + +```bash +cp templates/powerloom-bds.yml.example memory/powerloom-bds.yml +``` + +Edit `thresholds.whale_usd` (default `25000`). Lower values (e.g. `5000`) produce more alerts; higher values filter to larger trades only. If the file is missing, prefetch creates a default at `whale_usd: 25000`. + +--- + +## Step 6 — Commit and push + +```bash +git add skills/powerloom-bds scripts/prefetch-bds.sh scripts/fetch-bds-epochs.py \ + scripts/bds_normalize.py scripts/process-bds-skill.py scripts/postprocess-bds.sh \ + .gitignore aeon.yml +# include .github/workflows/aeon.yml if patch-aeon-fork changed it +git commit -m "Add powerloom-bds whale radar skill" +git push +``` + +Ensure `.bds-cache/` is **not** tracked (ephemeral, wiped each run). + +--- + +## Step 7 — Verify first run + +Go to **Actions → aeon** workflow in your fork and trigger a run (or wait for cron). Select the `powerloom-bds` skill run and check the logs. + +Healthy prefetch output: + +``` +Cursor lastStreamEpoch=25185635 → fetch from block 25185636 +Fetched 5 snapshot(s): 25185636 - 25185640 +process-bds-skill: epochs=5 trades=82 alerts=27 cursor=25185640 +``` + +First run with no cursor fetches the **latest finalized epoch only**. Subsequent runs catch up block-by-block (max 100 per run). Silent runs ("no alerts") are normal when no swap exceeds your threshold. + +![First successful Aeon run — prefetch log shows fetched snapshots, trades, and alerts count](/images/bds-agentic-workflow/aeon-first-run-healthy.png) + +![Successful Aeon run — Telegram alerts delivered](/images/bds-agentic-workflow/aeon-first-run-telegram-alerts.png) + +--- + +## Fetch model + +The prefetch script calls: + +```http +GET /mpp/snapshot/allTrades/{block_number} +Authorization: Bearer sk_live_... +``` + +It loops from `lastStreamEpoch + 1` through the latest finalized block (cap 100 blocks per run). This is the same per-block catch-up model as OpenClaw `whale-cron.mjs`. + +**Do not use** query param forms like `/mpp/snapshot/allTrades?from_epoch=N` — the API catalog does not support them for this use case. + +--- + +## Troubleshooting + +| Symptom | Fix | +|---------|-----| +| `BDS_API_KEY not set` in prefetch | Add the secret in fork Settings; ensure `patch-aeon-fork.sh` ran or add env mapping manually in `.github/workflows/aeon.yml` | +| `Fetched N snapshots` but `trades=0` always | Wrong API path — must be `/mpp/snapshot/allTrades/{block}`, not `?from_epoch=` | +| Cursor never advances | Add `memory/powerloom-bds-state.json` to workflow auto-commit allowlist (patch script does this) | +| Telegram formatting broken | Use the shipped alert template (project slug only in verification footer) | +| Alerts with gaps / years apart | Tip-only sampling bug — reinstall scripts from aeon-skills | + +--- + +## Comparison with OpenClaw whale-cron + +| | OpenClaw `whale-cron.mjs` | Aeon `powerloom-bds` | +|--|---------------------------|----------------------| +| Runtime | VPS / local OpenClaw | GitHub Actions | +| Fetch | MCP `bds_mpp_snapshot_allTrades/{block}` | Prefetch `GET /mpp/snapshot/allTrades/{block}` | +| Cursor | `.powerloom/whale-cron-state.json` | `memory/powerloom-bds-state.json` (git-committed) | +| Agent role | Node script only | Python prefetch + LLM notify dispatch | +| Infrastructure | Your server | GitHub (free for public repos) | + +Both use **per-block snapshot catch-up**. Both produce alerts with the same verification block (CID + epoch + project slug). + +--- + +## Re-sync after aeon-skills updates + +```bash +cd your-aeon-fork +/path/to/aeon-skills/install-into-aeon.sh +git diff # review, commit, push +``` + +--- + +## Related pages + +- [`Metering & API Keys`](./metering-and-api-keys.md) +- [`Quickstart`](./quickstart.md) +- [`OpenClaw & Hosted MCP`](./openclaw-and-mcp.md) +- [`Verification in Agent Workflows`](./verification-in-agents.md) +- [aeon-skills repository](https://github.com/powerloom/aeon-skills) diff --git a/docs/agents-and-bds/bds-agent-headless.md b/docs/agents-and-bds/bds-agent-headless.md new file mode 100644 index 00000000..449b69e8 --- /dev/null +++ b/docs/agents-and-bds/bds-agent-headless.md @@ -0,0 +1,483 @@ +--- +sidebar_position: 6 +title: Headless Agentic CLI for BDS +--- + +# `bds-agent` — Headless Orchestration + +`bds-agent` is an agentic CLI for consuming BDS market data without relying on a local MCP subprocess. It calls the metered full-node resolver routes directly, translates natural-language queries to YAML recipes, and supports wallet-funded automated signup and top-up. + +Its implementation is available at [github.com/powerloom/bds-agent-py](https://github.com/powerloom/bds-agent-py). The published package on PyPI is [`bds-agent`](https://pypi.org/project/bds-agent/). + +--- + +## Install + +**Preferred — PyPI** + +With **`pip`** (use a virtual environment when your system Python is managed — for example `python -m venv .venv && source .venv/bin/activate` before install): + +```bash +pip install bds-agent +``` + +Or with **[`uv`](https://docs.astral.sh/uv/)** — installs from PyPI into an isolated tool environment (similar to **pipx**) and places `bds-agent` on your `PATH` (often `~/.local/bin`): + +```bash +uv tool install bds-agent +``` + +After an upgrade, refresh with `uv tool install --force bds-agent` if the CLI version looks stale. Confirm either install with `bds-agent --help`. + +**From source (contributing, or when you need the bundled `examples/` tree)** + +```bash +git clone https://github.com/powerloom/bds-agent-py.git +cd bds-agent-py +uv sync +uv tool install . +``` + +This places `bds-agent` on your `PATH`. For project-local use without global install: + +```bash +uv sync +uv run bds-agent ... +``` + +**Summary of steps:** + +1. List available plans +2. Setup EVM wallet credentials +3. Pay for credits +4. Check balance +5. Setup LLM backend +6. Test run and execute a query +7. Run a recipe with verification +8. Optionally, top-up credits + +## Signup and credits + +`bds-agent` uses the same metering service as all other BDS paths (`https://bds-metering.powerloom.io`). + +:::info +Reference: [`Metering & API Keys`](./metering-and-api-keys.md) +::: + +### CLI signup (free — 2 credits included) + +```bash +bds-agent signup +``` + +The CLI prompts for email and agent name, opens the browser verification page, waits for you to complete Turnstile, then saves the API key to `~/.config/bds-agent/profiles/.json`. + +![Step 1: BDS agent signup initiate with CLI](/images/bds-agentic-workflow/bds-agent-cli/1-bds-agent-signup.png) +![Step 2: CLI signup complete — API key saved to profile](/images/bds-agentic-workflow/bds-agent-cli/4-agent-cli-signup-complete.png) + +**Every signup receives 2 free credits** — no wallet, no payment, no tokens required. + + + +### Automated pay-signup (no browser, wallet only) + +```bash +bds-agent credits plans +bds-agent credits setup-evm +bds-agent signup-pay --plan-id --chain-id --token-symbol +bds-agent credits balance +``` + +1. The plans are returned from the metering service and look like this: + +![Example of plans returned from the metering service](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-plans.png) + +:::tip +It is recommended to sign up with plans that use $POWER as the payment token on Powerloom mainnet chain as it is the most efficient way to pay for credits and is often heavily discounted because of the low gas fees and processing overhead without requiring bridging of tokens on Powerloom mainnet. +::: + +2. The `setup-evm` step writes wallet credentials to `~/.config/bds-agent/profiles/.evm.env`. The `signup-pay` step executes the on-chain payment and claims the API key in a single command. + +:::warning +There is a `setup-tempo` command as well to pay for credits using a [Tempo](https://tempo.xyz/) wallet that is not supported fully yet on their mainnet. Please use the `setup-evm` command instead. +::: + +For example, to pay by $POWER on Powerloom mainnet, which is an EVM chain with chain id 7869, we set it up with a private key of a funded wallet. The rest of the prompts can be left to their defaults by pressing Enter, as noted in the `[default]` prompts. + +![Example of setup-evm step](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-setup-evm.png) + + +3. The `signup-pay` step executes the on-chain payment and claims the API key in a single command. Here we use the `launch_10_pl_power_cgt` plan, which is a 10 credit plan that costs 50 $POWER at the time of writing this guide. + +![Example of signup-pay step](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-signup-pay.png) + +4. Check the balance to see the credits available. + +:::note +On every signup, you receive 2 free credits. And the above payment of 50 $POWER adds 10 credits to your balance. So you have 12 credits available. +::: + +![Example of balance check](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-balance.png) + + +## Profile and configuration + +After signup, run initial config to write BDS defaults to the active profile: + +```bash +bds-agent config init +``` + +This sets `bds_base_url` (the full-node resolver HTTP origin), the endpoint catalog URL (resolved from the BDS market’s [`endpoints.json` in snapshotter-computes](https://github.com/powerloom/snapshotter-computes/blob/bds_eth_uniswapv3_core/api/endpoints.json)), and Powerloom chain verification defaults. It does not overwrite keys that are already set. + +![Example of config init](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-config-init.png) + +Inspect the active profile: + +```bash +bds-agent config show +``` + +![Example of config show](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-config-show.png) + +## LLM backend (for `query` and `create`) + +`bds-agent query` and `bds-agent create` require an LLM backend to translate natural language. The CLI auto-detects from API keys in the environment: + +### Available LLM backends + +- `anthropic` - Anthropic Messages API +- `openai` - OpenAI Chat Completions +- `ollama` - Local Ollama if running +- `local` - Local GGUF +- `apfel` - Apple Intelligence + +``` +bds-agent llm list + anthropic ready + openai not configured + ollama not configured + local not configured + apfel not configured +``` + +:::note +At the time of writing this guide, only the `anthropic` and local `ollama` backend is supported. +::: + +### Setting the LLM backend + +```bash +bds-agent llm setup anthropic +bds-agent llm use anthropic +``` + +Once the backend is set, you can test it by running: + +```bash +bds-agent llm ping +``` +![Example of llm setup](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-llm-setup.png) +![Example of llm ping](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-llm-use-ping.png) + +:::note +`bds-agent run` on an existing recipe does **not** require an LLM backend. +::: + +## Consuming data: query, create, run + +`bds-agent` provides three commands for consuming BDS data. None of these require an MCP server. + +### `bds-agent query` — natural language to HTTP + +Translate a natural-language question into a resolver route call and return the result: + +```bash +bds-agent query "trade volume of pool 0xc7bBeC68d12a0d1830360F8Ec58fA599bA1b0e9b which is WETH/USDT in last hour" --execute +``` + +The agent will then translate the natural language question into a resolver route call and return the result as well if the `--execute` flag is set. + +![Example of query](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-query-execute.png) + +:::note +Presently, the credit balances are not returned by the resolver node. So you will need to check the balance after the query is executed. +::: + +```bash +bds-agent credits balance + +╭────────────────────────────────────────────────────────────────── Credits ───────────────────────────────────────────────────────────────────╮ +│ │ +│ Organization org_4e07c1db5a4380439ac64b15 │ +│ Balance 11.998611111111112 │ +│ Used (lifetime) 0.001388888888888889 │ +│ Purchased (lifetime) 10 │ +│ Rate limits 60 req/min · 1000 req/day │ +│ │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +``` + +You can observe the credit balance has been decremented by the cost of that request (depends on the route’s **`credit_weight`** in the BDS endpoint catalog × the deployment’s **`CREDIT_PER_EPOCH`** base, or a flat stream rate for `/mpp/stream/...`). Refer to [Metering & API Keys — How credits are consumed](/agents-and-bds/metering-and-api-keys#how-credits-are-consumed) for the formula and premium-route table. + +### `bds-agent create` — natural language to YAML recipe + +Generate a YAML recipe file from a description: + +```bash +bds-agent create "Alert me when a single swap exceeds $1k on any indexed pool" + +✓ Wrote /Users/anomit/workspace/gen-yaml/large-swap-alerts.yaml +Run with: bds-agent run /Users/anomit/workspace/gen-yaml/large-swap-alerts.yaml (optional: --profile NAME) +``` + +This writes a recipe YAML file within the `gen-yaml` directory that you can review and run with `bds-agent run`. + +A recipe YAML specifies the data source endpoint, rules (filters, thresholds), and sinks (Telegram, Discord, stdout). The runner executes the recipe statelessly on each invocation, which makes it well-suited for cron-style scheduled runs. + +For on-chain verification of each response, set `verify: true` in the recipe. The runner will call `ProtocolState.maxSnapshotsCid` to confirm the returned CID matches the finalized state. See [`Verification in Agent Workflows`](./verification-in-agents.md) for detail. + + +### `bds-agent run` — execute a YAML recipe + +:::tip +Run the recipe with the `--profile` flag to specify the profile to use. Without it, the calls to the resolver node will fail as the API key is not set. In the following example, we use the `bds-test11` profile which was created in the [Automated pay-signup](#automated-pay-signup-no-browser-wallet-only) section. +::: + +```bash +bds-agent run gen-yaml/large-swap-alerts.yaml --profile bds-test11 +``` + +![Example of run](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-run.png) + +### Executing pre-packaged recipes + +The [`bds-agent-py` repository](https://github.com/powerloom/bds-agent-py) ships sample recipes under `examples/`. If you installed from PyPI only, fetch an example file instead of cloning: + +```bash +curl -sLO https://raw.githubusercontent.com/powerloom/bds-agent-py/main/examples/dex-alerts.yaml +bds-agent run dex-alerts.yaml --profile bds-test11 +``` + +From a source checkout: + +```bash +cd bds-agent-py +bds-agent run examples/dex-alerts.yaml --profile bds-test11 +``` + +The bundled recipe [`examples/dex-alerts.yaml`](https://github.com/powerloom/bds-agent-py/blob/main/examples/dex-alerts.yaml) streams indexed DEX swaps and applies two alert rules. Environment and profile follow the same pattern as elsewhere in this guide (`BDS_BASE_URL`, `BDS_AGENT_PROFILE`). + +| Area | YAML / value | What it does | +|------|----------------|--------------| +| **Source** | `type: bds_stream` | Subscribes to the BDS **SSE** stream (live trade payloads per epoch). | +| | `endpoint: /mpp/stream/allTrades` | All indexed pools’ swap stream. | +| | `base_url: ${BDS_BASE_URL}` | Resolver / data API origin. | +| **Auth** | `profile: ${BDS_AGENT_PROFILE}` | API key via the named profile. | +| **Sinks** | `stdout` | Prints alerts to the terminal; replace with Discord/Telegram sinks in your own copy if needed. | +| **Verification** | `verify: false` | Skips ProtocolState CID checks per batch (faster for demos). Set `verify: true` for finalized-state verification—see [Verification in Agent Workflows](./verification-in-agents.md). | +| **Lifecycle** | `reconnect: true`, `reconnect_delay: 5` | After stream errors, wait **5** seconds and reconnect. | +| | `max_reconnects: 0` | In this recipe schema, **`0` = unlimited** reconnect attempts after errors. | + +**Rules:** Each rule runs **independently** per pool; **either** rule **or both** can emit alerts in the same epoch when conditions match. + +| Rule | Parameters | Behavior | +|------|------------|----------| +| **`min_usd`** | `threshold: 50000` | Emits when **any single swap** is **≥ $50,000** USD (largest qualifying trade is reported). | +| **`volume_spike`** | `multiplier: 3.0`, `window_epochs: 10` | Emits when a **pool’s** epoch volume is **≥ 3×** the rolling average of its **previous 10** epochs (**per pool**). | + +![Example of running a pre-packaged recipe](/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-run-pre-packaged.png) + +## MCP stdio (optional) + +`bds-agent` can also expose BDS tools as a local MCP stdio server: + +```bash +bds-agent mcp +``` + +This is the stdio equivalent of the hosted `bds-mcp-server` and works with Cursor, Claude Desktop, and similar clients that start MCP servers as subprocesses. It uses the same endpoint catalog and API key as `bds-agent run`. + +The key difference from the hosted server: + +| | `bds-agent mcp` (stdio) | Hosted `bds-mcp-server` | +|--|---|---| +| Transport | stdio (child process) | HTTP SSE | +| Deploy | Client starts the process | Runs as a service | +| Env | Profile / env in the child | Bearer header on every HTTP request | + +For laptop use in Cursor or Claude Code, the stdio path is adequate. For agents running in remote environments or frameworks that cannot spawn child processes, use the hosted server. + +## Pulse trader (`bds-agent trade`) + +**Pulse** is a self-contained momentum trader: it subscribes to the BDS **`/mpp/stream/allTrades`** SSE feed, scores each epoch with **price + volume + flow** confluence, and (when not in dry-run) swaps on **Ethereum mainnet** via Uniswap V3 SwapRouter. Production setups use **`--multi-pool`** and the **USD Price Feed** (`--price-source usd`, default) so alt USDC pairs are not drowned out by flat trade-implied prices on WETH/USDC. + +**Prerequisites:** same as the rest of this guide — profile with `api_key`, `bds-agent config init`, and credits. Trading uses a **separate** wallet from billing. + +| File (profile `pulse`) | Purpose | +|------------------------|---------| +| `profiles/pulse.json` | API key, `bds_base_url`, catalog URLs | +| `profiles/pulse.evm.env` | **Billing** — `signup-pay`, on-chain credit top-up | +| `profiles/pulse.trade.env` | **Trading** — swaps only (`trade setup-evm`) | +| `profiles/pulse.trader.json` | Open positions (one LONG per pool) | +| `profiles/pulse.trades.jsonl` | Trade log | + +Use the same `--profile` on every command. **Do not** swap from the billing wallet. + +### Quick start (dry-run → live) + +```bash +# After signup + config init (sections above) +bds-agent trade setup-evm --profile pulse + +# Phase 1 — paper trades, no on-chain swaps +bds-agent trade run --profile pulse --dry-run --multi-pool --verbose + +# Phase 2 — live (fund trading wallet: USDC for size + ETH for gas) +bds-agent trade run --profile pulse --multi-pool --price-source usd --size 25 +``` + +Fund **`profiles/.trade.env`** only. First live swap per token may need a one-time ERC-20 **approve** before the router swap. + +### Multi-pool mode (`--multi-pool`) + +Each BDS epoch (~12s on ETH mainnet): + +1. Ingest per-pool trades from the shared `allTrades` stream +2. Run Pulse on each watchlist pool (USD window when `--price-source usd`) +3. Open up to **`--max-open-positions`** concurrent LONGs (default **5** with `--multi-pool`, **1** without) — **one position per pool** +4. **Live:** USDC ↔ base token on each selected pool (not WETH-only) + +Watchlist comes from **`GET /mpp/dailyActivePools`** (default top **40** pools, 5m interval) and refreshes about every **30 epochs**. + +```bash +bds-agent trade run --profile pulse --dry-run --multi-pool --verbose \ + --active-pool-limit 40 --active-interval 300 --price-source usd --max-open-positions 5 +``` + +### Entry signal defaults + +| Flag | Default | Meaning | +|------|---------|---------| +| `--price-source` | `usd` | `usd` = `/mpp/tokenPrices/...` per epoch; `trades` = swap-implied only | +| `--price-move` | `0.15` | Min price change % in the lookback window | +| `--volume-burst` | `2.0` | Short-window volume vs trailing baseline | +| `--flow-imbalance` | `30` | Directional flow as % of volume | +| `--window-minutes` | `5` | Signal lookback | +| `--size` | (required live) | USDC notional per entry | +| `--slippage` | `0.01` | Uniswap `amountOutMinimum` floor (no silent relax to zero) | +| `--max-open-positions` | auto | `0` = 5 with `--multi-pool`, else 1 | +| `--daily-loss-limit` | `50` | Block new entries if today realized P/L ≤ −$50 (UTC) | +| `--reentry-cooldown-minutes` | `0` | Optional: block all new entries N minutes after a **live** exit | +| `--signal-cooldown-minutes` | `0` | Optional: per-pool spacing after a LONG fires | + +**Dry-run → live:** paper positions do not block live startup; starting **live** clears paper state. Use **`--verbose`** during validation — one heartbeat line per epoch (gates, `px=`, burst, imbalance, position state). + +### Exit strategies (defaults on) + +Disable any rule with `--no-exit-*`. First match wins: **stop-loss → take-profit → trailing-stop → time-based → signal-reversal**. + +| Flag | Default | Role | +|------|---------|------| +| `--exit-stop-loss-pct` | `2.0` | Cut if price falls X% below entry | +| `--exit-take-profit-pct` | `1.0` | Take if price rises X% above entry | +| `--exit-trailing-pct` | `2.0` | Exit X% below peak since entry | +| `--exit-hold-minutes` | `10` | Max hold time | +| `--exit-signal-reversal` | on | Exit on Pulse SHORT on the entry pool | + +### Metering (Pulse) + +| Route | When | +|-------|------| +| `/mpp/stream/allTrades` | Once per `trade run` session (per SSE connection) | +| `/mpp/tokenPrices/...` | Each epoch per watched token when `--price-source usd` | +| `/mpp/dailyActivePools` | Watchlist refresh (~every 30 epochs) | + +There is **no** separate “Pulse fee” — only catalog-priced BDS routes. See [Metering & API Keys → How much each call costs](./metering-and-api-keys.md#how-much-each-call-costs). On **HTTP 402** (credits exhausted), USD fetches fail fast with a top-up hint; the trader stops rather than using stale prices. + +```bash +bds-agent credits balance +bds-agent credits usage by-endpoint --days 7 --limit 50 +``` + +### Ops commands + +```bash +bds-agent trade setup-evm --profile pulse +bds-agent trade status --profile pulse +bds-agent trade history --profile pulse +bds-agent trade pnl --profile pulse +bds-agent trade exit --profile pulse # all open +bds-agent trade exit --profile pulse --pool 0x… # one pool +``` + +**Full CLI reference** (verbose heartbeat legend, risk controls, guard composition): [`bds-agent-py` — `docs/TRADE.md`](https://github.com/powerloom/bds-agent-py/blob/main/docs/TRADE.md). + +## Threshold Guard (`bds-agent guard`) + +Bracket trading on **one** USDC-quoted Uniswap V3 pool using BDS **spot USD** prices (`GET /mpp/token/price/{token}/{pool}`). Complements **Pulse** above: Guard is single-pool percent brackets and optional dip re-entry; Pulse is stream confluence across many pools. + +**Setup:** same profile API key and swap wallet as Pulse — `bds-agent trade setup-evm --profile NAME` writes `profiles/.trade.env`. + +### Spot mode (default) + +| Flag | Default | Role | +|------|---------|------| +| `--enter` | on | Swap `--size` USDC → base at BDS spot on start | +| `--take-profit-pct` | `0.03` | Exit when price rises +X% above entry | +| `--stop-loss-pct` | off | Optional exit when price falls −X% below entry | +| `--reentry-retrace-pct` | `0.5` | After exit, re-buy on cross **down** through a level below the exit | +| `--reserve-max-minutes` | `0` | Stop the guard process in USDC if no dip re-entry within N minutes (`0` = poll forever) | +| `--pool` / `--token` | — | Pool and base token (pool saved to `.guard.json`) | + +```bash +bds-agent trade setup-evm --profile myguard +bds-agent guard run --profile myguard \ + --pool 0xE0554a476A092703abdB3Ef35c80e0D76d32939F \ + --token 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 \ + --size 5 --take-profit-pct 0.003 --stop-loss-pct 0.002 \ + --reentry-retrace-pct 0.5 --reserve-max-minutes 30 --poll 5 +``` + +Actions are **edge-triggered** (fire on crosses between polls, not every tick while price sits in a band). After take-profit you hold **USDC** (`reserve`); re-entry waits for a dip through `reentry_below`. If price only trends higher, use **`--reserve-max-minutes`** so the CLI exits cleanly and sets `guard_exit_reason=reserve_idle_timeout` in `.guard.json` for an outer orchestrator to start the next leg. + +**Status and P/L:** `bds-agent guard status` reads bracket state (`.guard.json`). Fills are mirrored into the same profile’s trade log — use `bds-agent trade status`, `history`, and `pnl`. + +**Explicit USD bands:** pass both `--threshold-high` and `--threshold-low` instead of percent flags. See the full CLI reference in [`bds-agent-py` — `docs/GUARD.md`](https://github.com/powerloom/bds-agent-py/blob/main/docs/GUARD.md) and the orchestrator index in [`SKILL.md`](https://github.com/powerloom/bds-agent-py/blob/main/SKILL.md). + +## SKILL.md — framework-neutral orchestration directives + +`bds-agent` ships a `SKILL.md` at the repository root. It is a single self-contained file that any orchestrator, autonomous agent, or IDE can fetch at session start to learn the full CLI surface, metering HTTP flow, environment variables, and common mistakes — without reading the full `USER_GUIDE.md`. + +```bash +curl -sL https://raw.githubusercontent.com/powerloom/bds-agent-py/main/SKILL.md +``` + +`SKILL.md` covers: + +- Session bootstrap (install, version check) +- Metering HTTP as the primary surface: `GET /credits/plans` → pay-signup → `GET /credits/balance` → `POST /credits/topup` +- Full CLI command table with one-line purpose per command (including **Threshold Guard** and **Pulse trader**) +- Environment variables and profile precedence (short form; `USER_GUIDE.md` has full tables) +- Key distinction to avoid broken setups: the metering origin (`BDS_AGENT_SIGNUP_URL`, default `https://bds-metering.powerloom.io`) is **not** the same as the BDS data origin (`BDS_BASE_URL`, e.g. `https://bds.powerloom.io/api`) +- Hosted MCP context: `bds-agent mcp` is **stdio only**; the hosted SSE server at `https://bds-mcp.powerloom.io/sse` is a separate service +- Common mistakes section (URL confusion, MCP stdout pollution, catalog setup, pay-signup field matching) +- Canonical resource links + +For the full operator reference, installation tables, and precedence rules: [`docs/USER_GUIDE.md`](https://github.com/powerloom/bds-agent-py/blob/main/docs/USER_GUIDE.md). + +### When to choose this path + +- You are integrating into an external orchestration framework (LangGraph, CrewAI, custom agent loop) where spawning a child MCP process is not practical. +- You want a wallet-funded agent that can sign up, pay for credits, and top up without human intervention. +- You prefer YAML-driven recipe execution over tool-per-call MCP patterns. +- You are running in a sandboxed or CI-style environment. + +For OpenClaw users who want guided onboarding and MCP tools, see [`OpenClaw & Hosted MCP`](./openclaw-and-mcp.md) instead. + + +## Related pages + +- [`Metering & API Keys`](./metering-and-api-keys.md) +- [`Quickstart`](./quickstart.md) (Path A — OpenClaw) +- [`Verification in Agent Workflows`](./verification-in-agents.md) diff --git a/docs/agents-and-bds/metering-and-api-keys.md b/docs/agents-and-bds/metering-and-api-keys.md new file mode 100644 index 00000000..77faf44f --- /dev/null +++ b/docs/agents-and-bds/metering-and-api-keys.md @@ -0,0 +1,262 @@ +--- +sidebar_position: 3 +title: Metering & API Keys +--- + +import LiveCreditPlans from '@site/src/components/LiveCreditPlans'; + +# Metering & API Keys + +Hosted access to the BDS market is metered. Every `/mpp/...` call against the full-node resolver deducts credits from your balance. The API key you receive after signup is the Bearer token for both direct HTTP access and the hosted MCP server. + +:::note +Check the [Architecture](/agents-and-bds/overview#architecture) page for a diagram of the metering service and API key flow. +::: + +**Implementation:** [`powerloom/bds-agenthub-billing-metering`](https://github.com/powerloom/bds-agenthub-billing-metering) + +## Plans and credit balance + +List available plans (no key required). The embed below fetches the live metering service response when this page loads, so it stays aligned with the deployed plan table. + +```bash +curl -sS https://bds-metering.powerloom.io/credits/plans +``` + + + +Check your balance: + +```bash +GET https://bds-metering.powerloom.io/credits/balance +Authorization: Bearer sk_live_... +``` + +Or via CLI: + +```bash +bds-agent credits balance +``` + +## Signup + +All signup paths lead to the same metering service at `https://bds-metering.powerloom.io/metering`. + +### Browser signup (free — 2 credits included) + +:::tip Free credits — no strings +The 2 free credits work identically to paid credits. Same API, same verification objects, same key format. If you want to explore what BDS data looks like before committing any tokens, this is the fastest path. +::: + +You can sign up directly in the browser at [`bds-metering.powerloom.io/metering`](https://bds-metering.powerloom.io/metering) — no CLI required. The signup page features a dark-themed interface with Powerloom branding, a hero section highlighting three value cards — **Verifiable**, **Agent-ready**, and **POWER or USDC** — and a subtitle describing verifiable on-chain Uniswap V3 data for agents. Enter your email and agent name on the **SIGN UP** tab, complete Cloudflare Turnstile verification, and your API key is displayed immediately. + +**Video walkthrough:** [Free API key for BDS: Browser Signup](https://www.youtube.com/watch?v=5J_xlRfb418) · [BDS & Agents playlist](https://www.youtube.com/playlist?list=PLbymeirG9WMz3j7IRgrvZ9IW04e4hIgHK) + +![Powerloom signup page — dark theme with hero cards for Verifiable, Agent-ready, and POWER or USDC; SIGN UP tab with EMAIL and AGENT NAME fields](/images/bds-agentic-workflow/metering-signup-page.png) + +![Browser signup — enter email and agent name, then complete verification](/images/bds-agentic-workflow/browser-signup-verify-pending.png) + +![Turnstile verification — solve the challenge and accept Terms of Service](/images/bds-agentic-workflow/browser-signup-turnstile-verify.png) + +![API key delivered — copy it now, shown only once in this flow](/images/bds-agentic-workflow/browser-signup-api-key-ready.png) + +Alternatively, use the CLI: `bds-agent signup` runs the same device flow from the terminal. + +:::info +For complete CLI instructions, see the [Headless Agentic CLI for BDS](/agents-and-bds/bds-agent-headless#cli-signup-free--2-credits-included) page. +::: + +**What you can do with 2 free credits:** + +- **Headless** — `bds-agent query`, `bds-agent run` against any pre-packaged recipe, or direct `curl` against `/mpp/...` routes. See [Quickstart Path B](/agents-and-bds/quickstart#path-b---bds-agent-cli). +- **OpenClaw, no wallet** — paste your `sk_live_...` into the [free-key one-shot prompt](https://github.com/powerloom/powerloom-bds-univ3/blob/main/references/09-openclaw-one-shot-free-key.md) and the agent installs the `powerloom-bds-univ3` skill, wires the key, and creates a Whale Radar cron with onchain verification in every alert. See [Quickstart Path A](/agents-and-bds/quickstart#path-a---openclaw-one-shot-free-key). +- **Hosted MCP, any framework** — point Claude Code, Cursor, LangGraph, CrewAI, or any SSE-MCP-capable client at `https://bds-mcp.powerloom.io/sse` with `Authorization: Bearer sk_live_...`. See [OpenClaw & Hosted MCP](/agents-and-bds/openclaw-and-mcp). + +The same `sk_live_...` works across all three surfaces. Top up with native $POWER (or any supported plan token) when the 2 credits run out — see [Top-up](#top-up) below; no re-onboarding required. + +### Pay-signup (agent-first, no browser) + +For automated or headless signup, use the pay-signup API directly. This requires a funded EVM wallet. + +**HTTP flow:** + +1. `GET /credits/plans` — discover available plans: `id`, `chain_id`, `token_symbol`, `payment_kind` (`erc20` or `native_value`). +2. `POST /signup/pay/quote` — supply `agent_name`, `plan_id`, `chain_id`, `token_symbol`, `payer_address`. Returns `signup_nonce`, `recipient`, `amount_atomic`. +3. Pay on-chain — transfer tokens to `recipient` for `amount_atomic` (ERC-20 or native per `payment_kind`). +4. `POST /signup/pay/claim` — supply `signup_nonce` and `tx_hash`. Returns `api_key`. + +**Using `bds-agent`:** + +```bash +bds-agent credits plans +bds-agent credits setup-evm # saves wallet creds to profile +bds-agent signup-pay \ + --plan-id \ + --chain-id \ + --token-symbol +bds-agent credits balance +``` + +The `bds-agent` CLI is a reference client for the same HTTP flow; both paths issue an identical `sk_live_...` key. + +### Rotate a lost API key (pay-signup wallet) + +This only applies if you created your account with **pay-signup** (on-chain payment). The server stores your wallet as `payer_address` and never stores the raw API secret. + +**How the server knows it is you** + +1. You request a **challenge**: `POST /api-key/recover/challenge` with `{ "address": "0x..." }`. The server checks that a non-revoked API key exists for that `payer_address`. +2. It returns a **single-use `nonce`**, an **exact `message` string** (includes your address, nonce, expiry, and terms URL), and persists that message server-side. +3. You sign **`message`** with the **EIP-191** wallet flow (`personal_sign` / `signMessage`). A valid signature for that address is treated as proof of control of the pay-signup wallet. +4. You submit **`POST /api-key/recover/verify`** with `{ "address", "nonce", "signature" }`. The service verifies the signature against the **stored** challenge text, then replaces `api_key_hash` with a new key and returns the new `sk_live_...` once. The previous key stops working immediately. + +Email/browser signup keys are **not** tied to `payer_address`; use normal signup support flows for those accounts. + +**OpenClaw and other MCP users** + +The hosted MCP server only accepts an existing Bearer key; it does not run the rotation HTTP flow for you. After you rotate, update `POWERLOOM_API_KEY` (or your client config) with the new `sk_live_...`. + +**Script (Node, metering repo)** + +From a checkout of [`powerloom/bds-agenthub-billing-metering`](https://github.com/powerloom/bds-agenthub-billing-metering): + +```bash +npm install +METERING_BASE_URL=https://bds-metering.powerloom.io \ +WALLET_PRIVATE_KEY=0x... \ +npm run rotate-api-key +``` + +The script prints the new key on stdout. Use `--base-url=https://...` instead of `METERING_BASE_URL` if you prefer. + +**Agents** + +Any agent that already holds the pay-signup wallet can automate the same two POSTs plus `signMessage`; there is no separate MCP tool for rotation today. + +### Pay-signup with OpenClaw + +If you use OpenClaw and want autonomous wallet-funded onboarding (50 $POWER for the launch plan = 10 credits + 2 bonus = 12 total), the [`powerloom-bds-univ3`](https://github.com/powerloom/powerloom-bds-univ3) skill ships a one-shot prompt that installs the skill, runs `signup-pay.mjs` against your wallet, claims the API key, wires env, and creates a Whale Radar cron — all from a single message. + +:::tip No wallet yet? Start free. +You don't need a wallet to use OpenClaw with this skill. Run [`bds-agent signup`](#browser-signup-free--2-credits-included) for a free `sk_live_...` (2 credits, browser device flow) and use the [free-key one-shot prompt](https://github.com/powerloom/powerloom-bds-univ3/blob/main/references/09-openclaw-one-shot-free-key.md) instead. Same skill, same cron, same verification — no on-chain payment. +::: + +The first step is to install the skill from ClawHub, and is a subset of the [one-shot prompt](https://github.com/powerloom/powerloom-bds-univ3/blob/main/references/08-openclaw-one-shot.md) for installing the skill and running the pay-signup and cron setup. + +You can copy the same prompt from the skill page by selecting the "Copy Prompt" button on the skill page. with the option to `Install & Setup` instead of `Install Only`. + +![ClawHub powerloom-bds-univ3 skill installation and pay-signup flow](/images/bds-agentic-workflow/clawhub-skill-prompt.png) + +You will be prompted just once most likely to only provide the private key of the wallet you want to use for the pay-signup. + +:::tip +* We recommend using burner wallets for the pay-signup and topup to avoid any risk of losing funds. +* It is always a good idea to setup a micro top-up and dispatcher service to fund and topup such wallets automatically. +::: + +#### Successfully installed and setup + +![Successfully installed and setup](/images/bds-agentic-workflow/openclaw-automated-install.png) + + +## Top-up + +Top-up adds credits to an existing key without creating a new account. It uses the same on-chain payment pattern as pay-signup. + +#### Top-up with OpenClaw + +If you use OpenClaw, you can use the OpenClaw skill to topup credits. + + +![Topup with OpenClaw](/images/bds-agentic-workflow/openclaw-topup.png) + +**HTTP:** + +``` +POST /credits/topup +Authorization: Bearer sk_live_... +{ "plan_id": "...", "chain_id": "...", "tx_hash": "0x..." } +``` + +**CLI:** + +```bash +bds-agent credits setup-evm # if not already saved +bds-agent credits topup +``` + +The `powerloom-bds-univ3` skill also ships `node scripts/credits-topup.mjs` for Node-only environments — same gate as `signup-pay.mjs`: `--dry-run`, then **`--yes`** on the broadcast invocation (preferred over persisting confirmation env vars in OpenClaw); CI may use `POWERLOOM_CREDITS_TOPUP_CONFIRM=yes` once. + +## How credits are consumed + +Credits are deducted when the full-node resolver processes a metered `/mpp/...` request. This happens whether the request comes from: + +- a direct HTTP call with `Authorization: Bearer`, +- the hosted MCP server forwarding a tool call on your behalf, or +- `bds-agent run` executing a YAML recipe. + +The hosted MCP server does not apply a separate charge layer. It forwards your Bearer token to the resolver, which applies the standard metering deduction. MCP tool access is gated by the same key and balance state. + +A balance at or below zero causes the resolver to return `402`. The hosted MCP server propagates this back to the MCP client. Scripts in `powerloom-bds-univ3` call `get_credit_balance` before each recipe run to surface this before it becomes a mid-run 402. + +### How much each call costs + +Pricing is **not** one flat rate for every `/mpp/` route. Your balance is debited when the resolver accepts a metered request. Per-route **`credit_weight`**, stream session rates, and time-series lookback tiers all come from one place: + +**→ [Endpoint Catalog — Credit weights](/bds-data-market/endpoint-catalog#credit-weights)** (live table from [`api/endpoints.json`](https://github.com/powerloom/snapshotter-computes/blob/bds_eth_uniswapv3_core/api/endpoints.json)) + +**Credit plan (summary):** + +- **Typical GET (weight 1):** **1/7200** of a credit per request — about **7200** such calls per **1** credit. +- **Heavier routes:** multiply that base by the route’s catalog weight (e.g. weight **10** → **10/7200** credits per call). +- **SSE stream** (`/mpp/stream/allTrades`): **0.01** credits **per connection** when the stream opens (not per event on the wire). +- **Time series** (`/mpp/timeSeries/...`): weight **5** × a **lookback multiplier** by window — see [Endpoint Catalog → Time series lookback](/bds-data-market/endpoint-catalog#time-series-lookback-multiplier). + +**Pulse trader (`bds-agent trade run`):** **`GET /mpp/stream/allTrades`** for the session, plus **`GET /mpp/tokenPrices/...`** each epoch with default `--price-source usd`. No separate Pulse or CLI fee — only catalog-priced routes. + +**YAML / MCP agents:** many recipes use **`bds_stream`** → the same stream endpoint; you pay the session rate above, not per SSE message. + +Monitor spend with **`bds-agent credits usage by-endpoint`** or the [Usage Dashboard](#usage-dashboard) **Top endpoints** table. [Plans](#plans-and-credit-balance) above are how you buy more credits. + +## Usage and account dashboard + +Inspect credit usage per API key: + +```bash +curl -sS "https://bds-metering.powerloom.io/credits/usage/summary?days=30" \ + -H "Authorization: Bearer sk_live_..." +``` + +The response includes daily totals and a **`by_endpoint`** breakdown (calls and credits per BDS route template). + +Or via CLI: + +```bash +bds-agent credits usage +bds-agent credits usage summary --days 30 +``` + +**Browser dashboard:** navigate to the **USAGE** tab at [bds-metering.powerloom.io/metering/account](https://bds-metering.powerloom.io/metering/account), paste your API key (stored in sessionStorage only), and view balance, usage-by-day, top endpoints, and recent activity. See the [Usage Dashboard](#usage-dashboard) section below for a full walkthrough with screenshots. + +## Usage Dashboard + +The **USAGE** tab at [bds-metering.powerloom.io/metering/account](https://bds-metering.powerloom.io/metering/account) provides a browser-based dashboard for monitoring credit consumption in real time. You unlock the dashboard by pasting your `sk_live_...` API key into the prompt — the key is stored in **sessionStorage only** (never persisted to disk or sent to a third party). + +![Usage dashboard — balance, credits used, rate limits, usage by day, top endpoints, and recent activity](/images/bds-agentic-workflow/metering-dashboard-usage.png) + +The dashboard displays the following cards and tables: + +| Card / Table | Details | +|---|---| +| **Balance** | Current remaining credits (e.g. 16.4599 credits). | +| **Credits Used (Lifetime)** | Total credits consumed since account creation (e.g. 5.5401). | +| **Rate Limits** | Per-minute and per-day request caps (e.g. 240/min · 1,500,000/day). | +| **Usage by day (last 30 days)** | Table with columns **DAY** · **CALLS** · **CREDITS USED** — daily aggregate of metered requests. | +| **Top endpoints** | Table with columns **ROUTE** · **METHOD** · **CALLS** · **CREDITS** — ranked by credit consumption. Common routes include `/mpp/tokenPrices/all/{token_address}/{block_number}`, `/mpp/stream/allTrades`, and `/mpp/dailyActivePools`. | +| **Recent activity** | Table with columns **TIME** · **TYPE** · **ROUTE** · **SOURCE** · **AMOUNT** — individual metering events with timestamps and sources (e.g. `cli`). | + +The dashboard also provides **Refresh** and **Sign out** buttons. Signing out clears the API key from sessionStorage. + +## POWER token discount + +Credit plans priced in POWER (the Powerloom coordination token) carry a bulk discount relative to USDC plans. See `GET /credits/plans` for the current price matrix across available chains and token symbols. diff --git a/docs/agents-and-bds/openclaw-and-mcp.md b/docs/agents-and-bds/openclaw-and-mcp.md new file mode 100644 index 00000000..099e91bf --- /dev/null +++ b/docs/agents-and-bds/openclaw-and-mcp.md @@ -0,0 +1,129 @@ +--- +sidebar_position: 4 +title: OpenClaw & Hosted MCP +--- + +# OpenClaw + `powerloom-bds-univ3` + Hosted MCP + +This page describes the MCP-first consumption path: installing the published ClawHub skill and connecting through the hosted MCP server. + +## The hosted MCP server + +The Powerloom BDS MCP server is a persistent HTTP service that exposes BDS data as MCP tools over SSE transport. + +| Property | Value | +|----------|-------| +| Default endpoint | `https://bds-mcp.powerloom.io/sse` | +| Repository | [`powerloom/bds-mcp-server`](https://github.com/powerloom/bds-mcp-server) | +| Transport | MCP SSE (`GET /sse` + `POST /messages/`) | +| Auth | `Authorization: Bearer ` on every request | +| Health check | `GET https://bds-mcp.powerloom.io/health` | + +The key you use here is the same `sk_live_...` key from [Metering & API Keys](./metering-and-api-keys.md). + +## What the server exposes + +**Catalog tools** — one MCP tool per `/mpp/...` route in the BDS endpoint catalog. Tool names begin with `bds_`. Most are **snapshot** tools (bounded `GET`-style routes). The catalog may also expose **streaming** trade tools for advanced direct use; the **`powerloom-bds-univ3` skill does not call those** — its shipped scripts only use snapshot MCP calls so runs stay compatible with cron and agent sandboxes. + +**Fixed tools:** + +| Tool | Purpose | +|------|---------| +| `verify_data_provenance` | Check that a `cid`, `epoch_id`, and `project_id` match what is finalized on-chain in `ProtocolState.maxSnapshotsCid` | +| `get_credit_balance` | Return the current balance and rate-limit state for the authenticated key | + +The server validates your key on every SSE connection and on every `/messages/` POST. A zero or exhausted balance returns 402 before any tool is executed. + +## The `powerloom-bds-univ3` ClawHub skill + +The skill wraps the hosted MCP server with opinionated recipes and a guided onboarding flow. It is published on ClawHub under the name `powerloom-bds-univ3`. + +**Install:** + +``` +clawhub install powerloom-bds-univ3 +``` + +**ClawHub:** [clawhub.ai/powerloom-bot/powerloom-bds-univ3](https://clawhub.ai/powerloom-bot/powerloom-bds-univ3) + +**Repository:** [github.com/powerloom/powerloom-bds-univ3](https://github.com/powerloom/powerloom-bds-univ3) + +### OpenClaw-assisted setup — two one-shot prompts + +The skill ships two parallel one-shot prompts. Both gather inputs from you in chat upfront (API key + Telegram dispatch), then install the skill, wire env, and create a Whale Radar cron. + +| Variant | Use when | Reference | +|---------|----------|-----------| +| **Free-key cron** | You already have an `sk_live_...` from `bds-agent signup` (2 free credits, no wallet). | [`references/09-openclaw-one-shot-free-key.md`](https://github.com/powerloom/powerloom-bds-univ3/blob/main/references/09-openclaw-one-shot-free-key.md) | +| **Pay-signup + cron** | You want autonomous wallet-funded onboarding for a 10-credit plan (50 $POWER + 2 bonus = 12 total) in the same prompt. | [`references/08-openclaw-one-shot.md`](https://github.com/powerloom/powerloom-bds-univ3/blob/main/references/08-openclaw-one-shot.md) | + +**Video (free-key path):** [Setup Openclaw with free BDS API key](https://www.youtube.com/watch?v=FxQ96bgoi5s) · [BDS & Agents playlist](https://www.youtube.com/playlist?list=PLbymeirG9WMz3j7IRgrvZ9IW04e4hIgHK) + +**Default to the free-key variant** unless you explicitly want the on-chain payment in the same prompt — the free path costs nothing, gets you to verified data immediately, and the same `sk_live_...` can be topped up later via [Top-up](./metering-and-api-keys.md#top-up). + +:::tip +The full inlined prompts and step-by-step walkthroughs live on the [Quickstart](./quickstart.md) page (Path A free-key + wallet-funded upgrade sub-section). +::: + +### Shipped recipes + +All recipes use **bounded snapshot** MCP tools only (e.g. `bds_mpp_snapshot_allTrades`, `bds_mpp_snapshot_trades_pool_address`). None of them drive streaming trade consumption. + +| Recipe | Script | Notes | +|--------|--------|--------| +| Whale Radar (cron, all pools) | `node scripts/whale-cron.mjs` | **Recommended** for scheduled ticks: one-shot batches, exits when done | +| Whale Radar (fixed pools) | `node scripts/whale-radar.mjs` | **Default:** one round over configured pools, then exits; **`--daemon`** for repeat | +| Token-Flow | `node scripts/token-flow.mjs --token 0x...` | **Default:** one round per resolved pool, then exits; **`--daemon`** for repeat | +| Autonomous DeFi Analyst | `node scripts/defi-analyst.mjs` | One bounded round (multi- or single-pool per recipe); add **`--daemon`** only for local repeat loops | + +For OpenClaw cron jobs, use **`whale-cron.mjs`** or **`whale-radar.mjs` / `token-flow.mjs` / `defi-analyst.mjs` without `--daemon`** so each process exits after one bounded round. + +### Required and optional environment variables + +Skill env vars use the **`POWERLOOM_`** prefix. Only **`POWERLOOM_API_KEY`** is mandatory at install time; everything else sits in `optional_env` in the skill's `SKILL.md` schema. + +| Variable | When required | Purpose | +|----------|---------------|---------| +| `POWERLOOM_API_KEY` | **Always** — only mandatory env | `sk_live_...` from `bds-agent signup` (free path) or the `signup-pay.mjs` claim output (wallet path) | +| `POWERLOOM_TELEGRAM_BOT_TOKEN` | Optional — Telegram dispatch | Set if you want alerts in Telegram (paired with chat id below) | +| `POWERLOOM_TELEGRAM_CHAT_ID` | Optional — Telegram dispatch | Target chat for the bot | +| `POWERLOOM_DISCORD_WEBHOOK_URL` | Optional — Discord dispatch | Webhook for Discord alerts | +| `POWERLOOM_MCP_URL` | Optional — transport override | Defaults to `https://bds-mcp.powerloom.io/sse` | +| `POWERLOOM_BDS_MCP_CALL_TIMEOUT_MS` | Optional — per-tool timeout in ms | Default `60000`; raise to `120000` if large snapshots time out under epoch backlog | +| `POWERLOOM_EVM_PRIVATE_KEY` | Wallet-funded path only | Payer wallet (use a **burner**); read by `scripts/signup-pay.mjs` and `scripts/credits-topup.mjs` | +| `POWERLOOM_EVM_RPC_URL` | Wallet-funded path only | JSON-RPC for the chain (e.g. `https://rpc-v2.powerloom.network`) | +| `POWERLOOM_EVM_CHAIN_ID` | Wallet-funded path only | Must match the plan's `chain_id` (e.g. `7869` for POWER) | +| `POWERLOOM_PLAN_ID` | Wallet-funded path only | e.g. `launch_10_pl_power_cgt` from `GET /credits/plans` | +| `POWERLOOM_TOKEN_SYMBOL` | Wallet-funded path only | Must match plan's `token_symbol` (e.g. `POWER`) | + +The free-key one-shot prompt skips every "Wallet-funded path only" var entirely — `whale-cron.mjs` reads only `POWERLOOM_API_KEY` (+ optional Telegram envs) at runtime. See the skill's [`SKILL.md`](https://github.com/powerloom/powerloom-bds-univ3/blob/main/SKILL.md) and [Metering & API Keys](./metering-and-api-keys.md) for the authoritative list. + +### Pre-flight credit check + +Before each recipe run: + +```bash +node scripts/ensure-credits.mjs +``` + +This calls `get_credit_balance` and exits non-zero if the balance is zero or the key is invalid, so a 402 mid-run does not silently stall the recipe. + +## Connecting from other MCP clients + +The hosted server works with any client that supports SSE MCP transport: + +| Client | How | +|--------|-----| +| Claude Code | `claude mcp add --transport sse --header "Authorization: Bearer " bds https://bds-mcp.powerloom.io/sse` | +| Cursor | Add a remote MCP entry with the SSE URL and the Authorization header | +| LangGraph / CrewAI | Use their MCP adapter with the SSE URL and Bearer header on all requests | + +## Composition + +`powerloom-bds-univ3` is designed as the data side of a brain + arms composition pattern. It provides DSV-verified Uniswap V3 data; pair it with an execution skill (swap, dispatch, portfolio management) in ClawHub to build end-to-end workflows. Each composition retains the same on-chain provenance guarantees on the data side. + +## Related pages + +- [`Metering & API Keys`](./metering-and-api-keys.md) +- [`Quickstart`](./quickstart.md) +- [`Verification in Agent Workflows`](./verification-in-agents.md) diff --git a/docs/agents-and-bds/overview.md b/docs/agents-and-bds/overview.md new file mode 100644 index 00000000..4c24c8d6 --- /dev/null +++ b/docs/agents-and-bds/overview.md @@ -0,0 +1,142 @@ +--- +sidebar_position: 1 +title: Overview +--- + +# Agents & BDS — Overview + +![Agents & BDS Overview](/images/bds-agentic-workflow/bds-and-agents-hero.jpg) + +Agents do not talk to DSV finalization directly. For the current BDS market, they consume finalized Uniswap V3 data through metered `/mpp/...` routes served by a snapshotter full-node resolver. + +There are three first-class consumption paths. All three use the same commercial substrate — metered `/mpp/...` routes, on-chain plan purchase, and a Bearer API key — but differ in how the agent is wired to the data. + +## Video walkthroughs + +Step-by-step clips for the **free API key** path are in the **[BDS & Agents](https://www.youtube.com/playlist?list=PLbymeirG9WMz3j7IRgrvZ9IW04e4hIgHK)** playlist on YouTube: + +| Video | Covers | +|-------|--------| +| [Free API key for BDS: Browser Signup](https://www.youtube.com/watch?v=5J_xlRfb418) | Sign up at [`bds-metering.powerloom.io/metering`](https://bds-metering.powerloom.io/metering) — email, Turnstile, copy `sk_live_...` (2 free credits). | +| [Setup Openclaw with free BDS API key](https://www.youtube.com/watch?v=FxQ96bgoi5s) | OpenClaw one-shot with `powerloom-bds-univ3` and an existing free key (Whale Radar cron). | + +## Architecture + +```mermaid +flowchart TD + subgraph onboard [Signup — once] + evmWallet["EVM wallet\n(POWER or USDC)"] + browserUI["Browser UI\nbds-metering.powerloom.io/metering"] + meteringService["Metering service\nbds-metering.powerloom.io"] + apiKey["API key sk_live_..."] + evmWallet -->|"pay-signup / top-up"| meteringService + browserUI -->|"device signup"| meteringService + meteringService --> apiKey + end + + subgraph pathA ["Path A — OpenClaw + ClawHub skill"] + clawSkill["powerloom-bds-univ3\n(ClawHub skill + recipes)"] + hostedMCP["Hosted MCP server\nbds-mcp.powerloom.io/sse\nSSE transport · Bearer auth"] + clawSkill -->|"Authorization: Bearer"| hostedMCP + end + + subgraph pathB ["Path B — bds-agent CLI"] + bdsAgent["bds-agent\n(query / create / run\n· pip / uv tool)"] + end + + subgraph pathC ["Path C — Aeon (GitHub Actions)"] + aeonFork["Aeon fork\n(GitHub repo)"] + aeonSkills["aeon-skills\n(prefetch + notify)"] + aeonFork -->|"GitHub Actions cron"| aeonSkills + end + + subgraph dataLayer [BDS market consumption layer] + coreAPI["Snapshotter full-node resolver\n/mpp routes\ncredits deducted per call"] + protState["ProtocolState\nPowerloom anchor chain\nmaxSnapshotsCid"] + coreAPI -->|"verification object in every response\ncid + epochId + projectId"| protState + end + + apiKey -->|"POWERLOOM_API_KEY"| clawSkill + apiKey -->|"profile / env"| bdsAgent + apiKey -->|"POWERLOOM_API_KEY"| aeonFork + hostedMCP -->|"Bearer forwarded to upstream"| coreAPI + bdsAgent -->|"Authorization: Bearer"| coreAPI + aeonSkills -->|"Authorization: Bearer"| coreAPI +``` + +## Three paths + +### Path A — OpenClaw + `powerloom-bds-univ3` + hosted MCP server + +🦞 Published skill on ClawHub: [powerloom-bds-univ3](https://clawhub.ai/powerloom-bot/powerloom-bds-univ3). + +An agent running in OpenClaw installs the published ClawHub skill and connects to the hosted MCP server at `https://bds-mcp.powerloom.io/sse`. The skill ships with three opinionated recipes (Whale Radar, Token-Flow, Autonomous DeFi Analyst). OpenClaw's TUI or web UI can assist through the setup steps, including API key acquisition. + +This path is optimized for fast time-to-first-alert: the agent uses MCP tools exposed by the hosted server rather than calling the resolver's HTTP routes directly. + +**Best fit:** OpenClaw users, ClawHub-distributed recipes, guided onboarding, agents that should compose BDS data with other ClawHub skills. + +### Path B — `bds-agent` CLI for headless orchestration + +The **`bds-agent`** CLI (install: **`pip install bds-agent`** or **`uv tool install bds-agent`**, package [`bds-agent` on PyPI](https://pypi.org/project/bds-agent/), source [`powerloom/bds-agent-py`](https://github.com/powerloom/bds-agent-py)) does **not** require an MCP server. It translates natural-language queries to structured YAML recipes and executes them directly against the metered resolver routes. It supports wallet-funded automated signup and top-up, making it suitable for agent sandboxes and external orchestration frameworks (LangGraph, CrewAI, and others) where spawning an MCP subprocess is impractical. + +Beyond **`run`** / **`query`**, the CLI includes a **Pulse** trader (`trade run` — stream confluence, multi-pool) and **Threshold Guard** (`guard run` — one pool, percent take-profit/stop-loss, optional idle exit in USDC for composed agent loops). See [`Headless CLI` → Pulse](./bds-agent-headless.md#pulse-trader-bds-agent-trade) and [`Threshold Guard`](./bds-agent-headless.md#threshold-guard-bds-agent-guard). + +**Best fit:** headless agents, external orchestration, programmatic wallet-based signup, any environment where the MCP process model is not viable. + +### Path C — Aeon fork (GitHub Actions) + `aeon-skills` + +The **Aeon** path ([`powerloom/aeon-skills`](https://github.com/powerloom/aeon-skills)) runs entirely inside GitHub Actions — no MCP server and no VPS required. A Python-based prefetch step owns BDS fetch and epoch cursor management; the LLM only dispatches pre-built alerts through `./notify` to Telegram, Discord, or Slack. + +To get started, fork the Aeon repository, set your `POWERLOOM_API_KEY` and notification secrets as GitHub repository variables, and enable the scheduled GitHub Actions workflow. The workflow runs on cron, fetches the latest data via the metered `/mpp/...` routes, and pushes alerts to your configured channels. + +**Best fit:** users who fork Aeon and want scheduled whale alerts via Telegram/Discord/Slack without managing a VPS. + +## Shared substrate + +Regardless of path, every agent consumes the same underlying data: + +- `/mpp/...` routes are the metered consumption surface +- credits are purchased on-chain and tracked per API key +- every supported resolver response includes a `verification` object the agent can use to confirm the returned payload maps to DSV-finalized state + +The route surface is served by a snapshotter full node participating in the BDS market. Metering, MCP, OpenClaw, and `bds-agent` are access layers around that same underlying resolver path. + +## Implementation repositories + +| Layer | Repository | +|-------|------------| +| Snapshotter full-node resolver / hosted `/mpp` routes | [`powerloom/snapshotter-core-edge`](https://github.com/powerloom/snapshotter-core-edge) | +| Metering and API keys | [`powerloom/bds-agenthub-billing-metering`](https://github.com/powerloom/bds-agenthub-billing-metering) | +| Hosted MCP server | [`powerloom/bds-mcp-server`](https://github.com/powerloom/bds-mcp-server) | +| OpenClaw skill and recipes | [`powerloom/powerloom-bds-univ3`](https://github.com/powerloom/powerloom-bds-univ3) | +| Headless CLI | [`bds-agent` on PyPI](https://pypi.org/project/bds-agent/) · [`powerloom/bds-agent-py`](https://github.com/powerloom/bds-agent-py) | +| Aeon skill package | [`powerloom/aeon-skills`](https://github.com/powerloom/aeon-skills) | + +## Read next + +| Goal | Page | +|------|------| +| Get running in ~10 minutes | [`Quickstart`](./quickstart.md) | +| Understand plans, keys, and credits | [`Metering & API Keys`](./metering-and-api-keys.md) | +| Set up on OpenClaw via ClawHub | [`OpenClaw & Hosted MCP`](./openclaw-and-mcp.md) | +| Run a headless agent without MCP | [`Headless CLI (`bds-agent`)`](./bds-agent-headless.md) | +| Set up Aeon scheduled alerts (GitHub Actions) | [`Aeon Whale Radar`](./aeon-whale-radar.md) | +| Verify data provenance inside an agent | [`Verification in Agent Workflows`](./verification-in-agents.md) | + +## Agent-readable skill files + +All three paths ship a `SKILL.md` that any LLM-driven agent or orchestrator can fetch at session start to learn the full command surface, metering HTTP flow, and common mistakes — without reading lengthier documentation. + +| Path | Skill file | Fetch | +|------|-----------|-------| +| OpenClaw + ClawHub | [`powerloom-bds-univ3/SKILL.md`](https://github.com/powerloom/powerloom-bds-univ3/blob/main/SKILL.md) | `curl -sL https://raw.githubusercontent.com/powerloom/powerloom-bds-univ3/main/SKILL.md` | +| `bds-agent` (repo: `bds-agent-py`) | [`bds-agent-py/SKILL.md`](https://github.com/powerloom/bds-agent-py/blob/main/SKILL.md) | `curl -sL https://raw.githubusercontent.com/powerloom/bds-agent-py/main/SKILL.md` | +| Aeon (repo: `aeon-skills`) | [`aeon-skills/SKILL.md`](https://github.com/powerloom/aeon-skills/blob/main/SKILL.md) | `curl -sL https://raw.githubusercontent.com/powerloom/aeon-skills/main/SKILL.md` | + +The **`bds-agent`** skill file (shipped from the `bds-agent-py` repo) is framework-neutral: it covers the metering HTTP surface, CLI commands, env vars, and common mistakes for any orchestrator, not just OpenClaw. + +## Background + +- [`What BDS Is`](/bds-data-market/what-bds-is) — the resolver layer and market scope +- [`Why DSV Exists`](/dsv-mainnet/why-dsv-exists) — the protocol finalization layer diff --git a/docs/agents-and-bds/quickstart.md b/docs/agents-and-bds/quickstart.md new file mode 100644 index 00000000..a10e8b84 --- /dev/null +++ b/docs/agents-and-bds/quickstart.md @@ -0,0 +1,390 @@ +--- +sidebar_position: 2 +title: Quickstart +--- + +# Quickstart: first BDS agent + +This quickstart covers both agent paths from zero to a running agent. Both start free, both upgrade to a paid plan with native $POWER if you need more credits. + +| Path | Best when | Cost | +|------|-----------|------| +| **A — 🦞 OpenClaw one-shot** | You are in OpenClaw; the agent gathers inputs in chat and creates a Whale Radar cron from a single prompt | **Free** (2 credits) → optional 50 $POWER upgrade for 10 more | +| **B — 🐍 `bds-agent` CLI** | You are running headless or in an external orchestration environment | **Free** (2 credits) → optional 50 $POWER upgrade for 10 more | +| **C — 🌟 Aeon (GitHub Actions)** | You fork [Aeon](https://github.com/aaronjmars/aeon) and want scheduled whale alerts via Telegram/Discord/Slack without a VPS | **Free** (2 credits) → metered BDS usage per epoch fetched | + +:::tip Step 0 for **both** paths — get a free API key +Run [`bds-agent signup`](./bds-agent-headless.md#cli-signup-free--2-credits-included) (browser device flow) **or** sign up directly in the browser at [bds-metering.powerloom.io/metering](https://bds-metering.powerloom.io/metering). No wallet, no tokens, 2 free credits credited immediately. The same `sk_live_...` key works against the OpenClaw skill, the bds-agent CLI, and the hosted MCP server. See [Metering & API Keys](./metering-and-api-keys.md#browser-signup-free--2-credits-included) for the full HTTP/CLI reference. +::: + +Both quickstart paths below default to the free-key flow. Wallet-funded pay-signup (50 $POWER → 10 credits + 2 bonus = 12 total) is surfaced as an explicit upgrade sub-section under each path — only required when the 2 free credits run out or you want the autonomous on-chain bootstrap. + +--- + +![Agentic consumption diagram](/images/bds-agentic-workflow/bds-agentic-consumption.jpg) + +### Browser signup (no CLI needed) + +If you prefer to skip the CLI entirely, you can get your free API key from the browser in three steps: + +**1. Enter your email and agent name** at [`bds-metering.powerloom.io/metering`](https://bds-metering.powerloom.io/metering) and click **Continue**. The page generates a verification code and starts polling for completion. + +![Browser signup — verification code generated, waiting for Turnstile](/images/bds-agentic-workflow/browser-signup-verify-pending.png) + +**2. Complete Cloudflare Turnstile verification.** Click **Open verification page**, solve the Turnstile challenge, accept the Terms of Service, and click **Verify**. + +![Turnstile verification page — captcha passed, ready to verify](/images/bds-agentic-workflow/browser-signup-turnstile-verify.png) + +**3. Copy your API key.** The signup page detects verification and displays your `sk_live_...` key with your org ID and rate limits. Copy it now — the key is shown only once in this flow. + +![API key ready — copy and save](/images/bds-agentic-workflow/browser-signup-api-key-ready.png) + +Set `POWERLOOM_API_KEY` to this value in your shell, OpenClaw env, or MCP client config. The 2 free credits are already on your balance. + +:::tip Video — browser signup +Walkthrough: **[Free API key for BDS: Browser Signup](https://www.youtube.com/watch?v=5J_xlRfb418)** ([BDS & Agents playlist](https://www.youtube.com/playlist?list=PLbymeirG9WMz3j7IRgrvZ9IW04e4hIgHK)). +::: + +## Path A — 🦞 OpenClaw one-shot (free key) + +:::tip Video — OpenClaw + free key +Walkthrough: **[Setup Openclaw with free BDS API key](https://www.youtube.com/watch?v=FxQ96bgoi5s)** ([BDS & Agents playlist](https://www.youtube.com/playlist?list=PLbymeirG9WMz3j7IRgrvZ9IW04e4hIgHK)). +::: + +![ClawHub card for the Powerloom Uniswap V3 timeseries data skill](/images/bds-agentic-workflow/clawhub-powerloom-bds-univ3-skill.png) + +### What you need + +- 🦞 An OpenClaw environment +- `node` (v20+) available in the agent's shell +- An `sk_live_...` from `bds-agent signup` (see the **Step 0** tip above — free, 2 credits, browser device flow, no wallet) +- Optional: Telegram bot token and chat ID for alert delivery (the prompt asks; "skip" is a valid answer) + +### Run the one-shot + +Paste the prompt below ([source on GitHub](https://github.com/powerloom/powerloom-bds-univ3/blob/main/references/09-openclaw-one-shot-free-key.md)) as a single message to OpenClaw. The agent **first asks you in chat** for two inputs — your `sk_live_...` and your Telegram dispatch decision — then installs the skill, wires the API key into OpenClaw config, and creates a Whale Radar cron job. **No wallet, no on-chain payment, no private key.** + +``` +Install the skill "🦄 Powerloom Uniswap V3 timeseries data" (powerloom-bds-univ3) from ClawHub. +After install, run npm install in the skill directory. + +I already have a Powerloom API key (sk_live_...) from `bds-agent signup` — 2 free credits, no wallet needed. Use that key directly. Do NOT run `scripts/signup-pay.mjs`. Do NOT ask for a private key, RPC URL, plan id, chain id, or token symbol. + +**REQUIRED INPUTS — gather BOTH from me in chat BEFORE you install the skill, wire any env, or create any cron job. STOP and ask if either is missing. Do NOT proceed to step 1 below until both are resolved. Asking me for any of these AFTER creating the cron is a failure mode — re-ask BEFORE cron creation.** + +a. **Powerloom API key** — paste your `sk_live_...` from `bds-agent signup`. If you don't have one yet, run `bds-agent signup` first (free, 2 credits, browser device flow) and come back. Do not invent or guess a key. + +b. **Telegram alerts** — ask explicitly: "Do you want Telegram alerts for whale swaps? If yes, paste your `POWERLOOM_TELEGRAM_BOT_TOKEN` and `POWERLOOM_TELEGRAM_CHAT_ID`. If no, type 'skip' and alerts will print to stdout only." + - If I give you both tokens → use them in the cron env. + - If I explicitly say "skip" / "no Telegram" / "stdout only" → proceed without TG envs and tell me clearly in the final cron summary that alerts will only print to stdout (the cron `--no-deliver` flag means OpenClaw's chat won't see them either). + - Do NOT silently default to "stdout is fine." Either both TG values, or an explicit opt-out. + - Do NOT look up TG credentials from any OpenClaw config source (`channels.telegram`, `openclaw.json`, etc.) — only use what I paste in this conversation. + +Once (a) and (b) are resolved in chat, proceed with the steps below. + +Set up a whale radar cron with the existing key. Details: + +1. Set the gathered envs in OpenClaw under `skills.entries.powerloom-bds-univ3.env.*`: + - `POWERLOOM_API_KEY` — required, from input (a). + - `POWERLOOM_TELEGRAM_BOT_TOKEN`, `POWERLOOM_TELEGRAM_CHAT_ID` — set both **only** if I gave you values in input (b). If I opted out, leave both unset; `whale-cron.mjs` prints alerts to stdout in that case (still includes the verification block). + +2. Pre-flight: `node scripts/ensure-credits.mjs` to confirm the key is valid and balance is non-zero (free signup grants 2 credits). + +3. `scripts/whale-cron.mjs` should: + - Use `lib/mcp.mjs` `callTool()` for all MCP calls (SSE handshake, not raw HTTP). + - Use `lib/trade-utils.mjs` `flattenAllTradesFromSnapshot()` to parse the snapshot. + - Response shape: `result.data.tradeData` = `{ poolAddr: { trades: [...] } }`. + - Resolve pool token names with `bds_mpp_pool_pool_address_metadata` per unknown pool; + cache in `.powerloom/pool-metadata-cache.json` (override with `WHALE_CRON_POOL_CACHE`). + - Verification: `result.data.verification` = `{ cid, epochId, projectId }` — surface in alerts (e.g. ✅). + - Telegram: `parse_mode: MarkdownV2` with full escaping, or plain-text fallback. + - If the script is missing or broken, rebuild using the skill's `lib/*` helpers only. + +4. Create an OpenClaw cron job — only after REQUIRED INPUTS (a) and (b) above are fully resolved in chat: + - Name: e.g. "Whale Radar" + - Schedule: e.g. every 15s (`--every 15s` with `openclaw cron add`) + - Timeout: 90s (`--timeout 90000`) + - Session: isolated (`--session isolated`) + - Flags: `--no-deliver`, `--light-context` + - Message: a shell command that `cd`s to the skill dir, sets env inline, then runs `node scripts/whale-cron.mjs`. Required env: `POWERLOOM_API_KEY=`, `POWERLOOM_BDS_MCP_CALL_TIMEOUT_MS=120000`, `WHALE_CRON_THRESHOLD=10000`. Telegram env only if input (b) yielded values. + - Do NOT consult OpenClaw `channels.telegram`, `openclaw.json`, or any other config source for Telegram credentials — only use what I pasted in chat for input (b). + +5. Before the first run: `rm -f .powerloom/whale-cron-state.json` if you need a clean epoch cursor. + Keep `.powerloom/pool-metadata-cache.json` across reinstalls unless debugging metadata. + +6. Set WHALE_CRON_STATE_FILE and WHALE_CRON_POOL_CACHE to paths outside the skill directory (e.g. in the workspace root) so they survive `openclaw skills install --force`. + +Constraints: +- This flow uses an existing `sk_live_...` key only. Do NOT initiate any on-chain payment, and do NOT prompt for wallet credentials. +- Telegram credentials must be gathered from me in chat (or explicit opt-out received) BEFORE the cron job is created. +- Use `bds_mpp_snapshot_allTrades` only (bounded batches). Do not add streaming trade tools. +- Do NOT run the tracker as a background process — use OpenClaw cron only. +- Do NOT show "???" for unknown tokens — resolve via the metadata tool or show the address. +``` + +### What the agent does + +OpenClaw works through the prompt sequentially. The key automated steps: + +**Step 1 — Inputs in chat.** The agent's first response is a question: + +``` +Got it. Let me gather the required inputs first. + +(a) API key: paste your sk_live_... from `bds-agent signup`. +(b) Telegram alerts: Do you want Telegram alerts for whale swaps? + If yes, paste POWERLOOM_TELEGRAM_BOT_TOKEN and POWERLOOM_TELEGRAM_CHAT_ID. + If no, type 'skip' and alerts will print to stdout only. +``` + +You paste the key, then either both Telegram values or `skip`. The agent does not proceed past this gate until both inputs are resolved. + +![OpenClaw input-gathering response](/images/bds-agentic-workflow/openclaw-cronjob-setup-input-tg.png) + +**Step 2 — Skill install + env wiring.** Once inputs are in, the agent installs `powerloom-bds-univ3` from ClawHub, runs `npm install` in the skill directory, and wires the env under `skills.entries.powerloom-bds-univ3.env.*`: + +- `POWERLOOM_API_KEY` — your `sk_live_...` +- `POWERLOOM_TELEGRAM_BOT_TOKEN`, `POWERLOOM_TELEGRAM_CHAT_ID` — only if you provided them + +No wallet/plan envs are touched. `signup-pay.mjs` is not run. + +*When setup via the free-key flow:* +![OpenClaw automated agent setup](/images/bds-agentic-workflow/openclaw-automated-install-existing-api-key.png) + +*When setup via the wallet-funded paid plan:* +![OpenClaw automated agent setup](/images/bds-agentic-workflow/openclaw-automated-install.png) + +**Step 3 — Cron created.** `openclaw cron add` registers the Whale Radar cron. From that point, every 15 seconds the cron fires `node scripts/whale-cron.mjs`, which fetches a finalized all-trades snapshot via `bds_mpp_snapshot_allTrades`, filters swaps above the configured USD threshold, and dispatches alerts (Telegram if envs are set, otherwise stdout — both include the verification block). + +![OpenClaw whale cron setup completed](/images/bds-agentic-workflow/openclaw-cronjob-setup-complete.png) + +Each alert carries the `verification` block from `result.data.verification`: + +``` +🐳 Whale alert: WBTC → USDC $245,000 + +Pool: 0x99ac8cA7087fA4A2A1FB6357269965A2014ABc17 +Epoch: 24785719 +✅ Verified on-chain + cid: bafkrei... + project: allTradesSnapshot:0x26c4... +``` + +![OpenClaw whale cron alert](/images/bds-agentic-workflow/openclaw-cronjob-whale-alert.png) + +### Need more credits? Wallet-funded upgrade + +The 2 free credits cover roughly 14400 epochs of metered data (1 credit = 7200 epochs). When you want a bigger plan, two upgrade paths: + +**Option 1 — Top-up the same key.** Run `bds-agent credits topup` (or `node scripts/credits-topup.mjs` from the skill repo) against your existing `sk_live_...`. See [Top-up](./metering-and-api-keys.md#top-up). + +**Option 2 — Run the wallet-funded one-shot.** Paste the [`08-openclaw-one-shot.md`](https://github.com/powerloom/powerloom-bds-univ3/blob/main/references/08-openclaw-one-shot.md) prompt instead of the free-key one. The agent uses the same input-gathering pattern (asks for your private key + Telegram dispatch in chat upfront), then runs `scripts/signup-pay.mjs` to broadcast a native $POWER transfer on chain 7869 and claim a fresh `sk_live_...` for the `launch_10_pl_power_cgt` plan (10 credits + 2 bonus = 12 total). + +A successful pay-signup looks like: + +``` +[signup-pay] payment_kind=native_value → send native/CGT value to recipient +Submitted tx 0x4a3f... +{ + "api_key": "sk_live_...", + "org_id": "org_...", + "credit_balance": 100, + "plan_id": "launch_10_pl_power_cgt", + "tx_hash": "0x4a3f...", + "chain_id": 7869, + "notice": "Export: export POWERLOOM_API_KEY= (do not commit keys)." +} +``` + +The wallet-funded prompt sets all six env vars under `skills.entries.powerloom-bds-univ3.env.*`: `POWERLOOM_EVM_PRIVATE_KEY`, `POWERLOOM_EVM_RPC_URL`, `POWERLOOM_EVM_CHAIN_ID`, `POWERLOOM_PLAN_ID`, `POWERLOOM_TOKEN_SYMBOL`, `POWERLOOM_API_KEY`. Use a **burner wallet only** for the private key. + +### Troubleshooting + +| Symptom | Fix | +|---------|-----| +| `401` on first cron run | `POWERLOOM_API_KEY` was not set in the cron env — verify it is wired under `skills.entries.powerloom-bds-univ3.env.*` and the cron message exports it inline | +| Cron ticking with stdout-only alerts after you wanted Telegram | Telegram envs were not gathered before cron creation. Edit the cron message env to add `POWERLOOM_TELEGRAM_BOT_TOKEN` + `POWERLOOM_TELEGRAM_CHAT_ID`, or recreate the cron via the same prompt — the input-gathering gate will re-ask | +| Timeout on `bds_mpp_snapshot_allTrades` | Set `POWERLOOM_BDS_MCP_CALL_TIMEOUT_MS=120000` in the cron message; the 60s default may be too short under epoch backlog | +| "???" token names | Pool metadata cache not built yet; first run resolves all unknown pools via `bds_mpp_pool_pool_address_metadata` | +| `payment_mismatch` from `signup-pay.mjs` (wallet-funded upgrade only) | Ensure `payment_kind === "native_value"` branch uses `sendTransaction({ to, value })` not `token.transfer()`. This is already handled in the shipped script. | + +--- + +## Path B — 🐍 `bds-agent` CLI + +:::tip Full reference +This is the abbreviated quickstart. For the complete operator guide — every command, every screenshot, environment variables, profile precedence, recipe schema, MCP stdio mode, troubleshooting — see [`Headless Agentic CLI for BDS`](./bds-agent-headless.md). +::: + +### What you need + +- Python 3.12+ with **`pip`** or **[`uv`](https://docs.astral.sh/uv/)** (optional: a venv when using `pip`) +- (Optional, for `signup-pay`) A funded EVM wallet on chain 7869 + +### Install + +```bash +pip install bds-agent +``` + +Or from PyPI with uv (isolated tool env, like pipx): + +```bash +uv tool install bds-agent +``` + +`bds-agent` should be on your `PATH` after install (for example `~/.local/bin`). ([Full install options](./bds-agent-headless.md#install) — `pip` / `uv tool install`, or clone + `uv tool install .` for contributors and bundled `examples/`.) + +### Sign up — start with the free 2 credits + +```bash +bds-agent signup +``` + +The CLI prompts for your email and agent name, then waits while you complete browser verification: + +``` +────────── BDS agent signup ────────── +Email user@example.com · Agent my-bds-agent + +╭── Verify your device ──────────────────────────────────╮ +│ Open this link in your browser │ +│ │ +│ https://bds-metering.powerloom.io/verify?token=... │ +│ │ +│ Enter this code when the page asks │ +│ ╭──────────────╮ │ +│ │ ABCD-1234 │ │ +│ ╰──────────────╯ │ +╰── Complete verification in browser, then return here ──╯ + +⣾ Waiting for you to finish in the browser… (Ctrl+C to cancel) +``` + +After verification, the `sk_live_...` API key is saved to `~/.config/bds-agent/profiles/.json` and **2 free credits are credited** to your balance — enough to start hitting the metered BDS endpoints. ([CLI signup reference](./bds-agent-headless.md#cli-signup-free--2-credits-included)) + +### Configure BDS defaults + +```bash +bds-agent config init # writes bds_base_url, catalog URL, verification defaults +bds-agent credits balance # confirm key is live and balance is non-zero +``` + +`config init` output: + +``` +╭── ✓ Defaults applied ─────────────────────────────────────────────────────╮ +│ Profile ~/.config/bds-agent/profiles/default.json │ +│ │ +│ Setting Value │ +│ Snapshotter base URL https://bds.powerloom.io/api │ +│ Endpoints catalog (JSON) https://raw.githubusercontent.com/... │ +│ Powerloom chain JSON-RPC https://rpc-v2.powerloom.network/ │ +│ ProtocolState contract 0x1d0e010Ff11b781CA1dE34BD25a0037... │ +│ DataMarket contract 0x26c44e5CcEB7Fe69Cffc933838CF402... │ +╰────────────────────────────────────────────────────────────────────────────╯ +``` + +### Set up an LLM backend (for `query` and `create`) + +```bash +bds-agent llm setup anthropic +bds-agent llm use anthropic +bds-agent llm ping +``` + +Supported backends: `anthropic`, `openai`, `ollama` (local), `local` (GGUF), `apfel` (Apple Intelligence). `bds-agent run` on existing recipes does **not** require an LLM. ([LLM backend reference](./bds-agent-headless.md#llm-backend-for-query-and-create)) + +### Run a query or a recipe + +**Natural language query** (no MCP server needed): + +```bash +bds-agent query "Top 5 Uniswap V3 swaps by USD volume in the last epoch" --execute +``` + +**Generate a YAML recipe from a description:** + +```bash +bds-agent create "Alert when any single swap exceeds \$100k" +``` + +**Execute a pre-packaged recipe** — [`examples/dex-alerts.yaml`](https://github.com/powerloom/bds-agent-py/blob/main/examples/dex-alerts.yaml) streams indexed DEX swaps and applies `min_usd` and `volume_spike` rules. From a PyPI install, download it once then run: + +```bash +curl -sLO https://raw.githubusercontent.com/powerloom/bds-agent-py/main/examples/dex-alerts.yaml +bds-agent run dex-alerts.yaml --profile default +``` + +Set `verify: true` in any recipe to enable on-chain CID verification per batch. ([Recipe reference](./bds-agent-headless.md#consuming-data-query-create-run)) + +### Need more credits? Pay-signup with a funded wallet + +```bash +bds-agent credits plans +bds-agent credits setup-evm \ +# prompts for EVM_PRIVATE_KEY, EVM_RPC_URL, EVM_CHAIN_ID + +bds-agent signup-pay \ + --plan-id launch_10_pl_power_cgt \ + --chain-id 7869 \ + --token-symbol POWER +``` + +The CLI prints the quote, asks for confirmation, then broadcasts and claims: + +``` +Pay-signup quote plan=launch_10_pl_power_cgt chain_id=7869 + Send 10000000000000000000 wei (chain native / CGT) to treasury 0x... + From: 0x (expires: 2026-04-27T14:30:00Z) +Broadcast native transfer now? [Y/n]: +tx 0x4a3f... — claiming API key… + +╭── Ready ──────────────────────────────────────────────╮ +│ ✓ You are signed in. API key saved securely. │ +│ Profile default │ +│ Organization org_... │ +│ Credentials ~/.config/bds-agent/profiles/default.json│ +╰───────────────────────────────────────────────────────╯ +``` + +The `launch_10_pl_power_cgt` plan costs 50 $POWER for 10 credits at the time of writing. Combined with the 2 bonus credits granted on signup, you'll see **12 credits** on your balance. ([Pay-signup reference](./bds-agent-headless.md#automated-pay-signup-no-browser-wallet-only)) + +--- + +## Path C — ⚡ Aeon fork (GitHub Actions) + +Run verified whale radar on a schedule using [Aeon](https://github.com/aaronjmars/aeon) + the [aeon-skills](https://github.com/powerloom/aeon-skills) package. Python prefetch owns BDS fetch and epoch cursor; the LLM only dispatches pre-built alerts via `./notify`. No VPS, no MCP server, no cron server. + +**Full setup guide:** [`Aeon Whale Radar (GitHub Actions)`](./aeon-whale-radar.md) + +### What you need + +- A GitHub account +- `sk_live_...` from Step 0 above (2 free credits) +- At least one notify channel (Telegram bot token + chat ID, Discord webhook, or Slack webhook) + +### Quick summary + +1. **Fork** [Aeon](https://github.com/aaronjmars/aeon) and enable Actions in fork Settings +2. **Install** the skill: `git clone https://github.com/powerloom/aeon-skills.git` then run `install-into-aeon.sh` against your fork +3. **Enable** in `aeon.yml`: add `powerloom-bds: { enabled: true, schedule: "*/5 * * * *" }` under `skills:` +4. **Set secrets** in fork Settings: `BDS_API_KEY` (required), `TELEGRAM_BOT_TOKEN` + `TELEGRAM_CHAT_ID` (for TG alerts), or `DISCORD_WEBHOOK_URL` (for Discord) +5. **Commit and push**, then verify in Actions tab + +First healthy run shows `Fetched N snapshot(s)` with `trades > 0`. Subsequent runs catch up block-by-block (max 100 per run). + +:::tip +Each step has screenshots and detailed explanations in the [full setup guide](./aeon-whale-radar.md). Start there if this is your first time setting up Aeon. +::: + + +--- + +## Next steps + +- Understand the credit model: [`Metering & API Keys`](./metering-and-api-keys.md) +- MCP tool reference and other recipes: [`OpenClaw & Hosted MCP`](./openclaw-and-mcp.md) +- Aeon whale radar (GitHub Actions): [`Aeon Whale Radar`](./aeon-whale-radar.md) +- Headless YAML recipes and LLM backends: [`Headless CLI (`bds-agent`)`](./bds-agent-headless.md) +- Verify a payload on-chain: [`Verification in Agent Workflows`](./verification-in-agents.md) diff --git a/docs/agents-and-bds/verification-in-agents.md b/docs/agents-and-bds/verification-in-agents.md new file mode 100644 index 00000000..fcf4ba50 --- /dev/null +++ b/docs/agents-and-bds/verification-in-agents.md @@ -0,0 +1,85 @@ +--- +sidebar_position: 7 +title: Verification in Agent Workflows +--- + +# Verification in Agent Workflows + +Every BDS response from a supported route includes a `verification` object. This object gives the agent the information needed to confirm that the payload maps to a CID finalized on-chain by the DSV network — without trusting the API operator. + +This is the trust hook for agent consumers. Alerts and analytics derived from BDS data carry a cryptographic receipt, not just an API response. + +## The `verification` object + +BDS routes such as the all-trades snapshot and the SSE stream attach `verification` alongside the data: + +```json +{ + "epoch": 24785718, + "snapshot": { "...trade data..." }, + "verification": { + "cid": "bafkreib6h6au6hyv3hnx3wmbysu4lcoouah2yicst3nwnwndpcw2yxxrta", + "epochId": 24785718, + "projectId": "allTradesSnapshot:0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a:mainnet-BDS_MAINNET_UNISWAPV3-ETH", + "protocolState": "0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a", + "dataMarket": "0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a" + } +} +``` + +## Checking the receipt + +Call `ProtocolState.maxSnapshotsCid(dataMarket, projectId, epochId)` on the Powerloom anchor chain. If the returned CID matches `verification.cid`, the API served the finalized content reference for that project and epoch. + +This read goes to the Powerloom anchor chain (`https://rpc-v2.powerloom.network`), not to Ethereum mainnet. + +## Checking via MCP: `verify_data_provenance` + +The hosted MCP server (`bds-mcp-server`) and the local stdio MCP server (`bds-agent mcp`) both expose a `verify_data_provenance` tool. Pass the fields from the `verification` object: + +```json +{ + "cid": "bafkrei...", + "epoch_id": 24785718, + "project_id": "allTradesSnapshot:0x26...", + "data_market": "0x26..." +} +``` + +The tool executes the `eth_call` server-side and returns whether the CID matches. In `powerloom-bds-univ3`, the DeFi Analyst recipe calls this on a configurable cadence and includes the result in each report. + +## Checking in `bds-agent run`: `verify: true` + +For headless recipe execution, set `verify: true` in the YAML recipe. The runner calls `maxSnapshotsCid` against `POWERLOOM_PROTOCOL_STATE` using the RPC at `POWERLOOM_RPC_URL` (or profile default set by `bds-agent config init`). A CID mismatch triggers a console warning and routes an alert with `rule: verification` to your configured sinks. + +```yaml +verify: true +``` + +No additional configuration is needed if you ran `bds-agent config init` — it writes the BDS mainnet defaults for `powerloom_rpc_url`, `powerloom_protocol_state`, and `powerloom_data_market`. + +## Including provenance in alerts + +Agent-emitted alerts should include the full `verification` block rather than summarizing it. Including the raw `cid`, `epochId`, and `projectId` lets downstream consumers run the same `maxSnapshotsCid` check themselves. Paraphrasing or omitting this data removes the verifiability property from the alert. + +An executable provenance note looks like: + +``` +Whale alert: $250,000 WBTC/USDC swap +epoch: 24785718 +cid: bafkreib6h6au6hyv3hnx3wmbysu4lcoouah2yicst3nwnwndpcw2yxxrta +project: allTradesSnapshot:0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a:mainnet-BDS_MAINNET_UNISWAPV3-ETH +verify: cast call 0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a \ + "maxSnapshotsCid(address,string,uint256)(string,uint8)" \ + 0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a \ + "allTradesSnapshot:0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a:mainnet-BDS_MAINNET_UNISWAPV3-ETH" \ + 24785718 \ + --rpc-url https://rpc-v2.powerloom.network +``` + +## Related pages + +- [`Verification Pattern`](/bds-data-market/verification-pattern) — the JSON contract and Python/TypeScript examples +- [`On-Chain Submission and Verification`](/dsv-mainnet/onchain-submission-and-verification) — the ProtocolState contract reference +- [`OpenClaw & Hosted MCP`](./openclaw-and-mcp.md) +- [`bds-agent` (headless CLI)](./bds-agent-headless.md) diff --git a/docs/bds-data-market/_category_.json b/docs/bds-data-market/_category_.json new file mode 100644 index 00000000..6583b202 --- /dev/null +++ b/docs/bds-data-market/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "BDS Data Market", + "position": 1.6, + "link": { + "type": "generated-index", + "description": "What the BDS market serves, how the snapshotter full node resolves finalized data, and how consumers verify responses back to DSV finalization." + } +} diff --git a/docs/bds-data-market/endpoint-catalog.md b/docs/bds-data-market/endpoint-catalog.md new file mode 100644 index 00000000..b566558c --- /dev/null +++ b/docs/bds-data-market/endpoint-catalog.md @@ -0,0 +1,103 @@ +--- +sidebar_position: 3 +title: Endpoint Catalog +--- + +import LiveTimeseriesMultiplier from '@site/src/components/LiveTimeseriesMultiplier'; +import LiveMeteredRoutesTable from '@site/src/components/LiveMeteredRoutesTable'; + +# Endpoint Catalog + +This page documents the current Uniswap V3 route surface served by the snapshotter full-node resolver and exposed publicly through metered `/mpp/...` routes. + +The **machine-readable** endpoint catalog (paths, HTTP methods, parameters, metering flags) for this BDS market is maintained in the compute package repo as [`api/endpoints.json`](https://github.com/powerloom/snapshotter-computes/blob/bds_eth_uniswapv3_core/api/endpoints.json) on branch [`bds_eth_uniswapv3_core`](https://github.com/powerloom/snapshotter-computes/tree/bds_eth_uniswapv3_core) in [`powerloom/snapshotter-computes`](https://github.com/powerloom/snapshotter-computes). That file is the single catalog source for the full-node resolver, [`powerloom/bds-mcp-server`](https://github.com/powerloom/bds-mcp-server), [`powerloom/powerloom-bds-univ3`](https://github.com/powerloom/powerloom-bds-univ3), and the headless [`bds-agent`](https://pypi.org/project/bds-agent/) CLI ([`powerloom/bds-agent-py`](https://github.com/powerloom/bds-agent-py)). Route handlers are implemented in the snapshotter full-node stack ([`powerloom/snapshotter-core-edge`](https://github.com/powerloom/snapshotter-core-edge) and related deployments). + +For public integrations, treat `/mpp/...` as the canonical consumption path. Some deployments may expose equivalent non-metered aliases without the `/mpp` prefix, but those are not the product surface for hosted BDS access. + +## Route families + +| Area | Metered route family | Purpose | +|------|----------------------|---------| +| Pool metadata | `/mpp/pool/{pool_address}/metadata` | Pool configuration and descriptive metadata | +| Token pools | `/mpp/token/{token_address}/pools` | Pools associated with a token | +| ETH price | `/mpp/ethPrice`, `/mpp/ethPrice/{block_number}` | ETH reference price snapshots | +| Token price in pool | `/mpp/token/price/{token}/{pool}`, `/mpp/token/price/{token}/{pool}/{block_number}` | Pool-scoped token pricing | +| Base all pools | `/mpp/snapshot/base_all_pools/{token_address}` | Base snapshot view across pools for a token | +| Base snapshot | `/mpp/snapshot/base/{pool_address}`, `/mpp/snapshot/base/{pool_address}/{block_number}` | Pool state snapshot | +| Trades snapshot | `/mpp/snapshot/trades/{pool_address}`, `/mpp/snapshot/trades/{pool_address}/{block_number}` | Trade snapshot for one pool | +| All trades | `/mpp/snapshot/allTrades`, `/mpp/snapshot/allTrades/{block_number}` | Aggregated all-trades snapshot | +| Streaming all trades | `/mpp/stream/allTrades`, `/mpp/stream/allTrades?from_epoch={block_number}` | SSE stream of finalized all-trades data | +| Token prices all | `/mpp/tokenPrices/all/{token_address}`, `/mpp/tokenPrices/all/{token_address}/{block_number}` | Token pricing across supported pools | +| Trade volume | `/mpp/tradeVolume/...`, `/mpp/tradeVolumeAllPools/...` | Volume views over windows and scopes | +| Pool trades window | `/mpp/poolTrades/...` | Windowed trade retrieval for a pool | +| Time series | `/mpp/timeSeries/...` | Derived time-series views | +| Daily active | `/mpp/dailyActiveTokens`, `/mpp/dailyActivePools` | Daily activity summaries | + +## Credit weights + +Metered routes are **not** billed at one flat rate. Each catalog entry has a **`credit_weight`** (multiplier on a base GET) or a **stream session** rate for SSE. For the credit plan summary (base unit, Pulse, agents), see [Metering & API Keys → How much each call costs](/agents-and-bds/metering-and-api-keys#how-much-each-call-costs). + +The table below is loaded live from [`api/endpoints.json`](https://github.com/powerloom/snapshotter-computes/blob/bds_eth_uniswapv3_core/api/endpoints.json) so it stays aligned when the catalog version or weights change: + + + +### Time series lookback multiplier + +`/mpp/timeSeries/...` is the one route whose cost is **not** captured by the static `credit_weight` alone. On top of its base weight of **5**, a **lookback multiplier** applies based on `time_interval` (how far back the window reaches). For real-time use, per-block `/mpp/token/price/.../{block_number}` is usually cheaper and more precise. + +The tiers are defined in the catalog (`billing_modifier` on the time series route) and load live below: + + + +So `/mpp/timeSeries/.../3600/144` (1-hour lookback) costs **5 × 4 = 20×** a weight-1 GET; a 24-hour window costs **640×** that base. The multiplier is keyed off `time_interval` (the lookback seconds), not `step_seconds`. + +## Core consumption patterns + +### Per-epoch snapshot read + +Use a snapshot route when you want a finalized response for a specific epoch or block. + +Examples: + +- `/mpp/snapshot/allTrades/{block_number}` +- `/mpp/snapshot/base/{pool_address}/{block_number}` +- `/mpp/snapshot/trades/{pool_address}/{block_number}` + +This is the primary consumption pattern for deterministic agent and application workflows. + +### Latest finalized read + +Use a route without the explicit epoch when you want the latest finalized result currently available from the full-node resolver. + +Examples: + +- `/mpp/snapshot/allTrades` +- `/mpp/ethPrice` + +These routes are convenient, but they still follow finalized-state availability rather than raw source-chain head state. + +### Streaming consumption + +Use `/mpp/stream/allTrades` when you want a long-lived feed of finalized all-trades events. This is served over Server-Sent Events and can optionally resume from a given epoch with `from_epoch`. + +## Authentication and metering + +In hosted BDS deployments, `/mpp/...` routes are protected and metered by [`powerloom/bds-agenthub-billing-metering`](https://github.com/powerloom/bds-agenthub-billing-metering). + +The current product direction is: + +- **Bearer API key** authentication, +- credit deduction before the route is served, +- optional SSE access through the same metered surface. + +For public consumers, the main practical rule is simple: if you are integrating with BDS as a product, target the `/mpp/...` routes and expect authenticated access. + +## Scope note + +This catalog documents the current Uniswap V3 BDS market surface. As additional BDS markets launch, this section should either grow market-specific catalogs or split them into separate per-market references. + +## Related pages + +- [`What BDS Is`](./what-bds-is.md) +- [`Snapshotter Full Node as Resolver`](./snapshotter-full-node-as-resolver.md) +- [`Verification Pattern`](./verification-pattern.md) diff --git a/docs/bds-data-market/snapshotter-full-node-as-resolver.md b/docs/bds-data-market/snapshotter-full-node-as-resolver.md new file mode 100644 index 00000000..843350f2 --- /dev/null +++ b/docs/bds-data-market/snapshotter-full-node-as-resolver.md @@ -0,0 +1,92 @@ +--- +sidebar_position: 2 +title: Snapshotter Full Node as Resolver +--- + +# Snapshotter Full Node as Resolver + +The snapshotter full node is the serving layer for BDS. It does more than proxy IPFS content and more than mirror contract state. It resolves finalized protocol outputs into application-ready HTTP responses. + +**Implementation:** [`powerloom/snapshotter-core-edge`](https://github.com/powerloom/snapshotter-core-edge) + +## What the resolver is doing + +At request time, the full node combines four inputs: + +- **anchor-chain state** through `ProtocolState`, +- **Redis caches** for finalized epochs and CIDs, +- **IPFS content** for finalized snapshot payloads, +- and **compute-specific parsing logic** for the response shape expected by the route. + +That is why BDS should not be understood as "cached IPFS." IPFS stores the finalized payload. The full node resolves which payload is canonical for a project and epoch, retrieves it efficiently, and serves it in a structured form. + +## Resolution path + +```mermaid +flowchart LR + C[Client or Agent] --> API["Snapshotter full-node resolver"] + API --> R["Redis caches"] + API --> PS["ProtocolState on Powerloom mainnet"] + API --> IPFS["IPFS finalized payload"] + API --> OUT["JSON or SSE response"] + + PS --> API + R --> API + IPFS --> API +``` + +## Why Redis, chain state, and IPFS are all involved + +The resolver path exists because no single layer is enough by itself: + +- **ProtocolState** is the canonical source for finalized project CIDs and epochs. +- **Redis** reduces repeated contract and payload lookups by caching finalized results and recently accessed data. +- **IPFS** stores the actual finalized payload content. +- **Route handlers** turn that content into route-specific JSON responses. + +The full node acts as the market resolver: a request such as "give me the all-trades snapshot for this epoch" becomes a lookup for the correct project ID, finalized CID, cached payload, and response shape. + +## What happens on a snapshot request + +For a project-and-epoch read, the full node: + +1. determines the relevant project ID for the endpoint, +2. resolves the finalized CID for that project and epoch, +3. uses Redis when the CID or epoch metadata is already cached, +4. falls back to anchor-chain reads when the cache is cold, +5. fetches the finalized payload from IPFS, +6. parses the payload into the route's response model, +7. returns the result over HTTP or SSE. + +In the current code path, `get_project_epoch_snapshot(...)` is the critical resolver function behind this behavior. + +## Why this matters for product consumers + +This design gives the consumer three properties at once: + +- **finalized protocol data**, not ad hoc off-chain indexing, +- **low-latency reads** through cache-aware resolution, +- **application-ready response shapes** instead of raw payload decoding. + +That is the reason BDS can feel like a normal API while still remaining tied to DSV finalization. + +## More than single-epoch reads + +The same full-node pattern supports: + +- latest snapshot lookups, +- time-series windows, +- pool and token-derived analytics, +- and streaming of finalized events. + +These higher-level routes are still rooted in finalized underlying snapshots. The serving layer is reusable because the resolver is reusable. + +## Relationship to Core API + +Powerloom's Core API documentation explains how a snapshotter full node acts as the HTTP resolver for finalized protocol state. BDS is the specialized market-facing version of that pattern for the live Uniswap V3 data market. + +## Related pages + +- [`What BDS Is`](./what-bds-is.md) +- [`On-Chain Submission and Verification`](/dsv-mainnet/onchain-submission-and-verification) +- [`Verification Pattern`](./verification-pattern.md) diff --git a/docs/bds-data-market/verification-pattern.md b/docs/bds-data-market/verification-pattern.md new file mode 100644 index 00000000..3e162c5a --- /dev/null +++ b/docs/bds-data-market/verification-pattern.md @@ -0,0 +1,143 @@ +--- +sidebar_position: 4 +title: Verification Pattern +--- + +# Verification Pattern + +BDS responses can include enough metadata for the consumer to verify that the API payload matches the snapshot CID finalized by the Powerloom protocol. + +This is the core trust property of the market. The API is convenient, but it is not meant to be the root of trust. + +## Verification object + +For supported routes such as the all-trades snapshot and SSE stream, BDS returns a `verification` object alongside the data: + +```json +{ + "epoch": 24785718, + "snapshot": { "...trade data..." }, + "verification": { + "cid": "bafkreib6h6au6hyv3hnx3wmbysu4lcoouah2yicst3nwnwndpcw2yxxrta", + "epochId": 24785718, + "projectId": "allTradesSnapshot:0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a:mainnet-BDS_MAINNET_UNISWAPV3-ETH", + "protocolState": "0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a", + "dataMarket": "0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a" + } +} +``` + +## What the check proves + +The consumer can call: + +`ProtocolState.maxSnapshotsCid(dataMarket, projectId, epochId)` + +If the returned CID matches `verification.cid`, the API served the same finalized content reference recorded by the protocol for that project and epoch. + +This proves: + +- the response maps back to finalized protocol state, +- the CID the API returned is not arbitrary, +- and the operator is not asking the consumer to trust a private database as the source of truth. + +## Contract pair for the live BDS market + +| Contract | Address | +|----------|---------| +| `ProtocolState` | `0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a` | +| `DataMarket` | `0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a` | + +RPC reads for verification should go to the Powerloom anchor chain where `ProtocolState` is deployed, not to Ethereum mainnet. + +## Python example + +```python +from web3 import Web3 + +PROTOCOL_STATE_ABI = [ + { + "name": "maxSnapshotsCid", + "type": "function", + "inputs": [ + {"name": "dataMarket", "type": "address"}, + {"name": "projectId", "type": "string"}, + {"name": "epochId", "type": "uint256"}, + ], + "outputs": [ + {"name": "", "type": "string"}, + {"name": "", "type": "uint8"}, + ], + "stateMutability": "view", + } +] + +w3 = Web3(Web3.HTTPProvider("https://rpc-v2.powerloom.network")) +contract = w3.eth.contract( + address=Web3.to_checksum_address("0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a"), + abi=PROTOCOL_STATE_ABI, +) + +verification = { + "cid": "bafkrei...", + "epochId": 24785718, + "projectId": "allTradesSnapshot:0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a:mainnet-BDS_MAINNET_UNISWAPV3-ETH", + "dataMarket": "0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a", +} + +on_chain_cid, status = contract.functions.maxSnapshotsCid( + verification["dataMarket"], + verification["projectId"], + verification["epochId"], +).call() + +assert on_chain_cid == verification["cid"] +print("verified", status) +``` + +## TypeScript example + +```ts +import { ethers } from "ethers"; + +const abi = [ + "function maxSnapshotsCid(address dataMarket, string projectId, uint256 epochId) view returns (string, uint8)", +]; + +const provider = new ethers.JsonRpcProvider("https://rpc-v2.powerloom.network"); +const contract = new ethers.Contract( + "0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a", + abi, + provider, +); + +const verification = { + cid: "bafkrei...", + epochId: 24785718, + projectId: + "allTradesSnapshot:0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a:mainnet-BDS_MAINNET_UNISWAPV3-ETH", + dataMarket: "0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a", +}; + +const [onChainCid, status] = await contract.maxSnapshotsCid( + verification.dataMarket, + verification.projectId, + verification.epochId, +); + +if (onChainCid !== verification.cid) { + throw new Error("verification mismatch"); +} + +console.log("verified", status); +``` + +## Operational note + +`lastFinalizedSnapshot` is not the right read for payload verification. It gives you the latest finalized epoch for a project, not the finalized CID for a specific epoch. For provenance checks, the canonical read is `maxSnapshotsCid(...)`. + +## Related pages + +- [`On-Chain Submission and Verification`](/dsv-mainnet/onchain-submission-and-verification) +- [`What BDS Is`](./what-bds-is.md) +- [`Snapshotter Full Node as Resolver`](./snapshotter-full-node-as-resolver.md) diff --git a/docs/bds-data-market/what-bds-is.md b/docs/bds-data-market/what-bds-is.md new file mode 100644 index 00000000..49895495 --- /dev/null +++ b/docs/bds-data-market/what-bds-is.md @@ -0,0 +1,127 @@ +--- +sidebar_position: 1 +title: What Is BDS? +--- + +# What is BDS? + +![BDS consumption path from DSV-finalized data through a full-node resolver to multiple consumption surfaces](/images/bds-agentic-workflow/bds-resolver-use-cases-web.jpg) + +Blockchain Data Services (BDS) is the first production data market running on Powerloom's decentralized sequencer-validator network. + +For the current mainnet deployment, the market is Uniswap V3 on Ethereum mainnet. Snapshotter nodes produce market-specific snapshots, DSV validators finalize those snapshots into canonical CIDs, and a participating snapshotter full node serves the HTTP API that consumers use today. + +That full node is the resolver for the market. It translates higher-level API requests into the lower-level protocol objects that Powerloom actually finalizes: project IDs, epochs, finalized CIDs, and IPFS-addressed payloads. It also maintains cache-aware serving paths so applications such as the hosted Uniswap V3 frontend at [`bds.powerloom.io`](https://bds.powerloom.io) and agent workflows can consume the data without resolving every CID manually. + +Helpful glossary: + +- **BDS data market**: the live Uniswap V3 market on Powerloom, including snapshotter lite nodes, the full-node resolver, DSV validators, and on-chain market state. +- **BDS API**: the HTTP surface currently served by a snapshotter full node participating in that market. +- **Metered `/mpp/...` routes**: the hosted product surface for API-key-based usage, agents, and applications. +- **Agent access layer**: OpenClaw, hosted MCP, and the `bds-agent` CLI (`pip install bds-agent` or `uv tool install bds-agent`) that consume the same metered routes. + +> [!NOTE] Head over to the [Agents & BDS Overview](/agents-and-bds/overview) for a more detailed explanation of how agents consume BDS data through metered access, OpenClaw/MCP, or the headless CLI, and how the BDS API fits into the overall BDS data market. + + +## What the market serves today + +The current BDS mainnet market is focused on Uniswap V3 on Ethereum mainnet. The full-node resolver currently serves: + +- per-epoch snapshots, +- all-trades snapshots, +- base snapshots, +- trades snapshots, +- token and pool metadata, +- trade volume, +- time-series views, +- and daily-active summaries. + +The hosted metered product surface is exposed under `/mpp/...` routes. Those routes are the primary public consumption path for hosted access, agents, and API-key-based usage. + +## Why BDS exists + +DSV solves protocol-side finalization. The BDS full-node resolver solves product-side consumption for the live market. + +That means the full-node resolver is responsible for turning: + +- finalized project CIDs, +- IPFS-addressed payloads, +- and market-specific compute outputs + +into an interface that applications and agents can query directly. + +Without that layer, consumers would have to: + +- query contract state directly, +- resolve CIDs themselves, +- fetch and decode raw payloads from IPFS, +- and reconstruct useful application-level structures for every request. + +The resolver keeps the verification path intact while removing that operational burden from the consumer. + +It also reflects a broader product shift for Powerloom. Instead of exposing only fixed dashboard-style surfaces, BDS turns finalized protocol data into a reusable market that can serve: + +- direct HTTP integrations, +- agent frameworks, +- MCP-backed toolchains, +- and verification-aware applications that need structured DeFi data without depending on a proprietary indexer. + +## Current market scope + +The current BDS deployment is intentionally opinionated. + +- **Source chain:** Ethereum mainnet +- **Current market:** Uniswap V3 +- **Anchor chain:** Powerloom mainnet, where `ProtocolState` and the market contract store finalized references +- **Resolver / serving layer:** a snapshotter full node participating in the BDS market +- **Primary hosted consumption path:** `/mpp/...` HTTP routes with Bearer-authenticated metering + +This should be read as the first live market, not the limit of the protocol. The broader Powerloom model is still market-oriented: BDS is one concrete market implementation over the DSV finalization layer. + +The current deployment starts with Uniswap V3, but the market model is not limited to static reference feeds. The protocol and serving model are designed so new data markets can be added without turning every new market into a one-off product stack. + +## Implementation repositories + +| Component | Repository | +|-----------|------------| +| Snapshotter full node / BDS resolver | [`powerloom/snapshotter-core-edge`](https://github.com/powerloom/snapshotter-core-edge) | +| Snapshotter lite node | [`powerloom/snapshotter-lite-v2`](https://github.com/powerloom/snapshotter-lite-v2) | +| DSV validator network | [`powerloom/snapshot-sequencer-validator`](https://github.com/powerloom/snapshot-sequencer-validator) | +| Metering, credits, API keys, pay-signup | [`powerloom/bds-agenthub-billing-metering`](https://github.com/powerloom/bds-agenthub-billing-metering) | +| Hosted MCP server | [`powerloom/bds-mcp-server`](https://github.com/powerloom/bds-mcp-server) | +| OpenClaw skill and recipes | [`powerloom/powerloom-bds-univ3`](https://github.com/powerloom/powerloom-bds-univ3) | +| Headless agent CLI | [`bds-agent` on PyPI](https://pypi.org/project/bds-agent/) · [`powerloom/bds-agent-py`](https://github.com/powerloom/bds-agent-py) | + +## Response model + +BDS routes expose two broad kinds of outputs: + +1. **Direct snapshot reads**: fetch one finalized snapshot or a stream of finalized snapshots for a project and epoch. +2. **Derived views**: compute-friendly responses such as time series, trade volume windows, token prices, or pool activity, all built from finalized underlying snapshot data. + +For the all-trades path, BDS also includes a `verification` object in the response so the consumer can independently check that the returned payload maps back to the CID finalized on-chain. + +## Why the market is useful + +BDS turns DSV from protocol infrastructure into something directly usable by: + +- dashboards, +- analytics systems, +- monitoring agents, +- trading and alerting workflows, +- and any application that needs structured, finalized market data without trusting a proprietary indexer. + +The value proposition is therefore not only "API access." It is: + +- dynamic market data, +- structured responses derived from finalized snapshots, +- independent verifiability, +- and a serving surface that can scale from one query to large numbers of agent consumers. + +## Related pages + +- [`Why DSV Exists`](/dsv-mainnet/why-dsv-exists) +- [`Snapshotter Full Node as Resolver`](./snapshotter-full-node-as-resolver.md) +- [`Endpoint Catalog`](./endpoint-catalog.md) +- [`Verification Pattern`](./verification-pattern.md) +- [`Agents & BDS — Overview`](/category/agents--bds) — how agents consume BDS data through metered access, OpenClaw/MCP, or the headless CLI diff --git a/docs/build-with-powerloom/_category_.json b/docs/build-with-powerloom/_category_.json index 0c6d5678..22a5e041 100644 --- a/docs/build-with-powerloom/_category_.json +++ b/docs/build-with-powerloom/_category_.json @@ -3,6 +3,6 @@ "position": 2, "link": { "type": "generated-index", - "description": "Build robust Web3 Data applications with powerloom. Explore existing implementations." + "description": "Build on Powerloom's decentralized data network and consume verified data through current BDS access paths." } } \ No newline at end of file diff --git a/docs/build-with-powerloom/devnet/FAQs.md b/docs/build-with-powerloom/devnet/FAQs.md deleted file mode 100644 index 74921578..00000000 --- a/docs/build-with-powerloom/devnet/FAQs.md +++ /dev/null @@ -1,102 +0,0 @@ -### What is Devnet? -Devnet is a network for developers to build and test blockchain apps. It provides a sandbox environment for experimenting with ideas like data dashboards. You can create your own snapshotting logic, write the data application, and use these snapshots without needing consensus from other nodes. The devnet runs on its own dedicated Powerloom chain, eliminating the need for external testnet tokens. - -### Why do I need to mint a Devnet Slot? -Minting a Devnet slot reserves your space on the Devnet and gives you a Slot ID, which is required for setting up your Snapshotter Node. The minting process is done at https://devnet-mint.powerloom.dev. - -### Are there any costs associated with minting the devnet slot? -No, minting a devnet slot is free. The devnet uses the Powerloom devnet chain, and you can get free tokens from the faucet at https://devnet-faucet.powerloom.dev if needed. - -### Where can I mint the Devnet slot? -To mint a Devnet slot, visit https://devnet-mint.powerloom.dev, connect your wallet, and follow the instructions to mint your slot. No testnet ETH required - it's free on the Powerloom devnet chain! - -### What is a Snapshotter node? - -Snapshotter peers are participants in the Powerloom network who run Snapshotter Nodes which capture and verify data snapshots at predetermined intervals or epochs. - -### How do you check the Slot ID of your minted devnet slot? -You can locate your Slot ID by visiting the dashboard at https://devnet-mint.powerloom.dev. This same dashboard also serves as your snapshotter monitoring interface where you can track your node's performance. - -### What are the system requirements for running the Snapshotter node? -The node requires at least 4 GB of RAM, a minimum of 2 CPU cores, 40 GB of disk space, and Python 3.11 or higher. Docker is also recommended with specific version requirements. - -### What versions of Docker and docker-compose are required for the node setup? -The latest version of `docker` (`>= 20.10.21`) and `docker-compose` (`>= v2.13.0`). If your system hasn't installed docker, please follow the guide [here](https://www.baeldung.com/ops/docker-install-windows-linux-mac). - -### How do I configure the .env file for my Snapshotter node? -To configure the environment variables, follow these steps: - 1. Copy env.example to .env by running `cp env.example .env` - 2. Fill in the required variables in .env `SOURCE_RPC_URL`, `SIGNER_ACCOUNT_ADDRESS`, `SIGNER_ACCOUNT_PRIVATE_KEY`, `SLOT_ID`, `PROTOCOL_STATE_CONTRACT`. - -### Where can I find documentation on Snapshotter Configs and Computes? -You can find the documentation for Snapshotter Configs and Computes in the [docs](/build-with-powerloom/snapshotter-node/architecture/#configuration-files). The pooler computes and config files for the Uniswap V2 use case are found in [snapshotter-computes](https://github.com/powerloom/snapshotter-computes/tree/eth_uniswapv2) and [snapshotter-configs](https://github.com/powerloom/snapshotter-configs/tree/eth_uniswapv2). - -### What is RPC? -In blockchain, RPC (Remote Procedure Calls) nodes allow users and apps to interact with the blockchain without network details. The `RPCHelper` in `utils/rpc.py` simplifies snapshot generation & data extraction from the blockchain state. - -### What RPC services are recommended for use? -You can use any Ethereum Mainnet RPC provider, such as Infura, Alchemy, or Quicknode. Remember that your choice may depend on your specific use case and RPC usage requirements. - -### What types of OS can I use to run the Snapshotter node? -You can use the macOS, Linux, or Windows to run the Snapshotter node. For more details on setting up and running the node, visit [here](/build-with-powerloom/devnet/getting-started). - -### What is a burner wallet and how do you generate one? -A burner/disposable wallet is a type of cryptocurrency wallet that is designed for temporary use. Burner wallets are often used for small transactions or events where security and long-term storage are not priorities. - -:::tip -**Note:** Do not use your NFT minting wallet to run the Snapshotter lite node. The safest approach is to generate and assign a burner wallet using tools like [Vanity-ETH](https://vanity-eth.tk/) and [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) -::: - -### What security measures should I consider when creating a burner wallet? -When creating a burner wallet, prioritize security by managing private keys securely, limiting funds stored, performing offline transactions, regularly backing up data, ensuring a secure environment, using trusted sources, considering multi-signature wallets, and staying informed about security practices. - -### How do I deploy my Snapshotter node once the environment is configured? -After configuring the environment variables, set the powerloom_deploy codebase by running the `bootstrap.sh` command in the terminal. Developers may use different shells, such as bash or zsh. - -:::info -**Note**: This is a one-time step that resets the `powerloom_deploy` codebase to the latest version of the `devnet` branch. After completing this one-time setup, you'll be ready to dive into the codebase and start building amazing data applications! -::: - -### What data source chains are supported? -For data collection, we support Ethereum Mainnet. The devnet itself runs on the dedicated Powerloom devnet chain. - -### What steps should I follow to perform a clean reset of my node? -You can do a clean **reset** by running the following command before restarting. -```markdown - docker-compose --profile ipfs down --volumes -``` -or -```markdown - docker compose --profile ipfs down --volumes -``` - -### How can I stop the node? -To shut down services, use the keyboard shortcut **`Ctrl + C`** on macOS/Linux or **`Ctrl + Break`** on Windows. Run the provided Docker command before restarting the node setup for a clean reset. - -### Can we run the setup on different languages? -Yes, you can run the setup in different languages. The Snapshotter node is a complex system with multiple components written in different languages. Pooler is a Python program, while Audit Protocol is coded in Go. Since Pooler and Audit Protocol communicate via RabbitMQ, either component can be ported to different languages, making the Snapshotter node accessible to developers unfamiliar with Python or Go. - -### What is the purpose of the PROTOCOL_STATE_CONTRACT variable? -This PROTOCOL_STATE_CONTRACT variable specifies the protocol state's contract address. Different protocol state contracts depend on the data source contract's chain and the Epoch size of that chain that developers prefer. - -Currently, there are options for Epoch sizes of 1 and 10, where epoch size 1 is better for real-time use cases, while 10 is more suitable for aggregated dataset use cases like data dashboards, giving developers the flexibility to experiment with different scenarios. - -### What is the Relayer Host? -The Relayer Host is the URL for the relayer, a specialized node within the decentralized network, used in the Powerloom Protocol Chain. -Powerloom operates relayers that handle transactions that submit snapshots to the protocol state contract on behalf of snapshotter nodes. -This ensures they do not have to spend gas fees to submit snapshots on the Powerloom protocol chain, aka Prost. - -### How do I check if my node is running? -To check if your node is running actively, navigate to https://devnet-mint.powerloom.dev. This dashboard shows both your minted slots and real-time node status, allowing you to monitor your snapshotter's performance. - -### Where can I seek help if I encounter issues not covered in the troubleshooting section? -Refer to the troubleshooting section of the documentation for common solutions or reach out to the Powerloom team on [Discord](https://discord.com/invite/powerloom) for further assistance. - -### Is there a community forum or Discord channel for Powerloom developers? -Yes, we have a Discord channel for Powerloom developers. Here’s the link, [Powerloom Discord](https://discord.com/invite/powerloom). - -### How can I stay updated on new features? -You can follow us on [X(Twitter)](https://x.com/Powerloom) and also join the community on [Discord](https://discord.com/invite/powerloom) to stay updated on new feature releases. - -### Are there any additional steps for setting up the node on Windows? -Yes, setting up the node on Windows requires Docker and the Windows Subsystem for Linux (WSL). Follow the provided guide for detailed instructions on setting up WSL and Docker on your Windows system. diff --git a/docs/build-with-powerloom/devnet/Glossary.md b/docs/build-with-powerloom/devnet/Glossary.md deleted file mode 100644 index 6c8e567c..00000000 --- a/docs/build-with-powerloom/devnet/Glossary.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -sidebar_position: 3 ---- - -## Key terms, concepts, and acronyms used in Powerloom's Devnet - ---- - -### Snapshotter Peers & Nodes - -Snapshotter peers are participants in the Powerloom network who capture and verify data snapshots. Snapshotter nodes, run by Snapshotter peers, generate these snapshots at predetermined intervals or epochs. The peers are crucial for data accuracy and integrity in the decentralized Powerloom ecosystem. - -### Snapshots - -Snapshots are compressed archives of blockchain node states at specific block heights. They serve as a historical record of data changes and are taken by Snapshotter Peers. Each snapshot is a report of the observation, specific to state transitions or event logs between two block heights, and is submitted to the Protocol for consensus. Snapshots are essential for ensuring data integrity, enabling analysis, and tracking changes over time within the network. - -### Epochs - -An Epoch in the context of blockchain typically refers to a range of block heights on the data source blockchain where smart contract applications run, or, simply put, it is a specific period in the blockchain's life. - -Each Snapshotter makes observations specific to the state transitions spanning two block heights termed Epochs. Check out our developer docs [here](/Protocol/Specifications/Epoch/) to learn more about Epochs. - -### RPCs - -Remote Procedure Calls (RPCs), allow a program to request a service from another program on a different computer in a network. In the blockchain, an RPC node lets users and applications interact with the blockchain without needing to know network details. - -Extracting data from the blockchain state and generating the snapshot can be complex. The RPC Helper, has many helper functions to make this process easier. It handles all the retry and caching logic so developers can focus on efficiently building their use cases. - -### Prost Chain - -The "Prost Chain" refers to the foundational blockchain infrastructure the Powerloom Network utilizes, serving as the anchor chain for storing proofs. The Prost Chain also coordinates activity between different categories of peers on the network. For example, it coordinates consensus between snapshots to finalize snapshots per epoch; it also acts as the distribution point for releasing epochs. - -### Protocol State (on Prost Chain) - -Protocol State represents the current state of the network, which Snapshotter Peers or anyone else can refer to if the entity needs access to current or historical data references. - -### Devnet -Devnet is a network environment for developers to test and develop blockchain applications. Devnet provides a sandbox environment to test ideas like data dashboards. As an individual, you can develop your own snapshotting logic, write the data application & use these snapshots without requiring any consensus on said snapshots from other snapshotter nodes. - -:::success info -#### Our Devnet is live! -**Powerloom’s Devnet is Live!** Access the Devnet and build exciting data applications; you can mint a no-cost NFT slot on the Sepolia Network 🌟. Devnet mint page: [https://devnet-mint.powerloom.dev](https://devnet-mint.powerloom.dev/) - -💡 To mint the NFT slot, ETH on the Sepolia network is required. If your balance is insufficient, you can obtain Sepolia ETH through the following link: https://faucet.quicknode.com/drip -::: - -### Data Markets - -Data markets are defined by a schema specifying state variables, event log topics, and specific transactions across any smart contract instances that make the decentralized application. eg. A defi protocol like uniswap. In a data market, datasets are snapshotted data collections, while data sources are the contracts that are being snapshotted. - -Click [here](/Protocol/data-sources) to learn more about Data Markets. - -### Environment Variables - -Environment variables are external configurations that affect runtime behavior without modifying the code directly. They include network details, contract addresses, token parameters, security settings, feature flags, debugging options, and integration parameters. They offer flexibility, security, and maintainability by enabling dynamic adjustments of contract behavior across different deployment environments. - -### IPFS (InterPlanetary File System) -A decentralized storage protocol and network for storing and sharing files in a peer-to-peer manner. IPFS uses content-addressing and cryptographic hashing to distribute data across multiple nodes securely and efficiently. - -### Burner Wallet - -A lightweight and disposable cryptocurrency wallet designed for temporary or single-use transactions. Burner wallets are often used for small transactions or events where security and long-term storage are not priorities. - -### Project IDs - -All data sources are tracked with a project ID on the protocol. Think of it as a stream of datasets, finalized by consensus against each epoch released on the protocol. The snapshotter node attempts to retrieve data sources corresponding to the projects key from the protocol state. -Find more details in the specifications of [snapshot generation](/Protocol/Specifications/Snapshotter/snapshot-build#project-id-generation). - -### Snapshot Composition - -The protocol state collects finalized snapshots for incremental epochs against contracts configured as data sources. These snapshots can be further composed according to the use case. - -We can compose snapshots on top of base snapshots for single or multiple contracts by: -- Combining individual snapshots of trade volume and fees across multiple pair contracts. -- Spanning a specific set of epochs that satisfy a time duration (e.g., 24 hours). - -To learn more about Snapshot Composition, start with this [guide](/Protocol/data-composition), then explore [Data Points](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/data-points) for a use case-driven approach, and finally read through [Closer Look at Snapshots](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/closer-look-at-snapshots) for a detailed understanding. - -### Relayers -Entities or nodes within a decentralized network responsible for relaying or forwarding messages, transactions, or data between different participants. Relayers play a crucial role in facilitating communication and interoperability within distributed systems. - -### Pre-loaders -Software components, scripts, or routines used to load or initialize data, resources, or configurations before the main application or system starts. Pre-loaders ensure that necessary dependencies are available and set up properly to enable smooth operation of the application. - diff --git a/docs/build-with-powerloom/devnet/Introduction.md b/docs/build-with-powerloom/devnet/Introduction.md deleted file mode 100644 index 26a570e1..00000000 --- a/docs/build-with-powerloom/devnet/Introduction.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 0 ---- - -# Introduction to Devnet - -Devnet provides developers with a sandbox environment to build and test data-driven applications. Developers can create powerful tools such as dashboards, arbitrage bots, and wallet trackers. The Devnet allows for experimentation and iteration without the risks associated with using real assets on a live network. - -:::tip Zero-Cost Testing Environment -Devnet is a complete replica of our mainnet functionality running on our testnet chain. Get started immediately with free tokens from our faucet - no gas fees or financial commitment required! -::: - -Start building data application with Powerloom by setting up your own Snapshotter node on our devnet. For a comprehensive understanding of the Powerloom Protocol and snapshotter architecture, see our [mainnet snapshotter introduction](../snapshotter-node/introduction.md). - -Our Devnet environment is designed to facilitate developers in: -- Testing and understanding [how snapshotters work](../snapshotter-node/introduction.md) without any costs -- Expanding upon [our pre-existing use cases](../../category/existing-implementations) like Uniswap V2 and Aave V3 dashboards -- Innovating [new applications](../../category/building-a-new-use-case) with custom data compositions -- Learning the protocol before deploying on [mainnet](../snapshotter-node/lite-node-v2/getting-started.md) - -### Data Source Chains - -We currently support data collection from the Ethereum for our existing datamarkets, [Uniswap V2](../use-cases/existing-implementations/uniswap-dashboard/index.md) and [Aave V3](../use-cases/existing-implementations/aavev3-dashboard/index.md) - -| Chain | Data Markets | -|-----------------|---------------------| -| Ethereum Mainnet| Uniswap V2, Aave V3 | - -### Powerloom Devnet Chain -- **Chain**: Testnet chain powered by [Conduit](https://hub.conduit.xyz/prost1j-emrlsr8nrc) -- **Faucet**: Powerloom testnet tokens available at [devnet-faucet.powerloom.dev](https://devnet-faucet.powerloom.dev) - -### Getting Started Quickly -1. **Get free tokens**: Visit [devnet-faucet.powerloom.dev](https://devnet-faucet.powerloom.dev) -2. **Mint your slot**: Head to [devnet-mint.powerloom.dev](https://devnet-mint.powerloom.dev) -3. **Start snapshotting**: Follow our [setup guide](./getting-started.md) - -The entire process takes less than 10 minutes! - -If you want to request support for any other data source chains, please ask us on [#developers](https://discord.com/channels/777248105636560948/1180479966434054165) channel on our [Discord](https://discord.gg/powerloom). - ---- - -## Next Steps -To begin building your applications, head over to the [getting started](./getting-started.md) section to mint your Powerloom node and snapshotting either of the data markets. - - -## Quick Links -- [Mainnet Documentation](../snapshotter-node/introduction.md) - Understand the full protocol -- [Protocol Overview](../../category/protocol-overview) -- [Building New Use Cases](../../category/building-a-new-use-case) - Create custom data markets -- [Existing Implementations](../../category/existing-implementations) - Explore current use cases -- [Devnet Faucet](https://devnet-faucet.powerloom.dev) - Get free tokens -- [Devnet Dashboard](https://devnet-mint.powerloom.dev) - Mint and monitor your node -- [Discord Support](https://discord.com/invite/powerloom) \ No newline at end of file diff --git a/docs/build-with-powerloom/devnet/_category_.json b/docs/build-with-powerloom/devnet/_category_.json deleted file mode 100644 index 3a97ea5e..00000000 --- a/docs/build-with-powerloom/devnet/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Devnet", - "position": 1, - "link": { - "type": "generated-index", - "description": "Build robust Web3 Data applications with powerloom." - } - } \ No newline at end of file diff --git a/docs/build-with-powerloom/devnet/getting-started.md b/docs/build-with-powerloom/devnet/getting-started.md deleted file mode 100644 index 4bf31248..00000000 --- a/docs/build-with-powerloom/devnet/getting-started.md +++ /dev/null @@ -1,753 +0,0 @@ ---- -sidebar_position: 1 -title: Setting Up ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Setting Up and Running the Snapshotter Node on Devnet - -This guide provides instructions for installing and running the Snapshotter Node for the Powerloom Devnet, covering prerequisites and operational procedures. - -The Snapshotter Node can be set up using either the Docker image or by running natively on the local machine. However, using the Docker image is the recommended approach, as it provides the simplest and most reliable method for deployment. - -:::tip Node Mint -Node Mint for devnet is available at: https://devnet-mint.powerloom.dev/. This dashboard also serves as the snapshotter dashboard for monitoring your devnet nodes. -::: - -Follow the step-by-step instructions in the relevant guide to set up your Snapshotter Node. If you need further assistance, refer to our troubleshooting documentation or reach out to us on [discord](https://discord.com/invite/powerloom) for support. - -:::info Important note - -1. It is recommended that the node operates continuously, 24/7. -2. The devnet uses the dedicated Powerloom devnet chain - no Sepolia ETH required! -3. Get devnet tokens from the faucet at https://devnet-faucet.powerloom.dev - -::: - -We have streamlined the setup process based on your operating system. To begin, please choose your operating system from the tabs provided below. - -- For those looking to set up the node on a local Windows or Mac machine, please select the appropriate tab. -- If you are configuring your node on a Linux VPS, select the "VPS Setup (Linux)" tab and follow the provided instructions to get started. - ---- - - - -## Setting up the Snapshotter Node on Devnet - - - - - - ## Deploying a Snapshotter Node on a Virtual Private Server (VPS) - -Deploying a Snapshotter Node on a Virtual Private Server (VPS) ensures seamless 24/7 operation without utilizing your local resources. - -This section provides instructions for setting up your Snapshotter Node on an Ubuntu VPS. - -While you're free to choose any provider, this guide specifically utilizes DigitalOcean for demonstration purposes. - -### Recommended VPS Providers: - -- DigitalOcean -- Hostinger - - -### Hardware Requirements - -The Snapshotter Node is designed for minimal hardware demands, allowing it to operate effectively on various setups, including both local systems and cloud-based Virtual Machines. - -For users running the node on Virtual Private Servers (VPS), the minimum specifications are: - -- **RAM:** At least 4 GB. -- **CPU Core**: Minimum of 2 Cores -- **Disk Space:** A minimum of 40 GB. - - -### Step 1: Creating Your VPS - -1. **Sign Up/Login**: Start creating an account on your VPS provider or log in if you already have one. - -2. **Choose an Image**: Select Ubuntu as your operating system. We recommend using the latest stable version of Ubuntu for optimal performance. - -3. **Select a Plan**: Choose a plan that meets the minimum hardware requirements for the Snapshotter Node. A plan with at least 4 GB RAM and 40 GB of disk space is advisable. - -4. **Authentication**: Set up SSH keys for secure access to your VPS. - -5. **Finalize and Create**: Choose any additional options, like backups if required. Your VPS will be set up within a few minutes. - -### Step 2: Accessing Your VPS - -- **SSH into Your VPS**: Use the following command from your terminal/command prompt, replacing `your_vps_ip` with the IP address of your VPS. - -```bash -ssh root@your_vps_ip -``` - -- If you set up SSH keys, you should be logged in without needing a password. Otherwise, you can also set your password for the VPS. - -### Step 3: Setting Up the Environment - -1. **Update and Upgrade Your VPS**: - -```bash -sudo apt-get update && sudo apt-get upgrade -y -``` - -2. **Install Git**: -Git is necessary for cloning the Snapshotter repository. Install it using: - -```bash -sudo apt-get install git -y -``` - -3. **Install Docker and Docker Compose:** -Ensure Docker and Docker Compose are installed. You can install docker on Ubuntu using the following commands: - -```bash -# Add Docker's official GPG key: -sudo apt-get update -sudo apt-get install ca-certificates curl -sudo install -m 0755 -d /etc/apt/keyrings -sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc -sudo chmod a+r /etc/apt/keyrings/docker.asc - -# Add the repository to Apt sources: -echo \ -"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ -$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ -sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -sudo apt-get update -``` - -Once the Docker repository is added successfully, let's install Docker and necessary components by using the below command: - -```bash -sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -``` - -### Step 4: Cloning the Repository and Setting Up the Node - -1. **Clone the Snapshotter Repository**: -Navigate to the directory where you want to install the node and clone the repository: - - ```bash - git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-devnet - ``` - -2. **Navigate to the Directory**: -Change to the directory of the cloned repository: - - ```bash - cd powerloom-devnet - ``` - -4. **Cleanup the Environment**: -Run the diagnose and cleanup script to check for any previous instances of the lite node, local collector, stale images and networks. - - ```bash - ./diagnose.sh - ``` - -:::tip -It is recommended to run the node in a standalone environment without any other major processes running on the same machine. Running other processes on the same machine may lead to conflicts and errors that can interfere with the node's operation. The diagnose and cleanup script will stop and remove only Powerloom related processes running on the machine, if any. -::: - - -### Step 5: Running the Node - -1. **Setting up Screen**: -The Screen utility allows you to run processes in the background, enabling you to maintain long-running tasks without keeping a terminal window open. To initiate a new Screen session for managing the Snapshotter Node, follow these steps: - -Enter the following command to create a new Screen session named "snapshotter-devnet-node": - - ```bash - screen -R snapshotter-devnet-node - ``` - -- This command opens a new Screen session, where you can start the Snapshotter Node. -- Once inside the new Screen session, initiate the Snapshotter Node as required. - -:::note -If you have an existing screen session named `snapshotter-devnet-node`, the above command will attach to the existing session. -Otherwise, it will create a new session with that name. -::: - -This approach ensures your node can continue running in the background, even if you disconnect from the terminal session. - -1. **Initialize the Node**: -Initiate the snapshotter node setup by typing the command in the terminal: - - ```bash - ./build.sh --devnet - ``` - - :::warning Important - The `--devnet` flag is required for devnet deployment. This tells the node to connect to the Powerloom devnet chain instead of mainnet. - ::: - -Follow the prompts to enter the required information. - -:::tip -Please do not use your NFT minting wallet to run the snapshotter node. The safest approach is to generate and assign a burner wallet. You can generate a burner wallet through any of the tools listed below: -- [Vanity-ETH](https://vanity-eth.tk/) -- [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) - -Once generated, make sure you assign your burner wallet to your slot at [devnet-mint.powerloom.dev](https://devnet-mint.powerloom.dev/). -::: - -### Step 6: Configuring the Node - -After initiating the process, the setup steps will differ depending on whether this is the first time the node has been setup or not: - -**First Time Setup:** - -1. Select the Data Market that you would like to participate in: - - The node allows you to choose between different data markets available on devnet. - -2. Next, you'll be prompted to enter the following values: - - `$SOURCE_RPC_URL`: Use any Ethereum Mainnet RPC, such as Ankr, Infura, or Alchemy. - - - `$SIGNER_ACCOUNT_ADDRESS`: Utilize a burner wallet for the signer account address. Please DO NOT use your main/primary wallet. - - - `$SIGNER_ACCOUNT_PRIVATE_KEY`: Use the private key from your burner wallet. - - - `$SLOT_ID`: To assign your node to a specific slot, please provide the corresponding Slot ID. You can locate your Slot ID on the devnet dashboard at https://devnet-mint.powerloom.dev. - -3. Optionally, you can provide to following values: - - - `$TELEGRAM_CHAT_ID`: Can be provided if you would like to enable Telegram reporting for node issues. See our [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) page for instructions on how to get your Telegram Chat ID. - -After entering these details, the node will start running the background processes. - -If you want to exit your screen, type the command in the terminal: - ```bash - CTRL + A + D - ``` - -**Subsequent Setup:** - -1. Select the Data Market that you would like to participate in. - -2. You will be prompted to choose whether you wish to change the previously configured values for the above: `SOURCE_RPC_URL`, `SIGNER_ACCOUNT_ADDRESS`, `SIGNER_ACCOUNT_PRIVATE_KEY` and `SLOT_ID`. Choose `y` or `n` depending on whether you wish to change them. - -3. If you choose `y` to change the previously configured values, you will be prompted to enter the new values individually for each of the above values. - - -### Step 6: Maintaining Your Node - -- **Regular Updates**: Keep your system and Snapshotter Node updated by regularly pulling the latest changes from the repository and applying system updates. - -- **Monitoring**: Regularly check the status of your node and the VPS to ensure everything is running smoothly. - - - - - - - - - - - -## Docker Setup for MacOS - -### Hardware Requirements - -The Snapshotter Node is designed for minimal hardware demands, allowing it to operate effectively on various setups, including both local systems and cloud-based Virtual Machines. - -### MacOS System Requirements - -For users running the node on personal hardware, the minimum specifications are: - -- **RAM:** At least 4 GB. -- **CPU Core**: Minimum of 2 Cores -- **Disk Space:** A minimum of 40 GB. - -### Pre-requisitie tools - -- Install Docker on your machine. You can find the installation instructions for your operating system on the [official Docker website.](https://docs.docker.com/get-docker/) - -- Install git if your system doesn't have git installed. To install git on MacOS, please follow this guide: https://www.atlassian.com/git/tutorials/install-git - -### Cloning the Repository and Setting Up the Node - -1. **Clone the Snapshotter Repository**: -Navigate to the directory where you want to install the node and clone the repository: - - ```bash - git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-devnet - ``` - -2. **Navigate to the Directory**: -Change to the directory of the cloned repository: - - ```bash - cd powerloom-devnet - ``` - -4. **Cleanup the Environment**: -Run the diagnose and cleanup script to check for any previous instances of the lite node, local collector, stale images and networks. - - ```bash - ./diagnose.sh - ``` - -:::tip -It is recommended to run the node in a standalone environment without any other major processes running on the same machine. Running other processes on the same machine may lead to conflicts and errors that can interfere with the node's operation. The diagnose and cleanup script will stop and remove only Powerloom related processes running on the machine, if any. -::: - -### Running the Node - -1. **Setting up Screen**: -The Screen utility allows you to run processes in the background, enabling you to maintain long-running tasks without keeping a terminal window open. To initiate a new Screen session for managing the Snapshotter Node, follow these steps: - -Enter the following command to create a new Screen session named "snapshotter-devnet-node": - - ```bash - screen -R snapshotter-devnet-node - ``` - -- This command opens a new Screen session, where you can start the Snapshotter Node. -- Once inside the new Screen session, initiate the Snapshotter Node as required. - -This approach ensures your node can continue running in the background, even if you disconnect from the terminal session. - -:::note -If you have an existing screen session named `snapshotter-devnet-node`, the above command will attach to the existing session. -Otherwise, it will create a new session with that name. -::: - -2. **Initialize the Node**: -Initiate the snapshotter node setup by typing the command in the terminal: - - ```bash - ./build.sh --devnet - ``` - - :::warning Important - The `--devnet` flag is required for devnet deployment. This tells the node to connect to the Powerloom devnet chain instead of mainnet. - ::: - -Follow the prompts to enter the required information. - -:::tip -Please do not use your NFT minting wallet to run the snapshotter node. The safest approach is to generate and assign a burner wallet. You can generate a burner wallet through any of the tools listed below: -- [Vanity-ETH](https://vanity-eth.tk/) -- [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) - -Once generated, make sure you assign your burner wallet to your slot at [devnet-mint.powerloom.dev](https://devnet-mint.powerloom.dev/). -::: - -### Configuring the Node - -After initiating the process, the setup steps will differ depending on whether this is the first time the node has been setup or not: - -**First Time Setup:** - -1. Select the Data Market that you would like to participate in: - - The node allows you to choose between different data markets available on devnet. - -2. Next, you'll be prompted to enter the following values: - - `$SOURCE_RPC_URL`: Use any Ethereum Mainnet RPC, such as Ankr, Infura, or Alchemy. - - - `$SIGNER_ACCOUNT_ADDRESS`: Utilize a burner wallet for the signer account address. Please DO NOT use your main/primary wallet. - - - `$SIGNER_ACCOUNT_PRIVATE_KEY`: Use the private key from your burner wallet. - - - `$SLOT_ID`: To assign your node to a specific slot, please provide the corresponding Slot ID. You can locate your Slot ID on the devnet dashboard at https://devnet-mint.powerloom.dev. - -3. Optionally, you can provide to following values: - - - `$TELEGRAM_CHAT_ID`: Can be provided if you would like to enable Telegram reporting for node issues. See our [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) page for instructions on how to get your Telegram Chat ID. - -After entering these details, the node will start running the background processes. - -If you want to exit your screen, type the command in the terminal: - ```bash - CTRL + A + D - ``` - -**Subsequent Setup:** - -1. Select the Data Market that you would like to participate in. - -2. You will be prompted to choose whether you wish to change the previously configured values for the above: `SOURCE_RPC_URL`, `SIGNER_ACCOUNT_ADDRESS`, `SIGNER_ACCOUNT_PRIVATE_KEY` and `SLOT_ID`. Choose `y` or `n` depending on whether you wish to change them. - -3. If you choose `y` to change the previously configured values, you will be prompted to enter the new values individually for each of the above values. - -### Stopping the Node - -- To stop the node, you can press `Ctrl+C` in the terminal where the node is running or `docker-compose down` in a new terminal window from the project directory. - -This will halt the running node and all associated processes. - -By following these steps, you can successfully configure the Snapshotter Node on your Mac system. - -If you encounter any issues while operating the node, please refer our [troubleshooting section](./troubleshooting-monitoring.md) for guidance on common debugging techniques. - ---- - - - -## Non-Docker Setup for MacOS - -### Hardware Requirements - -The Snapshotter Node is designed for minimal hardware demands, allowing it to operate effectively on various setups, including both local systems and cloud-based Virtual Machines. - -For users running the node on personal hardware, the minimum specifications are: - -- **RAM:** At least 4 GB. -- **CPU Core**: Minimum of 2 Cores -- **Disk Space:** A minimum of 40 GB. -- **Python:** Ensure Python 3.11 is installed. - -If you want to run the Snapshotter Node without Docker, you need to make sure that you have Git, and Python version 3.10 or higher installed on your machine and we recommend to use **python version 3.11.7**. You can find the installation instructions for your operating system on the [official Python website](https://www.python.org/downloads/). - - -
- Optional: Installing Virtual Environment -
-For simplicity, we recommend using miniconda and setting up an environment with the needed Python version as shown below - -

- -#### Install miniconda for your system: - ```bash - https://docs.conda.io/projects/miniconda/en/latest/ - ``` - -#### Verify the installation using the following command in your terminal - ```bash - conda --version - ``` - - Add miniconda to your path if the terminal does not identify conda as a valid command: - ```bash - export PATH="/Users/yourusername/miniconda3/bin:$PATH" - ``` - - Replace yourusername with your actual username - -##### Create and activate a python environment: - ```bash - conda create -n myenv python=3.11 - conda activate myenv - ``` -

- -Once python3 is installed, we can go ahead and run the node:- - -1. Clone this repository using the following command in the terminal: - ```bash - git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-devnet - ``` -This will clone the repository into a directory named `powerloom-devnet`. - -2. Change your working directory to the `powerloom-devnet` directory, open the terminal, and type: - - ```bash - cd powerloom-devnet - ``` - -3. Run `init.sh` command in the terminal to start the snapshotter node: - ```bash - ./init.sh --devnet - ``` - - :::warning Important - The `--devnet` flag is required for devnet deployment. This tells the node to connect to the Powerloom devnet chain instead of mainnet. - ::: - -:::tip -Please do not use your NFT minting wallet to run the snapshotter node. The safest approach is to generate and assign a burner wallet. You can generate a burner wallet through any of the tools listed below: -- [Vanity-ETH](https://vanity-eth.tk/) -- [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) - -Once generated, make sure you assign your burner wallet to your slot at [devnet-mint.powerloom.dev](https://devnet-mint.powerloom.dev/). -::: - - -During the setup, you'll be prompted to enter the following values: - -- `$SOURCE_RPC_URL`: Use any Ethereum Mainnet RPC, such as Ankr, Infura, or Alchemy. - -- `$SIGNER_ACCOUNT_ADDRESS`: Utilize a burner wallet for the signer account address. Please DO NOT use your main/primary wallet. - -- `$SIGNER_ACCOUNT_PRIVATE_KEY`: Use the private key from your burner wallet. - -- `$SLOT_ID`: To assign your node to a specific slot, please provide the corresponding Slot ID. You can locate your Slot ID on the devnet dashboard at https://devnet-mint.powerloom.dev. - - -This is a one-time configuration process that generates a .env file in the project's root directory. - -### Stopping the Snapshotter Node - -To stop the node, use the command in the terminal: -```bash -pkill -f snapshotter -``` - -This will halt the running node and all associated processes. - -By following these steps, you can successfully configure the Snapshotter Node on your Mac system. - -If you encounter any issues while operating the node, please refer to our [troubleshooting section](./troubleshooting-monitoring.md) for guidance on common debugging techniques. - ---- - -
-
- -
- - - The Snapshotter Node can operate on Windows systems when running in a Docker container. To set up the Snapshotter Node on Windows, follow the Docker installation and configuration instructions provided in this section. - - - -## Windows Docker Setup {#windows-setup} - -### Hardware Requirements - -The Snapshotter Node is designed for minimal hardware demands, allowing it to operate effectively on various setups, including both local systems and cloud-based Virtual Machines. - -For users running the node on a personal Windows system, the minimum specifications are: - -- **RAM:** At least 4 GB. -- **CPU Core**: Minimum of 2 Cores -- **Disk Space:** A minimum of 40 GB. - -Setting up the snapshotter node on Windows requires a few additional steps. We suggest using Docker for its ease and speed of setup. To begin with Docker, you must have the Windows Subsystem for Linux (WSL) installed. Please follow the guide provided below for detailed instructions. - -### Initial Setup - -- **Open PowerShell:** - - Start by opening PowerShell on your Windows machine. Search for `"PowerShell"` in the start menu and launch it. - -- **Install Windows Subsystem for Linux (WSL):** - - In the PowerShell window, enter the following command: - ```bash - wsl --install - ``` - - This command installs the Windows Subsystem for Linux, necessary for running Docker. - -- **Download and Install Docker:** - - Download Docker from the [official website](https://docs.docker.com/get-docker/). - - Follow the installation instructions provided on the website. - -- **Restart Your Computer:** - - After installing Docker, restart your computer to apply all changes. - -- **Open Docker:** - - Post-restart, open Docker. This should automatically launch a Powershell console which will have WSL installed. - -- **Set Up Linux User Account:** - - In the newly opened powershell console, set up a new user account by entering a username and password. - -#### Granting Docker Permissions - -- **Modify Docker Group Permissions:** - - To grant Docker the necessary permissions, add your user to the Docker group with this command: - - ```bash - sudo usermod -aG docker $USER - ``` - - Logout and login again or restart the Docker service for the changes to take effect. - -- **Verify Docker Installation:** - - To confirm Docker is set up correctly, run: - - ```bash - docker run hello-world - ``` - - This command should display a message confirming Docker is functioning. - -#### Cloning the Repository and Setting Up the Node - -1. **Clone the Repository:** - - Use the following command in WSL terminal to clone the Snapshotter repository: - - ```bash - git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-devnet - ``` - -2. **Navigate to the Repository Directory:** - - Change to the cloned repository's directory: - - ```bash - cd powerloom-devnet - ``` - -3. **Cleanup the Environment**: - - Run the diagnose and cleanup script to check for any previous instances of the lite node, local collector, stale images and networks. - - ```bash - ./diagnose.sh - ``` - -:::tip -It is recommended to run the node in a standalone environment without any other major processes running on the same machine. Running other processes on the same machine may lead to conflicts and errors that can interfere with the node's operation. The diagnose and cleanup script will stop and remove only Powerloom related processes running on the machine, if any. -::: - -### Running the Node - -1. **Setting up Screen**: -The Screen utility allows you to run processes in the background, enabling you to maintain long-running tasks without keeping a WSL terminal window open. To initiate a new Screen session for managing the Snapshotter Node, follow these steps: - -Enter the following command to create a new Screen session named "snapshotter-devnet-node": - - ```bash - screen -R snapshotter-devnet-node - ``` - -- This command opens a new Screen session, where you can start the Snapshotter Node. -- Once inside the new Screen session, initiate the Snapshotter Node as required. - -This approach ensures your node can continue running in the background, even if you disconnect from the terminal session. - -:::note -If you have an existing screen session named `snapshotter-devnet-node`, the above command will attach to the existing session. -Otherwise, it will create a new session with that name. -::: - -2. **Initialize the Node**: -Initiate the snapshotter node setup by typing the command in the terminal: - - ```bash - ./build.sh --devnet - ``` - - :::warning Important - The `--devnet` flag is required for devnet deployment. This tells the node to connect to the Powerloom devnet chain instead of mainnet. - ::: - -Follow the prompts to enter the required information. - -:::tip -Please do not use your NFT minting wallet to run the snapshotter node. The safest approach is to generate and assign a burner wallet. You can generate a burner wallet through any of the tools listed below: -- [Vanity-ETH](https://vanity-eth.tk/) -- [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) - -Once generated, make sure you assign your burner wallet to your slot at [devnet-mint.powerloom.dev](https://devnet-mint.powerloom.dev/). -::: - -### Configuring the Node - -After initiating the process, the setup steps will differ depending on whether this is the first time the node has been setup or not: - -**First Time Setup:** - -1. Select the Data Market that you would like to participate in: - - The node allows you to choose between different data markets available on devnet. - -2. Next, you'll be prompted to enter the following values: - - `$SOURCE_RPC_URL`: Use any Ethereum Mainnet RPC, such as Ankr, Infura, or Alchemy. - - - `$SIGNER_ACCOUNT_ADDRESS`: Utilize a burner wallet for the signer account address. Please DO NOT use your main/primary wallet. - - - `$SIGNER_ACCOUNT_PRIVATE_KEY`: Use the private key from your burner wallet. - - - `$SLOT_ID`: To assign your node to a specific slot, please provide the corresponding Slot ID. You can locate your Slot ID on the devnet dashboard at https://devnet-mint.powerloom.dev. - -3. Optionally, you can provide to following values: - - - `$TELEGRAM_CHAT_ID`: Can be provided if you would like to enable Telegram reporting for node issues. See our [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) page for instructions on how to get your Telegram Chat ID. - -After entering these details, the node will start running the background processes. - -If you want to exit your screen, type the command in the terminal: - ```bash - CTRL + A + D - ``` - -**Subsequent Setup:** - -1. Select the Data Market that you would like to participate in. - -2. You will be prompted to choose whether you wish to change the previously configured values for the above: `SOURCE_RPC_URL`, `SIGNER_ACCOUNT_ADDRESS`, `SIGNER_ACCOUNT_PRIVATE_KEY` and `SLOT_ID`. Choose `y` or `n` depending on whether you wish to change them. - -3. If you choose `y` to change the previously configured values, you will be prompted to enter the new values individually for each of the above values. - -### Stopping the Node - -- To stop the node, you can press `Ctrl+C` in the terminal where the node is running or `docker-compose down` in a new terminal window from the project directory. - -This will halt the running node and all associated processes. - -By following these steps, you can successfully configure the Snapshotter Node on your Windows system. - -If you encounter any issues while operating the node, please refer our [troubleshooting section](./troubleshooting-monitoring.md) for guidance on common debugging techniques. - ---- - - - - Currently, there are no specific instructions for running the Snapshotter Node without Docker on Windows. Users are encouraged to use the Docker setup for Windows as detailed in the Docker Setup section above. - - - -
- -Everytime you start or restart the node, it goes through two stages - -### Simulation mode submissions - -This does not count towards your snapshot quota. This is to test whether your node can establish connections to the sequencer over libp2p protocol streams that ultimately enforce the Powerloom Protocol for data markets. - -You will see log messages similar to the one shown below that will ensure that your node has the capability of submitting snapshots to the sequencer. - -![Simulation mode submissions](/images/SimulationSubmission.png) - -:::note -Learn more: -* [Sequencer component](/Protocol/Protocol_v2/sequencer.md) -::: - -:::info -Read more about monitoring and verifying the simulation mode submissions on the [`Monitoring and Troubleshooting`](./troubleshooting-monitoring.md) page. -::: - -### Regular snapshot submissions - -Once you can verify the simulation mode submissions, you will have log messagse similar to the one shown below that will ensure that your node is capturing epoch releases and submitting snapshots to the sequencer. - -:::note -It usually takes 2 - 5 minutes between the simulation mode submissions and a subsequence epoch release to be caught to trigger the regular snapshot submissions. -::: - -![Sample node logs](/images/RegularSubmission.png) - -:::info -For further details on using the snapshotter dashboard to monitor the running status of your node, check the [`Monitoring Node Activity with the Snapshotter Dashboard`](./troubleshooting-monitoring.md#11-monitoring-node-activity-with-the-snapshotter-dashboard) section. -::: - - ---- - -## Alternative Setup: Snapshotter CLI - -For operators who prefer a streamlined setup process or need to manage multiple nodes, we offer the **Powerloom Snapshotter CLI**. This tool provides: - -- **Interactive configuration** with guided prompts -- **Simplified deployment** process -- **Unified management** of multiple instances -- **Built-in diagnostics** and troubleshooting - -:::tip When to Use the CLI -The CLI is particularly useful if you: -- Plan to run multiple snapshotter nodes -- Want a simpler configuration process -- Need to manage nodes across different environments (devnet/mainnet) -::: - -Learn more: [Snapshotter CLI Documentation](/build-with-powerloom/snapshotter-node/lite-node-v2/cli) - ---- - -## Troubleshooting - -If you encounter any issues, please refer to our [Troubleshooting section](./troubleshooting-monitoring.md) for more information. \ No newline at end of file diff --git a/docs/build-with-powerloom/devnet/troubleshooting-monitoring.md b/docs/build-with-powerloom/devnet/troubleshooting-monitoring.md deleted file mode 100644 index bc2de9eb..00000000 --- a/docs/build-with-powerloom/devnet/troubleshooting-monitoring.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -sidebar_position: 2 -title: Monitoring and Troubleshooting ---- - -# Monitoring and Troubleshooting - -This section will guide you through the process of Monitoring and Troubleshooting the status of your node's snapshotting process on devnet. - -## 1. Confirming and Monitoring Node Snapshotting Process ---- - -### 1.1 Monitoring Node Activity with the Snapshotter Dashboard - - #### Snapshotter Dashboard - The devnet dashboard at https://devnet-mint.powerloom.dev enables you to verify if your node slot is actively submitting snapshots. This same dashboard is used for both minting slots and monitoring your nodes. - - ![Snapshotter-node-dashboard](/images/node-status-dashboard-devnet.png) - - - #### Telegram Reporting Bot - Snapshotter Nodes have the capability to send Telegram messages directly to you if any issues arise during the snapshotting process. See the [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) page for instructions on how to enable this feature. - -### 1.2 Simulation run logs - - While running this node for the first time, it performs a couple of simulation submissions to test its connections to the sequencer network. If you notice logs similar to the lines below in the node run logs, your node's simulation run was successful. - - ![Snapshotter-First-Simulation](/images/SimulationSubmission.png) - -### 1.3 Terminal Status Check -- The primary method to verify node status is through the terminal, which displays log responses from the node. - -- Monitor these logs to assess the health and activity of your node. - -- A healthy snapshotter node will produce logs similar to the provided example screenshot. These logs indicate normal operation and successful snapshotting. - -![Snapshotter-node-running](/images/RegularSubmission.png) - - - -## 2. Troubleshooting and Support ---- - -This section provides guidance on troubleshooting your node in case of encountered issues. The steps outlined below are designed to help identify and resolve common problems efficiently. - -### 2.1. Diagnostic and cleanup script - -The diagnostic and cleanup script will check for any previous instances of the lite node, local collector, stale images and networks. - -```bash -./diagnose.sh -``` - -### 2.2 Check status of running Docker containers - -If you have launched your node using the `./build.sh --devnet` script, you can check the status of your running Docker containers using the following command. - -```bash -docker ps -``` - -Containers with the name patterns -* `snapshotter-lite-v2--devnet--` -* `snapshotter-collector-v2--devnet--` - -For example, if you are participating with -* slot ID 1234 -* on Powerloom Devnet -* in the UniswapV2 data market that lives on Ethereum mainnet, - -you should see the following containers: - -* `snapshotter-lite-v2-1234-devnet-UNISWAPV2-ETH` -- this corresponds to the snapshotter lite node that computes and generates the snapshot -* `snapshotter-collector-v2-1234-devnet-UNISWAPV2-ETH` -- this corresponds to the local collector that collects the snapshot and submits it to the sequencer - -Unless something has gone severely wrong, you should see the status of `healthy` for both such containers. - -#### 2.2.1 Check the logs of the running containers - -You can check the logs of the running containers using the following command: - -```bash -docker logs -``` - -Continuing the example from the previous section, you can check the logs of the `snapshotter-lite-v2-1234-devnet-UNISWAPV2-ETH` container using the following command: - -```bash -docker logs snapshotter-lite-v2-1234-devnet-UNISWAPV2-ETH -n 500 -``` - -This will show you the last 500 lines of the snapshotter lite node container's logs. - -### 2.3 Check the status of the `screen` session - -If you have followed the instructions to run the node from the ['Getting Started'](./getting-started.md) section, you will have a `screen` session running with the name `snapshotter-devnet-node`. - -Verify that the `screen` session is running using the following command: - -```bash -screen -ls -``` - -If you see the `snapshotter-devnet-node` session running, you can attach to it using the following command: - -```bash -screen -r snapshotter-devnet-node -``` - -If everything is working correctly, you should see at least one submission log in the terminal within 3 - 5 minutes, at the most. - -![Regular submissions](/images/RegularSubmission.png) - -:::tip -`screen -R snapshotter-devnet-node` will also attach you to the `snapshotter-devnet-node` session, or create a new one if it doesn't exist. - -This is the first step in the getting started section. -::: - -### 2.4 Stop, kill and cleanup specific slots' runtimes - - -#### 2.4.1 Docker stop and remove containers -You can stop either the snapshotter lite node or the local collector container for specific slots using the following commands. Substitute your slot ID, the following examples are for slot ID `1234`. - -```bash -docker ps --format '{{.Names}}' | grep '1234-devnet-UNISWAPV2-ETH' | xargs docker kill -docker ps --format '{{.Names}}' | grep '1234-devnet-UNISWAPV2-ETH' | xargs docker rm -``` - -To kill all containers running on Powerloom Devnet for a specific data market like UniswapV2 on Ethereum mainnet, you can use the following command: - -```bash -docker ps --format '{{.Names}}' | grep 'devnet-UNISWAPV2-ETH' | xargs docker kill -docker ps --format '{{.Names}}' | grep 'devnet-UNISWAPV2-ETH' | xargs docker rm -``` - -#### 2.4.2 Remove screens - -If you are using a single node setup, you can kill the screen session using the following command: - -```bash -screen -X -S snapshotter-devnet-node quit -``` - -### 2.4 Editing the environment file - -The environment file required to participate in a datamarket is located in the `powerloom-devnet` directory. It will contain the namespace `devnet` along with - -* the data market name, for eg `UNISWAPV2` or `AAVEV3` -* the data market's data source chain, for eg `ETH` to determine whether the UniswapV2 data being captured is on Ethereum mainnet. - -For the section below, we will assume the `.env-devnet-UNISWAPV2-ETH ` file. You can see the same file name showing up during the first few steps of running `./build.sh --devnet` if you have already completed the configuration. - - -:::note -Please be advised that the env file is named as `.env-devnet--` for nodes participating in the devnet. - -If this was the Aave V3 data market, for example, the env file would be named `.env-devnet-AAVEV3-ETH`. -::: - -The `.env` file contains essential configuration details such as `SOURCE_RPC_URL`, `SIGNER_WALLET_ADDRESS`, `SIGNER_PRIVATE_KEY`, and `SLOT_ID`. Should you need to modify any of these variables, follow the steps below: - - -1. **Navigating to the Node Directory:** - Change to the directory where your Powerloom Snapshotter Node is located: - -```bash - cd powerloom-devnet -``` - -3. **Editing the `.env-devnet-UNISWAPV2-ETH` File:** - Open the `.env-devnet-UNISWAPV2-ETH` file for editing: - -```bash - nano .env-devnet-UNISWAPV2-ETH -``` - -1. **Modifying Variables:** - Update the variables as needed. To save and exit, press `CTRL+X`. - -2. **Rebuilding the Node:** - In the same directory, rerun the `build.sh` script with the devnet flag to apply the changes. Execute the following command in the terminal: - -```bash - ./build.sh --devnet -``` - -This process allows you to easily update your node's configuration settings directly on the server. - ---- - -### 2.5 Using the `build.sh --devnet` script to reconfigure the node - -The `build.sh` script with the `--devnet` flag is a powerful tool that allows you to reconfigure the node with a single command. It will re-run the setup process, including the environment file update, and rebuild the node. - -```bash -./build.sh --devnet -``` - -When it asks you whether you want to update the existing env file, select `y` to proceed. - -:::warning Important -Always remember to use the `--devnet` flag when running `build.sh` for devnet nodes. This ensures your node connects to the Powerloom devnet chain instead of mainnet. -::: - - - -### 2.6 Data source RPC URLs -Sometimes, you may encounter errors related to the RPC URL you have configured to snapshot the data source, for eg UniswapV2 or Aave V3 data on Ethereum mainnet. Should this occur, it's important to verify that your RPC URL is accurate. For instructions on changing the RPC URL, please refer to the previously mentioned section. - -While we can not recommend any specific RPC provider and would let the community decide on the best provider, there are several reliable and proven options, including: - -- **Ankr**: `https://rpc.ankr.com/eth` - This is a public RPC service that does not require signup. -- **Infura**: Requires signup to obtain a key, which is ideal if you wish to monitor your RPC usage. -- **Alchemy**: Similar to Infura, signup is necessary to receive a key, offering the advantage of tracking your RPC usage. - ---- - - -## Additional Support - -If you have followed these troubleshooting steps and still encounter issues, please contact us on [discord](https://discord.com/invite/powerloom) for further assistance. Our goal is to ensure your node runs smoothly, and we're here to help with any challenges you might face. - -:::tip Devnet Tokens -If you need tokens for the Powerloom devnet chain, visit the faucet at https://devnet-faucet.powerloom.dev -::: \ No newline at end of file diff --git a/docs/build-with-powerloom/introduction.md b/docs/build-with-powerloom/introduction.md index db3dc01e..5bdf4ab3 100644 --- a/docs/build-with-powerloom/introduction.md +++ b/docs/build-with-powerloom/introduction.md @@ -11,10 +11,6 @@ The overall architecture of the Powerloom protocol is illustrated below: One of the most crucial components of the Powerloom protocol is the Snapshotter peer. A Snapshotter is a node responsible for reading data from various blockchains and sending it to the Powerloom consensus protocol for validation. Anyone can run a Snapshotter node and join the Powerloom network. -Building a new use case can often be tricky because more documentation and examples are needed. This section will provide a comprehensive walkthrough on building a new use case on top of the Powerloom Protocol. - -We aim to build a community-owned repository of a broad use case implementation with anyone who can contribute. It needs a couple of `.env` variables linking to the repository with use case and configuration files. - -We aim to build a marketplace where anyone can deploy their use case and start creating value. +Powerloom's current data access direction starts with the BDS data market: verified, DSV-finalized Uniswap V3 data served through metered HTTP routes and agent-friendly access layers. Let's dive into the Snapshotter node and see how it all works! diff --git a/docs/build-with-powerloom/snapshotter-node/architecture.md b/docs/build-with-powerloom/snapshotter-node/architecture.md index 56dbdfb2..e7bb9213 100644 --- a/docs/build-with-powerloom/snapshotter-node/architecture.md +++ b/docs/build-with-powerloom/snapshotter-node/architecture.md @@ -5,7 +5,7 @@ sidebar_position: 1 # Architecture The Snapshotter Peer is designed with a modular and highly configurable architecture, allowing for easy customization and seamless integration with a diverse set of data markets. -![Submodule architecture of the Snapshotter](/images/submodule_architecture.png) +![Modular architecture of the Snapshotter](/images/submodule_architecture.png) ## Snapshotter Core @@ -13,15 +13,15 @@ This foundational component defines all the essential interfaces and handles a w ## Data Market Specifics -Use case-specific logic for generating snapshots and other configurations are available as [Git submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules), which can be pulled in as desired. Currently, you can find diverse use cases that serve customized datapoints and track activity across multiple data source chains like Ethereum Mainnet, Polygon zkEVM, Polygon PoS, etc. +Market-specific logic for generating snapshots and related configuration is pulled in by the node's build and run scripts at runtime. Lite and full-node deployments use this mechanism to bind the node to the compute and config modules required by a given data market. * DEXs like Uniswap v2, Quickswap * Bridges like bungee.exchange, Owlto finance * Lending markets like Aave and Compound -The architecture has been designed to facilitate the seamless interchange of configuration and modules. Adapting the system to different use cases is as straightforward as changing a Git branch. +The architecture has been designed to facilitate the seamless interchange of configuration and modules. Adapting the system to different markets is handled by selecting the compute and config repositories, branches, and commits that the setup scripts pull during deployment. -You can observe the corresponding branches within [snapshotter-configs](https://github.com/powerloom/snapshotter-configs/) and [snapshotter-computes](https://github.com/powerloom/snapshotter-computes/) repos: +You can observe market-specific modules in the [snapshotter-configs](https://github.com/powerloom/snapshotter-configs/) and [snapshotter-computes](https://github.com/powerloom/snapshotter-computes/) repos: #### Snapshotter Computes * `eth_uniswapv2`: Pooler implementation for the Uniswap v2 dashboard @@ -41,14 +41,14 @@ You can observe the corresponding branches within [snapshotter-configs](https:// ### Configuration Files -Configuration files, located in the `/config` directory and linked to [snapshotter-configs](https://github.com/powerloom/snapshotter-configs/) repo, play a pivotal role in defining project types, specifying paths for individual compute modules, and managing various project-related settings. +Configuration files are pulled from [snapshotter-configs](https://github.com/powerloom/snapshotter-configs/) into the node's `/config` directory during setup. They define project types, specify paths for individual compute modules, and manage data-market settings. ### Compute Modules -The heart of the system resides in the `snapshotter/modules` directory, linked to [snapshotter-computes](https://github.com/powerloom/snapshotter-computes/), where the actual computation logic for each project type is defined. These modules drive the snapshot generation process for specific project types. +The computation logic is pulled from [snapshotter-computes](https://github.com/powerloom/snapshotter-computes/) into the node runtime during setup. These modules drive snapshot generation for specific project types and markets. -## Building Your Own Use Case -Working on a new use case is as simple as writing a new compute module and adding a new configuration file. Instructions to get started in `build-dev.sh` mode are available in the [Deploy repo](https://github.com/powerloom/deploy/tree/devnet). +## Building Your Own Data Market +Working on a new data market starts with writing a compute module and adding the corresponding configuration. # Useful Links diff --git a/docs/build-with-powerloom/snapshotter-node/core-api/_category_.json b/docs/build-with-powerloom/snapshotter-node/core-api/_category_.json index 25a5eab8..cf8c0dae 100644 --- a/docs/build-with-powerloom/snapshotter-node/core-api/_category_.json +++ b/docs/build-with-powerloom/snapshotter-node/core-api/_category_.json @@ -3,6 +3,6 @@ "position": 4, "link": { "type": "generated-index", - "description": "Snapshotter Core API" + "description": "How snapshotter full-node resolver APIs fit into a data market ecosystem." } } \ No newline at end of file diff --git a/docs/build-with-powerloom/snapshotter-node/core-api/index.md b/docs/build-with-powerloom/snapshotter-node/core-api/index.md index a903a3c0..a3de7bf8 100644 --- a/docs/build-with-powerloom/snapshotter-node/core-api/index.md +++ b/docs/build-with-powerloom/snapshotter-node/core-api/index.md @@ -2,10 +2,47 @@ sidebar_position: 0 --- -# Introduction +# Snapshotter Core API -The Core API facilitates access to the finalized protocol state on the smart contract running on the anchor chain. Although it is possible to directly query the smart contract, it is not recommended due to its expense and slowness. Instead, you can use the Core API to access the finalized state. Every snapshotter node runs a Core API service that can be accessed by other services or applications. +The Snapshotter Core API is the HTTP serving layer exposed by a snapshotter full node. In the current BDS architecture, this role is best understood as a **resolver node**: it resolves finalized protocol outputs into application-ready API responses. -We have hosted snapshotter nodes for UniswapV2 Powerloom Protocol's testnet. You can interact with those endpoints directly from the next couple of sections. +For BDS consumers, the product-facing version of this idea is documented in: -NOTE: This endpoint might change later +- [Snapshotter Full Node as Resolver](/bds-data-market/snapshotter-full-node-as-resolver) +- [Endpoint Catalog](/bds-data-market/endpoint-catalog) +- [Verification in Agent Workflows](/agents-and-bds/verification-in-agents) + +## Where Core API Fits + +A data market ecosystem has three separate concerns: + +- **Data production:** snapshotter lite or full nodes compute market snapshots and submit them for DSV finalization. +- **Finalization:** DSV validators finalize canonical CIDs and anchor those references in `ProtocolState`. +- **Resolution and serving:** a snapshotter full node reads finalized state, retrieves payloads, applies market-specific parsing, and serves HTTP responses. + +The Core API belongs to the third layer. It should not be treated as a separate source of truth. The source of truth is finalized protocol state; the API is a resolver that makes that state useful for applications and agents. + +## Current BDS Resolver Path + +```mermaid +flowchart LR + C[Client or Agent] --> API["Snapshotter full-node Core API"] + API --> PS["ProtocolState on Powerloom mainnet"] + API --> IPFS["IPFS finalized payload"] + API --> R["Redis caches"] + API --> OUT["Market-specific JSON or SSE"] +``` + +The hosted BDS access path exposes this through metered `/mpp/...` routes. Route families are listed in the [Endpoint Catalog](/bds-data-market/endpoint-catalog). + +## Verification Contract + +Core API responses for BDS should preserve enough provenance for consumers to verify the result. Agent-facing BDS responses include a `verification` object with the CID, epoch, project ID, protocol state contract, and data market contract. + +Agents can then confirm the response with: + +```solidity +ProtocolState.maxSnapshotsCid(dataMarket, projectId, epochId) +``` + +See [Verification in Agent Workflows](/agents-and-bds/verification-in-agents) for the practical flow used by MCP tools, `bds-agent`, and downstream alerts. diff --git a/docs/build-with-powerloom/snapshotter-node/data.md b/docs/build-with-powerloom/snapshotter-node/data.md index 2d4a151e..acae621d 100644 --- a/docs/build-with-powerloom/snapshotter-node/data.md +++ b/docs/build-with-powerloom/snapshotter-node/data.md @@ -4,82 +4,48 @@ sidebar_position: 5 # All About Data -So far, we've discussed a lot about the verifiability and decentralization of data. Now, let's delve into the details of how data is stored, verified, and accessed. +Powerloom data should be consumed as finalized protocol output, not as an opaque API response. In the current BDS direction, data access starts with resolver APIs and remains verifiable through the provenance attached to each response. -## Data Storage +## Data Resolution Path -Data is stored in a decentralized manner using IPFS, a peer-to-peer network for storing and sharing data in a distributed file system. IPFS aims to replace HTTP and build a better web for all of us. It is a peer-to-peer distributed file system that connects all computing devices with the same system of files. In some ways, IPFS is similar to the Web, but it could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. +For BDS, a snapshotter full node acts as the resolver. It maps a consumer request to the correct project ID and epoch, resolves the finalized CID from Powerloom mainnet `ProtocolState`, retrieves the payload, and returns a market-specific response shape. -In other words, IPFS provides a high-throughput content-addressed block storage model, with content-addressed hyperlinks. This forms a generalized Merkle DAG, a data structure upon which one can build versioned file systems, blockchains, and even a Permanent Web. IPFS combines a distributed hashtable, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other. - -Every file and every block of data on the network has a unique hash associated with it, called a CID (Content Identifier), used to identify and retrieve the data. - -## Fetching CID and Verifying it On-Chain - -![API Calls for a certain CID](/images/uniswap-inspect.png) - -For instance, the Powerloom Uniswap V2 dashboard (https://uniswapv2.powerloom.io/) connects to a snapshotter node hosted by the Powerloom Foundation. The frontend interacts with the Snapshotter Core API to access the data. Internally, the Core API interacts with the Protocol State Contract deployed on Powerloom Prost chain to fetch the data. - -### Verifying Data - -To verify the data, you need the Prost chain RPC Url and the address of the deployed protocol state contract. Find these details in the `env.example` file in the Powerloom [deploy](https://github.com/powerloom/deploy/) repository. - -#### Adding the Chain to the Wallet - -Once you have these details: - -1. Open MetaMask or any web3 plugin in your browser. -2. Go to the network selection area. -3. Choose to add a new network. -4. Enter the RPC URL and contract address found in the `env.example` file. - -This allows you to connect to the Powerloom Prost chain. The MetaMask example is shown in the screenshot below. - -Note: The RPC URL and the contract address in the screenshot below are for reference. You need to use the ones from the `env.example` file. - -![Chain Details](/images/Chain-details.png) - -#### Accessing the ABI of the Protocol State Contract - -To access the ABI of the protocol state contract from the Powerloom project, follow these steps: +```mermaid +flowchart LR + A[Agent or Application] --> R["Snapshotter full-node resolver"] + R --> PS["ProtocolState"] + R --> IPFS["IPFS payload"] + R --> API["BDS API response"] + API --> V["verification object"] +``` -1. Visit the Powerloom 'pooler' repository on GitHub at this URL: [Powerloom pooler repository - ProtocolContract.json](https://github.com/powerloom/pooler/blob/main/snapshotter/static/abis/ProtocolContract.json). -2. Locate the `ProtocolContract.json` file. -3. Copy the contents of the file. -4. Open the Remix IDE. -5. Create a new file with a `.abi` extension. -6. Paste the contents of the `ProtocolContract.json` file into this new file. -7. Save the file in Remix. +The resolver concept is documented in [Snapshotter Full Node as Resolver](/bds-data-market/snapshotter-full-node-as-resolver), and the current BDS route surface is listed in the [Endpoint Catalog](/bds-data-market/endpoint-catalog). -This process makes the protocol state contract’s ABI available in the Remix editor for further development or interaction. +## Verification Comes With the Data -![ABI Interaction](/images/abi-interaction.png) +BDS responses from supported routes include a `verification` object. That object tells consumers how to check the API response against finalized on-chain state. -**Verifying Datasets** +The important fields are: -To verify data for any Project ID, follow these steps: +- `cid`: the finalized content identifier, +- `epochId`: the finalized epoch or source block, +- `projectId`: the market-specific project identifier, +- `protocolState`: the Powerloom protocol state contract, +- `dataMarket`: the data market contract. -1. Identify the last finalized epoch associated with the project ID, e.g., `aggregate_24h_top_pairs_lite:10ecae2f52160690abffff26efeb45568e5d67ea0bc7d4485d9ffb10ef437f33:UNISWAPV2`. -2. Retrieve the finalized CID (Content Identifier) for this epoch. -3. Access the dataset linked to this CID either through your local IPFS node or by using a public IPFS gateway (Public gateway link: https://ipfs.io/ipfs/{IPFS-CID}) +Consumers verify the response by checking `ProtocolState.maxSnapshotsCid(dataMarket, projectId, epochId)` and comparing the returned CID to `verification.cid`. -The logic to retrieve the CID from the protocol state contract can be extracted from the Snapshotter Core API codebase. +## Agent Workflows -Here's the code to find the last finalized epoch for a project ID: -```python reference -https://github.com/powerloom/pooler/blob/d8b7be32ad329e8dcf0a7e5c1b27862894bc990a/snapshotter/core_api.py#L248-L339 -``` +Agent workflows should carry provenance forward. If an agent emits an alert, report, or downstream action from BDS data, it should include the verification block or a derived verification result. -Call the relevant functions in the loaded Protocol state contract ABI in the Remix IDE to fetch the data. +The canonical guide is [Verification in Agent Workflows](/agents-and-bds/verification-in-agents). It covers: -:::tip -Sometimes, the IPFS gateway can be overloaded or data might not be peer-to-peer replicated, resulting in no output. In that case, you can tunnel into your node and verify the data. +- verifying a payload directly against `ProtocolState`, +- using the MCP `verify_data_provenance` tool, +- enabling `verify: true` in `bds-agent`, +- preserving provenance in alerts. -```bash -ssh -nNTv -L 5001:127.0.0.1:5001 root@yourServerIP -``` +## Why This Matters -```bash -ipfs cat bafkreifc33xiuqaf5nxqad2syn7j5x27j2pujzr7hhsxgtsr7zor4svqie --api /ip4/127.0.0.1/tcp/5001 -``` -::: \ No newline at end of file +Resolver APIs make finalized data convenient to consume, but verification keeps them trust-minimized. Applications and agents get normal HTTP or SSE ergonomics while still being able to prove that a response maps to DSV-finalized state. diff --git a/docs/build-with-powerloom/snapshotter-node/full-node/_category_.json b/docs/build-with-powerloom/snapshotter-node/full-node/_category_.json index cef196de..4044457b 100644 --- a/docs/build-with-powerloom/snapshotter-node/full-node/_category_.json +++ b/docs/build-with-powerloom/snapshotter-node/full-node/_category_.json @@ -3,6 +3,6 @@ "position": 2, "link": { "type": "generated-index", - "description": "Snapshotter Full Node has significantly complex architecture and is designed to be run on a dedicated server. For building and snapshotter for complex use cases involving aggregation, it is recommended to use Full Node." + "description": "Snapshotter Core Edge is the full-node stack for distributed data-market and resolver-node operators." } } \ No newline at end of file diff --git a/docs/build-with-powerloom/snapshotter-node/full-node/getting-started.md b/docs/build-with-powerloom/snapshotter-node/full-node/getting-started.md index 5e327412..47b9dcae 100644 --- a/docs/build-with-powerloom/snapshotter-node/full-node/getting-started.md +++ b/docs/build-with-powerloom/snapshotter-node/full-node/getting-started.md @@ -1,137 +1,87 @@ --- -sidebar_position: 2 +sidebar_position: 0 +title: Snapshotter Core Edge --- -# Getting Started -Snapshotter (Full Node) has a complex architecture with multiple moving parts. The easiest way to get started is by using the Docker-based setup, recommended for most users. +# Snapshotter Core Edge -:::info -#### You can use Powerloom to build extensive data applications. Our Devnet is live. Read more about Devnet [here](../../devnet/getting-started.md) -::: +The snapshotter full node is now represented by [`powerloom/snapshotter-core-edge`](https://github.com/powerloom/snapshotter-core-edge). It is not a lightweight single-machine onboarding path. It is the production-grade snapshotter stack for mature operators who can run, observe, and scale multiple services around a data market. -## System Requirements +For most operators who only need to participate in the current BDS Mainnet market, use the [Snapshotter Lite V2 setup](/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started). The full-node stack is for operators who can dedicate resources to the core service, Redis, IPFS or equivalent storage access, RPC capacity, and the `snapshotter-periphery-*` services. -1. Latest version of `docker` (`>= 20.10.21`) and `docker-compose` (`>= v2.13.0`) +## What Core Edge Does -2. At least 4 core CPU, 8GB RAM, and 50GB SSD - make sure to choose the correct spec when deploying to Github Codespaces. +`snapshotter-core-edge` is a modular full-node implementation. It combines: -3. IPFS node - - While we have __included__ a node in our autobuild Docker setup, IPFS daemon can hog __*a lot*__ of resources - it is not recommended to run this on a personal computer unless you have a strong internet connection and dedicated CPU+RAM. - - - 3rd party IPFS services that provide default IPFS interface like Infura are now supported. +- a core snapshotter service that coordinates epoch processing and workers, +- Redis-backed queues and caches, +- compute modules pulled into the runtime's `computes` layout, +- data-market configuration modules pulled into the runtime's `config` layout, +- peripheral services for block fetching, transaction processing, and epoch synchronization, +- and a Core API that exposes finalized data through resolver-style HTTP routes. -4. RPC URL for `Ethereum mainnet` or the chain you're working on. +That Core API is why full nodes now also fill the role of **resolver nodes**. A resolver node turns finalized protocol outputs into application-ready API responses by resolving the right project ID, epoch, finalized CID, cached payload, and response shape. -:::note -RPC usage can depend on your use case. If your use case is complicated and needs to make a lot of RPC calls, it is recommended to run your own RPC node instead of using third-party RPC services as it can be expensive. +## Fit in a Distributed Deployment -In any case, it is highly recommended to signup with one of these providers to at least track usage even if you aren't on a paid plan: [Alchemy](https://alchemy.com/?r=15ce6db6d0a109d5), [Infura](https://infura.io), [Quicknode](https://www.quicknode.com?tap_a=67226-09396e&tap_s=3491854-f4a458), etc. Please reach out to us if none of the options are viable. -::: +In a mature deployment, Core Edge should be treated as an orchestrated service group rather than a single process. +```mermaid +flowchart LR + RPC[Source-chain RPC] --> BF["snapshotter-periphery-blockfetcher"] + RPC --> TP["snapshotter-periphery-txprocessor"] + PS["Powerloom ProtocolState"] --> ES["snapshotter-periphery-epochsyncer"] + BF --> R[(Redis)] + TP --> R + ES --> R + R --> CORE["snapshotter-core-edge workers"] + CORE --> IPFS["IPFS / storage layer"] + CORE --> API["Core API resolver"] + API --> C["Applications, agents, or metered BDS routes"] +``` -## Running the Node -Whether you are developing your own application or extending our existing use cases, setting up your Snapshotter node is a crucial step. Follow the process outlined below to ensure a smooth setup: +The `snapshotter-periphery-*` services are intended to be deployed and scaled separately: -### For Snapshotters (Existing Use Cases) +- [`snapshotter-periphery-blockfetcher`](https://github.com/powerloom/snapshotter-core-edge/tree/main/snapshotter-periphery-blockfetcher) keeps source-chain block data available in Redis. +- [`snapshotter-periphery-txprocessor`](https://github.com/powerloom/snapshotter-core-edge/tree/main/snapshotter-periphery-txprocessor) prepares transaction data for downstream workers. +- [`snapshotter-periphery-epochsyncer`](https://github.com/powerloom/snapshotter-core-edge/tree/main/snapshotter-periphery-epochsyncer) watches epoch release events and forwards work when required block and transaction data is ready. -1. **Cloning the Deploy Repo** - Clone the repository against the respective branch (main by default). Open the terminal and run the below command to clone the deploy repo in a directory named `powerloom_deploy`. - ```bash - git clone https://github.com/powerloom/deploy.git --single-branch powerloom_deploy --branch main && cd powerloom_deploy - ``` +Seasoned operators can scale these services independently based on bottlenecks: RPC throughput, block ingestion, transaction processing, worker queue depth, Redis pressure, or API traffic. -2. **Configuring The Node** - Copy `env.example` to `.env`. - - Ensure the following required variables are filled: - - `SOURCE_RPC_URL`: The URL for the source RPC (Remote Procedure Call) service. - - `SIGNER_ACCOUNT_ADDRESS`: The address of the signer account. - - `SIGNER_ACCOUNT_PRIVATE_KEY`: The private key corresponding to the signer account address. - - Optionally, you may also set the following variables: - - `PROST_RPC_URL`: The URL for the PROST RPC service. - - `IPFS_URL`: The URL for the IPFS (InterPlanetary File System) service in HTTP(s) (e.g. `https://ipfs.infura.io:5001`) multiaddr format (e.g. `/dns4/ipfs.infura.io/tcp/5001/https`) - - `IPFS_API_KEY`: The API key for the IPFS service (if required). - - `IPFS_API_SECRET`: The API secret for the IPFS service (if required). - - `PROTOCOL_STATE_CONTRACT`: The contract address for the protocol state. - - `RELAYER_HOST`: The host address for the relayer. - - `SLACK_REPORTING_URL`: The URL for reporting to Slack. - - `POWERLOOM_REPORTING_URL`: The URL for reporting to Powerloom. - - `WEB3_STORAGE_TOKEN`: The token for Web3.Storage. You can generate or retrieve this token from your [API tokens page](https://web3.storage/tokens/?create=true) after signing up for a free plan at web3.storage. +## Resolver Node Role -3. **Running the Node** - Run `./build.sh` (ideally in a `screen`) to start the Snapshotter Node +The Core API is the serving layer for finalized data. For BDS, this is the same pattern described in [Snapshotter Full Node as Resolver](/bds-data-market/snapshotter-full-node-as-resolver). - +At request time, a resolver node: -### For Developers (New Use Cases) -Extending existing use cases or building your own use cases requires a slightly different setup. Follow the process outlined below to ensure a smooth setup: +1. maps the API route to the relevant market-specific project ID, +2. resolves the finalized CID for the requested epoch from `ProtocolState`, +3. uses Redis for cached epoch and payload metadata, +4. retrieves the finalized payload from IPFS or the configured storage layer, +5. parses it through market-specific logic, +6. returns JSON or streaming responses to consumers. +The public BDS route surface is documented in the [Endpoint Catalog](/bds-data-market/endpoint-catalog). Agent-facing usage should preserve the provenance model described in [Verification in Agent Workflows](/agents-and-bds/verification-in-agents). -1. **Forking the Computes and Config templates** - For an optimized development process, it's recommended to fork the templates for [snapshotter-computes](https://github.com/powerloom/snapshotter-computes) and [snapshotter-configs](https://github.com/powerloom/snapshotter-configs/). Our system utilizes the Git submodule architecture to manage these components efficiently. For a deeper understanding of how these elements integrate and function within our larger system, please refer to our [architecture documentation](../architecture.md). This approach ensures a streamlined and cohesive development workflow. +## Plug-In Data Market Model - - Snapshotter Configs: https://github.com/powerloom/snapshotter-configs - - Snapshotter Computes: https://github.com/powerloom/snapshotter-computes +Core Edge is designed to launch full nodes for different data markets by changing the compute and configuration modules that the build and run scripts pull at deployment time. - Once the above branches are forked, you should have the above two repositories in your profile. +- **Compute modules** define how market-specific snapshots and aggregates are built. +- **Configuration modules** define project types, data sources, aggregation dependencies, preloaders, and market settings. +- **Workers** are generated and routed from those configs, allowing the same core runtime to support different market shapes. -2. **Cloning the Deploy Repo** - Clone the repository against the testnet branch. Open the terminal and run the below command to clone the deploy repo in a directory named `powerloom_deploy`. +This is the full-node counterpart to the BDS direction: a reusable resolver and worker runtime where markets are plugged in at runtime through compute and config modules rather than through a bespoke application stack. - ```bash - git clone https://github.com/powerloom/deploy.git --single-branch powerloom_deploy --branch better_dev_workflow && cd powerloom_deploy - ``` -3. **Configuring The Node** - When you are in the deploy repo's directory, create a new file `.env`. +## Operator Expectations - Copy `env.example` to `.env`. +Run Core Edge when you are prepared to operate infrastructure, not just run a node binary. A realistic deployment needs: - - Ensure the following required variables are filled: +- dedicated Redis capacity and monitoring, +- reliable source-chain RPC access with rate-limit planning, +- IPFS or compatible storage access, +- observability for worker queues, periphery services, and API latency, +- autoscaling or manual capacity planning for the `snapshotter-periphery-*` components, +- and deployment isolation between data ingestion, snapshot workers, and Core API serving. - - `SOURCE_RPC_URL`: The URL for the Ethereum RPC (Local node/Infura/Alchemy) service. - - `SIGNER_ACCOUNT_ADDRESS`: The address of the signer account. This is your whitelisted address on the protocol. **Using a burner account is highly recommended** - - `SIGNER_ACCOUNT_PRIVATE_KEY`: The private key corresponding to the signer account address. - - Configure `SNAPSHOT_CONFIG_REPO` and `SNAPSHOT_CONFIG_REPO_BRANCH` to point to your forked snapshotter-configs repository. - - Configure `SNAPSHOTTER_COMPUTE_REPO` and `SNAPSHOTTER_COMPUTE_REPO_BRANCH` to point to your forked snapshotter-computes repository. - - Optionally, you may also set the following variables: - - `PROST_RPC_URL`: The URL for the PROST RPC service. - - `PROTOCOL_STATE_CONTRACT`: The contract address for the protocol state. - - `RELAYER_HOST`: The host address for the relayer. - - `NAMESPACE`: The unique key used to identify your project namespace around which all consensus activity takes place. - - `POWERLOOM_REPORTING_URL`: The URL for reporting to Powerloom. - - `PROST_CHAIN_ID`: The chain ID for the PROST RPC service. - - `IPFS_URL`: The URL for the IPFS (InterPlanetary File System) service in HTTP(s) (e.g. `https://ipfs.infura.io:5001`) multiaddr format (e.g. `/dns4/ipfs.infura.io/tcp/5001/https`) - - `IPFS_API_KEY`: The API key for the IPFS service (if required). - - `IPFS_API_SECRET`: The API secret for the IPFS service (if required). - - `SLACK_REPORTING_URL`: The URL for reporting to Slack. - - `WEB3_STORAGE_TOKEN`: The token for Web3.Storage. You can generate or retrieve this token from your [API tokens page](https://web3.storage/tokens/?create=true) after signing up for a free plan at web3.storage. - -4. **Setting up the codebase** - Setup codebase by running `bootstrap.sh` command. - - In the terminal, you can run the following command: - - ```bash - ./bootstrap.sh - ``` - - :::note - This is a one time step and resets the codebase to the latest version of the branch. If you have made any changes to the codebase, make sure to commit them before running this command. You need to run this command only once after cloning the repository. - ::: - -- **Running the Node** - Run `./build.sh` (ideally in a `screen`) to start the Snapshotter Node - - -## Troubleshooting Errors - -If the `.env` is filled up correctly, all services will execute one by one. The logs do fill up quickly. So, remember to [safely detach](https://linuxize.com/post/how-to-use-linux-screen/) from the screen when not using it. If you see the following error, - - powerloom_depoy-pooler-1 | Snapshotter identity check failed on protocol smart contract - powerloom_depoy-pooler-1 exited with code 1 - -your Snapshotter address is not registered. Make sure you have registered for our [devnet program](https://airtable.com/appr3wKRsn4VoOvpi/pagxxT6QcL0OwGH0e/form) and your burner wallet has been added. - -Refer to our [troubleshooting guide](./troubleshooting.md) if you encounter any other issues with your node. - -## Stopping the Node -1. To shutdown services, just press `Ctrl+C` (and again to force). - -:::note -If you don't keep services running for extended periods of time, this will affect consensus and we may be forced to deactivate your snapshotter account. -::: - -2. If you see issues with data, you can do a clean *reset* by running the following command before restarting step 1: - - `docker-compose --profile ipfs down --volumes` +Core Edge is therefore the right fit for data-market operators, resolver operators, and infrastructure teams supporting high-throughput markets. It is not the recommended path for slot operators joining BDS Mainnet; that path remains [Snapshotter Lite V2](/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started). diff --git a/docs/build-with-powerloom/snapshotter-node/full-node/health-tracking.md b/docs/build-with-powerloom/snapshotter-node/full-node/health-tracking.md deleted file mode 100644 index fa9849f2..00000000 --- a/docs/build-with-powerloom/snapshotter-node/full-node/health-tracking.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Health Tracking - -All snapshotter implementations include internal APIs that offer a detailed view of the state of processing for projects as configured by data sources, per epoch. - -You can tunnel into port `8002` of an instance running the snapshotter and try out the internal APIs, among others, by visiting the FastAPI-generated SwaggerUI. - -## `GET /internal/snapshotter/epochProcessingStatus` - -As detailed in the section on [epoch processing state transitions](/Protocol/Specifications/Epoch#state-transitions), this internal API endpoint provides detailed insights into each epoch's processing status as it passes through the snapshot builders and is sent out for consensus. - -> NOTE: The endpoint, though paginated and cached, serves a raw dump of insights into an epoch's state transitions, and the payloads are significantly large enough for requests to timeout or clog the internal API's limited resources. Hence, it is advisable to query somewhere between 1 to 5 epochs. The same can be specified as the size query parameter. - -### Sample request - -```bash -curl -X 'GET' \ - 'http://localhost:8002/internal/snapshotter/epochProcessingStatus?page=1&size=3' \ - -H 'accept: application/json' -``` - -### Sample response -```json -{ - "items": [ - { - "epochId": 43523, - "transitionStatus": { - "EPOCH_RELEASED": { - "status": "success", - "error": null, - "extra": null, - "timestamp": 1692530595 - }, - "PRELOAD": { - "pairContract_pair_total_reserves": { - "status": "success", - "error": null, - "extra": null, - "timestamp": 1692530595 - }, - }, - "SNAPSHOT_BUILD": { - "aggregate_24h_stats_lite:35ee1886fa4665255a0d0486c6079c4719c82f0f62ef9e96a98f26fde2e8a106:UNISWAPV2": { - "status": "success", - "error": null, - "extra": null, - "timestamp": 1692530596 - }, - }, - "SNAPSHOT_SUBMIT_PAYLOAD_COMMIT": { - - }, - "RELAYER_SEND": { - - }, - "SNAPSHOT_FINALIZE": { - - }, - }, - } - ], - "total": 3, - "page": 1, - "size": 3, - "pages": 1 -} -``` - -## `GET /internal/snapshotter/status` - -Returns the overall status of all the projects - -### Sample request - -```bash -curl -X 'GET' \ - 'http://localhost:8002/internal/snapshotter/status' \ - -H 'accept: application/json' -``` - -### Sample response - -```json -{ - "totalSuccessfulSubmissions": 10, - "totalMissedSubmissions": 5, - "totalIncorrectSubmissions": 1, - "projects":[ - { - "projectId": "projectid" - "successfulSubmissions": 3, - "missedSubmissions": 2, - "incorrectSubmissions": 1 - }, - ] -} -``` - -## `GET /internal/snapshotter/status/{project_id}` - -Returns project specific detailed status report with snapshot data - -### Sample request - -```bash -curl -X 'GET' \ - 'http://localhost:8002/internal/snapshotter/status/project1122' \ - -H 'accept: application/json' -``` - -### Sample response - -```json -{ - "missedSubmissions": [ - { - "epochId": 10, - "finalizedSnapshotCid": "cid", - "reason": "error/exception/trace" - } - ], - "incorrectSubmissions": [ - { - "epochId": 12, - "submittedSnapshotCid": "snapshotcid", - "submittedSnapshot": {}, - "finalizedSnapshotCid": "finalizedsnapshotcid", - "finalizedSnapshot": {}, - "reason": "reason for incorrect submission" - } - ] -} -``` \ No newline at end of file diff --git a/docs/build-with-powerloom/snapshotter-node/full-node/troubleshooting.md b/docs/build-with-powerloom/snapshotter-node/full-node/troubleshooting.md deleted file mode 100644 index 564ae088..00000000 --- a/docs/build-with-powerloom/snapshotter-node/full-node/troubleshooting.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Troubleshooting - - -## Debugging: - -If you are getting an error that says: - -```bash -Container "" is unhealthy. -ERROR: Encountered errors while bringing up the project. -``` - -Check if all the necessary docker containers are up and running. You should see an output against docker ps with the following containers listed: - -```bash -#docker ps - -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -bfa1abe2b8aa powerloom-pooler-frontend "sh -c 'sh snapshott…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp deploy-pooler-frontend-1 -852f3445f11c powerloom-pooler "bash -c 'sh init_pr…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:8002->8002/tcp, :::8002->8002/tcp, 0.0.0.0:8555->8555/tcp, :::8555->8555/tcp deploy-pooler-1 -ee652fda8513 powerloom-audit-protocol "bash -c 'sh init_pr…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 0.0.0.0:9002->9002/tcp, :::9002->9002/tcp deploy-audit-protocol-1 -5547fb5c1ab4 ipfs/kubo:release "/sbin/tini -- /usr/…" 2 hours ago Up 2 hours (healthy) 4001/tcp, 8080-8081/tcp, 4001/udp, 0.0.0.0:5001->5001/tcp, :::5001->5001/tcp deploy-ipfs-1 -999de5864a1b rabbitmq:3-management "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp deploy-rabbitmq-1 -2c14926d7cfd redis "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp deploy-redis-1 -``` - -### Accessing the logs: - -You can access the logs folders if you need to debug or monitor the services running on your Powerloom Snapshotter node. Logs can be found in `/logs` folder in the root directory of your node and the cloned `deploy` repository. - - -These logs can provide valuable information for debugging or troubleshooting purposes. You can use them to identify any service errors or issues and take appropriate actions to resolve them. - -Feel free to explore the logs folders and review the logs of different services to gain insights into the functioning of your Powerloom Snapshotter node. - -If everything is functioning properly and you are able to check the status on the dashboard, it indicates that your node is working correctly. - -:::info -If the issues still persists, you can raise a ticket on our [Discord Support](https://discord.com/channels/777248105636560948/1146936525544759457) -::: \ No newline at end of file diff --git a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/_category_.json b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/_category_.json index 13dba18a..f6e72c3b 100644 --- a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/_category_.json +++ b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/_category_.json @@ -3,6 +3,6 @@ "position": 3, "link": { "type": "generated-index", - "description": "Lite Snapshotter Node has only a single dependency on a Python environment and hence has significantly lower resource requirements than the full Snapshotter Node. It is suitable for simpler use cases where no aggregation is required." + "description": "Lite Snapshotter Node has only a single dependency on a Python environment and hence has significantly lower resource requirements than the full Snapshotter Node. It is suitable for markets where no local aggregation is required." } } \ No newline at end of file diff --git a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/build-sh-advanced.md b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/build-sh-advanced.md deleted file mode 100644 index aa269f26..00000000 --- a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/build-sh-advanced.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -sidebar_position: 3 -title: "build.sh: Advanced Usage and Recipes" ---- - -# `build.sh`: Advanced Usage and Recipes ---- - -## Summary of flags and advanced features - -The `build.sh` CLI supports a number of advanced features to fine tune its behavior and participation in different scenarios. - -### **`--skip-credential-update`** ---- - -This flag is used to skip the prompt that asks you whether you want to update the existing env file. - -Refer: [2.5 Using the `build.sh` script to reconfigure the node](/build-with-powerloom/snapshotter-node/lite-node-v2/monitoring#25-using-buildsh-to-reconfigure-the-node) - - -### **`--no-collector`** ---- - -This flag is used to skip the collector setup. Usually a `build.sh` run will setup the local collector by finding a free port, even if there is already a collector running on the same machine. - -If you wish to run the snapshotter node by sharing the collector with another node, you can use this flag to skip the collector setup. - -:::info -The environment file generated by `build.sh` will have the collector port set to `50051` by default, which means that with the `no-collector` flag, the snapshotter node will now attempt to connect to the collector running on port `50051` without attempting to start a new collector. -::: - - -:::warning -This is to be attempted only if you are sure that the collector is already running for the same data market on which you are running the snapshotter node. Else it might submit your snapshots to the wrong sequencer, and your submissions will be rejected. -::: - - -### **`--data-market-contract-number`** ---- - -This flag corresponds to the data market choice you provide when you first ran the `build.sh` script. - -Refer: [Step 6: Configuring the Node](/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started#step-6-configuring-the-node) - -At the moment of writing this during the mainnet launch, the two data markets supported are - -* `1`: Aave V3 -* `2`: Uniswap V2 (default participation) - -### **`--docker-network-prune`** ---- - -This prunes any old docker networks that are no longer in use by earlier snapshotter lite nodes. - -## Recipe: Running multiple slot IDs for Uniswap V2 data market with the same local collector ---- - -This recipe is courtesy one of our Discord members, `@kobra95`. - -Assuming you have 2 or more slot IDs to run to participate in the Uniswap V2 data market, you can use the `--no-collector` flag to share the collector with other nodes. - -### Step 1: Run the first snapshotter node - -```bash -# go to home directory -cd ~ - -# clone the snapshotter node repo -git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-mainnet1 - -# run new screen session -screen -R powerloom-mainnet1 - -# go to the repo directory -cd powerloom-mainnet1 - -# run the build.sh script -./build.sh --data-market-contract-number 2 - -# confirm everythingis running and detach from screen session with Ctrl+A+D -``` - -### Step 2: Run the second and subsequent snapshotter nodes - -:::tip -* Ensure you have detached from the screen session after running each node with `Ctrl+A+D`. -* Replace `powerloom-mainnet2` with `powerloom-mainnet3` and so on for more nodes. -::: - -```bash -# go to home directory -cd ~ - -# clone the snapshotter node repo -git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-mainnet2 - -# run new screen session -screen -R powerloom-mainnet2 - -# go to the repo directory -cd powerloom-mainnet2 - -# run the build.sh script -./build.sh --data-market-contract-number 2 --no-collector - -# confirm everythingis running and detach from screen session with Ctrl+A+D -``` - diff --git a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/cli.md b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/cli.md index 5fb00f1a..132b6b42 100644 --- a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/cli.md +++ b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/cli.md @@ -93,10 +93,10 @@ If you prefer to run individual commands: ```bash # Configure credentials -powerloom-snapshotter-cli configure --env mainnet --market uniswapv2 +powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3 # Deploy snapshotter instances -powerloom-snapshotter-cli deploy --env mainnet --market uniswapv2 +powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3 # Check status powerloom-snapshotter-cli status @@ -157,12 +157,12 @@ powerloom-snapshotter> configure powerloom-snapshotter-cli configure # With all options specified -powerloom-snapshotter-cli configure --env mainnet --market uniswapv2 --wallet 0x123... +powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3 --wallet 0x123... ``` **Options:** -- `--env, -e`: Powerloom chain name (e.g., devnet, mainnet) -- `--market, -m`: Data market name (e.g., uniswapv2, aavev3) +- `--env, -e`: Powerloom chain name (for BDS Mainnet, use `mainnet`) +- `--market, -m`: Data market name (for BDS Mainnet, use `BDS_MAINNET_UNISWAPV3`) - `--wallet, -w`: Wallet address holding the slots - `--signer, -s`: Signer account address - `--signer-key, -k`: Signer account private key @@ -182,13 +182,13 @@ powerloom-snapshotter> deploy **Command line mode:** ```bash # Deploy all slots for a market -powerloom-snapshotter-cli deploy --env mainnet --market uniswapv2 +powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3 # Deploy specific slots -powerloom-snapshotter-cli deploy --env mainnet --market uniswapv2 --slot 123 --slot 456 +powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3 --slot 123 --slot 456 -# Deploy multiple markets -powerloom-snapshotter-cli deploy --env mainnet --market uniswapv2 --market aavev3 +# Deploy BDS Mainnet +powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3 ``` ### 📊 Show deployment status @@ -248,7 +248,7 @@ Manage signer identities and other credentials configured against a specific env powerloom-snapshotter> identity list # Show details of a specific identity -powerloom-snapshotter> identity show --env mainnet --market uniswapv2 +powerloom-snapshotter> identity show --env mainnet --market BDS_MAINNET_UNISWAPV3 ``` **Command line mode:** @@ -257,7 +257,7 @@ powerloom-snapshotter> identity show --env mainnet --market uniswapv2 powerloom-snapshotter-cli identity list # Show details of a specific identity -powerloom-snapshotter-cli identity show --env mainnet --market uniswapv2 +powerloom-snapshotter-cli identity show --env mainnet --market BDS_MAINNET_UNISWAPV3 ``` ## 📝 Credentials Management: Internals @@ -269,7 +269,7 @@ Configuration files are stored in `~/.powerloom-snapshotter-cli/envs/` with the .env.{chain}.{market}.{source_chain} ``` -Example: `.env.mainnet.uniswapv2.eth_mainnet` +Example: `.env.mainnet.bds_mainnet_uniswapv3.eth_mainnet` ### 🔐 Environment Variables @@ -319,20 +319,19 @@ If you're currently running snapshotter nodes manually, here's how to migrate to 1. **Stop and cleanup existing nodes**: ```bash - # In your existing setup - ./diagnose.sh -y + powerloom-snapshotter-cli diagnose --clean --force ``` 2. **Install the CLI** (see [Installation section](#installation) above) 3. **Configure using the CLI**: ```bash - powerloom-snapshotter-cli configure --env mainnet --market uniswapv2 + powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3 ``` 4. **Deploy using the CLI**: ```bash - powerloom-snapshotter-cli deploy --env mainnet --market uniswapv2 + powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3 ``` The CLI will handle all your slots automatically and provide better management capabilities. @@ -340,6 +339,6 @@ The CLI will handle all your slots automatically and provide better management c ## 🔗 Additional Resources - [GitHub Repository: Dive into the technical details, file issues, and contribute](https://github.com/powerloom/snapshotter-lite-multi-setup) -- [Legacy Getting Started Guide: For single node setup](https://docs.powerloom.io/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started) +- [DSV Mainnet Snapshotter Lite V2 Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started) - [Monitoring and Troubleshooting](/build-with-powerloom/snapshotter-node/lite-node-v2/monitoring) - [Discord Support: Join our community and get help](https://discord.gg/powerloom) \ No newline at end of file diff --git a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/diagnostics.md b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/diagnostics.md index 1b3d36e7..59fd8b21 100644 --- a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/diagnostics.md +++ b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/diagnostics.md @@ -5,16 +5,16 @@ title: Diagnostics and Cleanup # Diagnostics and Cleanup -The lite node as well as the multi node setup comes with a diagnostic and cleanup script. This script will check for any previous instances of the lite node, local collector, stale images and networks. +The snapshotter CLI includes diagnostics and cleanup commands for snapshotter lite deployments. It checks Docker availability, system resources, network connectivity, port availability, and existing snapshotter containers. ```bash - ./diagnose.sh +powerloom-snapshotter-cli diagnose ``` The following output may vary depending on whether you have run snapshotter node(s) before this setup or not. ``` -./diagnose.sh +powerloom-snapshotter-cli diagnose 🔍 Starting Powerloom Node Diagnostics... 📦 Checking Docker installation... @@ -31,9 +31,9 @@ The following output may vary depending on whether you have run snapshotter node 🔍 Checking existing Powerloom containers... Found existing Powerloom containers: -snapshotter-lite-v2-xxx1-mainnet-UNISWAPV2-ETH -snapshotter-lite-local-collector-xxx1-mainnet-UNISWAPV2-ETH -snapshotter-lite-v2-xxx2-mainnet-UNISWAPV2-ETH +snapshotter-lite-v2-xxx1-mainnet-BDS_MAINNET_UNISWAPV3-ETH +snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH +snapshotter-lite-v2-xxx2-mainnet-BDS_MAINNET_UNISWAPV3-ETH ``` If you want to cleanup the existing containers, follow along to the next section @@ -47,38 +47,27 @@ This is particularly useful if you find your nodes are not running as expected a ### Stop and remove all powerloom containers -If the diagnostic script finds any running containers tagged with `snapshotter-lite`, it will ask you if you want to stop and remove them. - -Select `y` at the following prompt and you see some logs like the following: +To clean up existing deployments, run: +```bash +powerloom-snapshotter-cli diagnose --clean --force ``` -Would you like to stop and remove existing Powerloom containers? (y/n): y -Stopping running containers... (timeout: 30s per container) -Attempting to stop container snapshotter-lite-v2-xxx1-mainnet-UNISWAPV2-ETH... -snapshotter-lite-v2-xxx1-mainnet-UNISWAPV2-ETH -Attempting to stop container snapshotter-lite-local-collector-xxx1-mainnet-UNISWAPV2-ETH... -snapshotter-lite-local-collector-xxx1-mainnet-UNISWAPV2-ETH - -Removing containers... -Removing container snapshotter-lite-v2-xxx1-mainnet-UNISWAPV2-ETH... -Removing container snapshotter-lite-local-collector-xxx1-mainnet-UNISWAPV2-ETH... +The CLI stops and removes matching snapshotter lite containers and local collectors, then removes associated Docker networks where safe. -Removing container snapshotter-lite-v2-xxx2-mainnet-UNISWAPV2-ETH... ``` +Stopping running containers... (timeout: 30s per container) +Attempting to stop container snapshotter-lite-v2-xxx1-mainnet-BDS_MAINNET_UNISWAPV3-ETH... +snapshotter-lite-v2-xxx1-mainnet-BDS_MAINNET_UNISWAPV3-ETH +Attempting to stop container snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH... +snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH - -### Remove all Docker subnets assigned to the snapshotter-lite containers - -Enter `y` at the following prompt and you see some logs like the following: - -``` -Would you like to remove existing Powerloom networks? (y/n): y +Removing containers... +Removing container snapshotter-lite-v2-xxx1-mainnet-BDS_MAINNET_UNISWAPV3-ETH... +Removing container snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH... Removing networks... -snapshotter-lite-v2-xxx1-mainnet-UNISWAPV2-ETH -snapshotter-lite-v2-xxx2-mainnet-UNISWAPV2-ETH -✅ Networks removed +✅ Cleanup complete ``` ### Cleanup stale images and networks and cache @@ -87,31 +76,11 @@ snapshotter-lite-v2-xxx2-mainnet-UNISWAPV2-ETH This is a cleanup step that removes all stale images, networks and cache from Docker. Proceed only if all other attempts at running the node have failed after following our guides. ::: -Enter `y` at the following prompt and you see some logs like the following. Press `y` again at the end to confirm with Docker. +If cleanup still leaves stale Docker resources, use Docker's own prune commands after confirming no unrelated containers/images are needed: +```bash +docker network prune +docker system prune ``` -Would you like to remove unused Docker resources (only unused images, networks, and cache)? (y/n): y - -Removing unused Docker resources... - -Running docker network prune... - -Running docker system prune... -WARNING! This will remove: - - all stopped containers - - all networks not used by at least one container - - all images without at least one container associated to them - - all build cache - -Are you sure you want to continue? [y/N] y - -Deleted Images: -untagged: ghcr.io/powerloom/snapshotter-lite-v2:latest -untagged: ghcr.io/powerloom/snapshotter-lite-v2@sha256:15e05050bbf1473a3b4345a188c44bb37fb343f89d24f9ce731e3c3df190ec98 -deleted: sha256:33d723744d4cb306c9be663247464f497698682fb0d577290831114b825bc84a - -Total reclaimed space: 1.614GB -✅ Cleanup complete -✅ Diagnostic check complete -``` \ No newline at end of file +Docker will ask for confirmation before removing unused resources. \ No newline at end of file diff --git a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started.md b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started.md index 9e736562..6a9263f5 100644 --- a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started.md +++ b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started.md @@ -3,750 +3,354 @@ sidebar_position: 0 title: Setting Up --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Setting Up and Running the Snapshotter Lite Node V2 - -This guide provides instructions for installing and running the Snapshotter Lite Node V2 for the Powerloom Mainnet, covering prerequisites and operational procedures. - -The Snapshotter Lite Node V2 can be set up using either the Docker image or by running natively on the local machine. However, using the Docker image is the recommended approach, as it provides the simplest and most reliable method for deployment. - -:::tip Node Mint -Node Mint is now live at: https://mint.powerloom.network/. For detailed information on the node mint for Mainnet, please refer to https://blog.powerloom.io/snapshotter-update-power-claims-daily-rewards-new-operator-onboarding/ +# DSV Mainnet Snapshotter Lite V2 Setup +:::warning +This guide requires the snapshotter CLI to be installed and configured. Refer to the [Snapshotter CLI documentation](/build-with-powerloom/snapshotter-node/lite-node-v2/cli) for complete installation and usage instructions. ::: -Follow the step-by-step instructions in the relevant guide to set up your Snapshotter Lite Node V2. If you need further assistance, refer to our troubleshooting documentation or reach out to us on [discord](https://discord.com/invite/powerloom) for support. - -:::info Important note - -1. It is recommended that the node operates continuously, 24/7. -2. If you possess multiple slots, refer to the section on [alternative setup methods](#alternative-setup-methods) for further details. - +:::tip +If you want the fastest path, skip to [Install the snapshotter CLI](#install-the-snapshotter-cli) and then return to [Configure for BDS Data Market on DSV Mainnet](#configure-for-bds-data-market-on-dsv-mainnet). ::: -We have streamlined the setup process based on your operating system. To begin, please choose your operating system from the tabs provided below. - -- For those looking to set up the node on a local Windows or Mac machine, please select the "Windows / MacOS" tab. -- If you are configuring your node on a Linux VPS, select the "Linux" tab and follow the provided instructions to get started. - ---- - - - -## Setting up the Snapshotter Lite Node V2 - - - - - - ## Deploying a Snapshotter Lite Node V2 on a Virtual Private Server (VPS) - -Deploying a Snapshotter Lite Node V2 on a Virtual Private Server (VPS) ensures seamless 24/7 operation without utilizing your local resources. - -This section provides instructions for setting up your Snapshotter Lite Node V2 on an Ubuntu VPS. - -While you're free to choose any provider, this guide specifically utilizes DigitalOcean for demonstration purposes. - -### Recommended VPS Providers - -- DigitalOcean -- Hostinger - - -### Hardware Requirements - -The Snapshotter Lite Node V2 is designed for minimal hardware demands, allowing it to operate effectively on various setups, including both local systems and cloud-based Virtual Machines. - -For users running the node on Virtual Private Servers (VPS), the minimum specifications are: - -- **RAM:** At least 4 GB. -- **CPU Core**: Minimum of 2 Cores -- **Disk Space:** A minimum of 40 GB. - - -### Step 1: Creating Your VPS - -1. **Sign Up/Login**: Start creating an account on your VPS provider or log in if you already have one. - -2. **Choose an Image**: Select Ubuntu as your operating system. We recommend using the latest stable version of Ubuntu for optimal performance. - -3. **Select a Plan**: Choose a plan that meets the minimum hardware requirements for the Snapshotter Lite Node V2. A plan with at least 4 GB RAM and 40 GB of disk space is advisable. +## Configure for BDS Data Market on DSV Mainnet -4. **Authentication**: Set up SSH keys for secure access to your VPS. - -5. **Finalize and Create**: Choose any additional options, like backups if required. Your VPS will be set up within a few minutes. - -### Step 2: Accessing Your VPS - -- **SSH into Your VPS**: Use the following command from your terminal/command prompt, replacing `your_vps_ip` with the IP address of your VPS. +You can use the `powerloom-snapshotter-cli configure` command to configure snapshotter lite node(s) for the BDS Data Market on DSV Mainnet. ```bash -ssh root@your_vps_ip +powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3 +# or from shell mode: +powerloom-snapshotter> configure --env mainnet --market BDS_MAINNET_UNISWAPV3 +# or with uv: +uv run powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3 ``` -- If you set up SSH keys, you should be logged in without needing a password. Otherwise, you can also set your password for the VPS. - -### Step 3: Setting Up the Environment - -1. **Update and Upgrade Your VPS**: - ```bash -sudo apt-get update && sudo apt-get upgrade -y +# First-time setup: prompts show (required) or (optional, leave blank to skip) +# Reconfiguring: prompts show (current: value, press Enter to keep) or (default: value, press Enter to use) +👉 Enter slot NFT holder wallet address (0x...) (required): +👉 Enter SNAPSHOTTER signer address (0x...) (required): +👉 Enter signer private key (required): +👉 Enter RPC URL for ETH-MAINNET (required): +👉 Enter Powerloom RPC URL (default: https://rpc-v2.powerloom.network, press Enter to use): +👉 Enter Telegram chat ID (optional, leave blank to skip): +👉 Enter local collector P2P port (for gossipsub mesh communication) (default: 8001, press Enter to use): +✅ Created /root/.powerloom-snapshotter-cli/profiles/bds-mainnet-uniswapv3/.env.mainnet.bds_mainnet_uniswapv3.eth_mainnet with following values: +╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Environment File Contents ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +< Your environment file contents > ``` -2. **Install Git**: -Git is necessary for cloning the Snapshotter Lite repository. Install it using: +## Deploy the Snapshotter Lite Node(s) ```bash -sudo apt-get install git -y +uv run powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3 + +🐳 Docker daemon is running. +🚀 Deploying to environment: MAINNET... +✓ Found profile config for market BDS_MAINNET_UNISWAPV3: /home/ubuntu/.powerloom-snapshotter-cli/profiles/default/.env.mainnet.bds_mainnet_uniswapv3.eth_mainnet +ℹ️ No specific slots provided. Fetching all slots owned by 0xabcdefghijklmnopqrstuvwxyz0123456789 on mainnet... +Found N slots for wallet 0xabcdefghijklmnopqrstuvwxyz0123456789 on mainnet: [ . . . ] +ℹ️ Found slots for wallet 0xabcdefghijklmnopqrstuvwxyz0123456789: [ . . . ] + +# choose to deploy select or all slots + +☑️ Do you want to deploy all of these fetched slots? (y/n) [y]: n +🫸 ▶︎ Enter the start slot ID from the list above to deploy: N1 +🫸 ▶︎ Enter the end slot ID from the list above to deploy (or same as start for single): N2 +🎰 Targeting slots for deployment: [N1, N2] +🚀 BDS DSV market detected - using branch: master +🚀 Deploying snapshotter nodes for market: BDS_MAINNET_UNISWAPV3... + +[ . . . more output . . . ] +----- Deployment Summary ----- +✅ Successfully deployed n snapshotter instance(s). +🧹 Cleaning up temporary base snapshotter clone at /home/ubuntu/snapshotter-lite-multi-setup/.tmp_snapshotter_base_clone... + ✅ Cleanup successful. ``` -3. **Install Docker and Docker Compose:** -Ensure Docker and Docker Compose are installed. You can install docker on Ubuntu using the following commands: - -```bash -# Add Docker's official GPG key: -sudo apt-get update -sudo apt-get install ca-certificates curl -sudo install -m 0755 -d /etc/apt/keyrings -sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc -sudo chmod a+r /etc/apt/keyrings/docker.asc - -# Add the repository to Apt sources: -echo \ -"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ -$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ -sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -sudo apt-get update -``` - -Once the Docker repository is added successfully, let’s install Docker and necessary components by using the below command: - -```bash -sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -``` - -### Step 4: Cloning the Repository and Setting Up the Node - -1. **Clone the Snapshotter Lite Repository**: -Navigate to the directory where you want to install the node and clone the repository: - - ```bash - git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-mainnet - ``` - -2. **Navigate to the Directory**: -Change to the directory of the cloned repository: - - ```bash - cd powerloom-mainnet - ``` - -4. **Cleanup the Environment**: -Run the diagnose and cleanup script to check for any previous instances of the lite node, local collector, stale images and networks. - - ```bash - ./diagnose.sh - ``` - - ![Diagnose and Cleanup](/images/snapshotter-lite-v2-mainnet-diagnose.png) - -:::tip -It is recommended to run the node in a standalone environment without any other major processes running on the same machine. Running other processes on the same machine may lead to conflicts and errors that can interfere with the node's operation. The diagnose and cleanup script will stop and remove only Powerloom related processes running on the machine, if any. -::: - - -### Step 5: Running the Node - -1. **Setting up Screen**: -The Screen utility allows you to run processes in the background, enabling you to maintain long-running tasks without keeping a terminal window open. To initiate a new Screen session for managing the Snapshotter Lite Node V2, follow these steps: - -Enter the following command to create a new Screen session named "snapshotter-lite-node-mainnet": - - ```bash - screen -R snapshotter-lite-node-mainnet - ``` - -- This command opens a new Screen session, where you can start the Snapshotter Lite Node V2. -- Once inside the new Screen session, initiate the Snapshotter Lite Node V2 as required. +## Verify Running Status :::note -If you have an existing screen session named `snapshotter-lite-node-mainnet`, the above command will attach to the existing session. -Otherwise, it will create a new session with that name. -::: - -This approach ensures your node can continue running in the background, even if you disconnect from the terminal session. - -1. **Initialize the Node**: -Initiate the snapshotter lite node v2 setup by typing the command in the terminal: - - ```bash - ./build.sh - ``` - -Follow the prompts to enter the required information. - -:::tip -Please do not use your NFT minting wallet to run the snapshotter lite node v2. The safest approach is to generate and assign a burner wallet. You can generate a burner wallet through any of the tools listed below: -- [Vanity-ETH](https://vanity-eth.tk/) -- [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) - -Once generated, make sure you assign your burner wallet to your [snapshotter dashboard](https://snapshotter-dashboard.powerloom.network/). -::: - -### Step 6: Configuring the Node - -After initiating the process, the setup steps will differ depending on whether this is the first time the node has been setup or not: - -**First Time Setup:** - -1. Select the Data Market that you would like to participate in: - - The lite node now allows you to choose between two data markets: Uniswap V2 and Aave V3 with Uniswap V2 being the default. This will be further expanded to include more data markets in the future and to allow node operators to choose the data market that they want to operate on. - -2. Next, you'll be prompted to enter the following values: - - `$SOURCE_RPC_URL`: Use any Ethereum Mainnet RPC, such as Ankr, Infura, or Alchemy. - - - `$SIGNER_ACCOUNT_ADDRESS`: Utilize a burner wallet for the signer account address. Please DO NOT use your main/primary wallet. - - - `$SIGNER_ACCOUNT_PRIVATE_KEY`: Use the private key from your burner wallet. - - - `$SLOT_ID`: To assign your node to a specific slot, please provide the corresponding Slot ID or NFT ID. You can locate your NFT ID within your transaction details on PolygonScan. - -3. Optionally, you can provide to following values: - - - `$TELEGRAM_CHAT_ID`: Can be provided if you would like to enable Telegram reporting for node issues. See our [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) page for instructions on how to get your Telegram Chat ID. - -After entering these details, the node will start running the background processes. - -If you want to exit your screen, type the command in the terminal: - ```bash - CTRL + A + D - ``` - -**Subsequent Setup:** - -1. Select the Data Market that you would like to participate in. - -2. You will be prompted to choose whether you wish to change the previously configured values for the above: `SOURCE_RPC_URL`, `SIGNER_ACCOUNT_ADDRESS`, `SIGNER_ACCOUNT_PRIVATE_KEY` and `SLOT_ID`. Choose `y` or `n` depending on whether you wish to change them. - - ![Subsequent Setup](/images/snapshoter-lite-v2-node-setup-existing.png) - -3. If you choose `y` to change the previously configured values, you will be prompted to enter the new values individually for each of the above values. - - -### Step 6: Maintaining Your Node - -- **Regular Updates**: Keep your system and Snapshotter Lite Node V2 updated by regularly pulling the latest changes from the repository and applying system updates. - -- **Monitoring**: Regularly check the status of your node and the VPS to ensure everything is running smoothly. - - - - - - - - - - - -## Docker Setup for MacOS - -### Hardware Requirements - -The Snapshotter Lite Node V2 is designed for minimal hardware demands, allowing it to operate effectively on various setups, including both local systems and cloud-based Virtual Machines. - -### MacOS System Requirements - -For users running the node on personal hardware, the minimum specifications are: - -- **RAM:** At least 4 GB. -- **CPU Core**: Minimum of 2 Cores -- **Disk Space:** A minimum of 40 GB. - -### Pre-requisitie tools - -- Install Docker on your machine. You can find the installation instructions for your operating system on the [official Docker website.](https://docs.docker.com/get-docker/) - -- Install git if your system doesn't have git installed. To install git on MacOS, please follow this guide: https://www.atlassian.com/git/tutorials/install-git - -### Cloning the Repository and Setting Up the Node - -1. **Clone the Snapshotter Lite Repository**: -Navigate to the directory where you want to install the node and clone the repository: - - ```bash - git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-mainnet - ``` - -2. **Navigate to the Directory**: -Change to the directory of the cloned repository: - - ```bash - cd powerloom-mainnet - ``` - -4. **Cleanup the Environment**: -Run the diagnose and cleanup script to check for any previous instances of the lite node, local collector, stale images and networks. - - ```bash - ./diagnose.sh - ``` - - ![Diagnose and Cleanup](/images/snapshotter-lite-v2-mainnet-diagnose.png) - -:::tip -It is recommended to run the node in a standalone environment without any other major processes running on the same machine. Running other processes on the same machine may lead to conflicts and errors that can interfere with the node's operation. The diagnose and cleanup script will stop and remove only Powerloom related processes running on the machine, if any. +The examples below assume slot ID `1234` is one of the deployed slots. ::: -### Running the Node - -1. **Setting up Screen**: -The Screen utility allows you to run processes in the background, enabling you to maintain long-running tasks without keeping a terminal window open. To initiate a new Screen session for managing the Snapshotter Lite Node V2, follow these steps: - -Enter the following command to create a new Screen session named "snapshotter-lite-node-mainnet": +### Check Simulation Submission Status on Dashboard - ```bash - screen -R snapshotter-lite-node-mainnet - ``` - -- This command opens a new Screen session, where you can start the Snapshotter Lite Node V2. -- Once inside the new Screen session, initiate the Snapshotter Lite Node V2 as required. - -This approach ensures your node can continue running in the background, even if you disconnect from the terminal session. +You can check the simulation submission status on the decentralized [Snapshotter Dashboard](https://mint.powerloom.network/). If everything goes well, you should see the simulation submission timestamp within a couple of minutes of the logs shown below. :::note -If you have an existing screen session named `snapshotter-lite-node-mainnet`, the above command will attach to the existing session. -Otherwise, it will create a new session with that name. -::: - -2. **Initialize the Node**: -Initiate the snapshotter lite node v2 setup by typing the command in the terminal: - - ```bash - ./build.sh - ``` - -Follow the prompts to enter the required information. - -:::tip -Please do not use your NFT minting wallet to run the snapshotter lite node v2. The safest approach is to generate and assign a burner wallet. You can generate a burner wallet through any of the tools listed below: -- [Vanity-ETH](https://vanity-eth.tk/) -- [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) - -Once generated, make sure you assign your burner wallet to your [snapshotter dashboard](https://snapshotter-dashboard.powerloom.network/). -::: - -### Configuring the Node - -After initiating the process, the setup steps will differ depending on whether this is the first time the node has been setup or not: - -**First Time Setup:** - -1. Select the Data Market that you would like to participate in: - - The lite node now allows you to choose between two data markets: Uniswap V2 and Aave V3 with Uniswap V2 being the default. This will be further expanded to include more data markets in the future and to allow node operators to choose the data market that they want to operate on. - -2. Next, you'll be prompted to enter the following values: - - `$SOURCE_RPC_URL`: Use any Ethereum Mainnet RPC, such as Ankr, Infura, or Alchemy. - - - `$SIGNER_ACCOUNT_ADDRESS`: Utilize a burner wallet for the signer account address. Please DO NOT use your main/primary wallet. - - - `$SIGNER_ACCOUNT_PRIVATE_KEY`: Use the private key from your burner wallet. - - - `$SLOT_ID`: To assign your node to a specific slot, please provide the corresponding Slot ID or NFT ID. You can locate your NFT ID within your transaction details on PolygonScan. - -3. Optionally, you can provide to following values: - - - `$TELEGRAM_CHAT_ID`: Can be provided if you would like to enable Telegram reporting for node issues. See our [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) page for instructions on how to get your Telegram Chat ID. - -After entering these details, the node will start running the background processes. - -If you want to exit your screen, type the command in the terminal: - ```bash - CTRL + A + D - ``` - -**Subsequent Setup:** - -1. Select the Data Market that you would like to participate in. - -2. You will be prompted to choose whether you wish to change the previously configured values for the above: `SOURCE_RPC_URL`, `SIGNER_ACCOUNT_ADDRESS`, `SIGNER_ACCOUNT_PRIVATE_KEY` and `SLOT_ID`. Choose `y` or `n` depending on whether you wish to change them. - - ![Subsequent Setup](/images/snapshoter-lite-v2-node-setup-existing.png) - -3. If you choose `y` to change the previously configured values, you will be prompted to enter the new values individually for each of the above values. - -### Stopping the Node - -- To stop the node, you can press `Ctrl+C` in the terminal where the node is running or `docker-compose down` in a new terminal window from the project directory. - -This will halt the running node and all associated processes. - -By following these steps, you can successfully configure the Snapshotter Lite Node V2 on your Mac system. - -If you encounter any issues while operating the node, please refer our [troubleshooting section](./monitoring.md) for guidance on common debugging techniques. - ---- - - - -## Non-Docker Setup for MacOS - -### Hardware Requirements - -The Snapshotter Lite Node V2 is designed for minimal hardware demands, allowing it to operate effectively on various setups, including both local systems and cloud-based Virtual Machines. - -For users running the node on personal hardware, the minimum specifications are: - -- **RAM:** At least 4 GB. -- **CPU Core**: Minimum of 2 Cores -- **Disk Space:** A minimum of 40 GB. -- **Python:** Ensure Python 3.11 is installed. - -If you want to run the Snapshotter Lite Node V2 without Docker, you need to make sure that you have Git, and Python version 3.10 or higher installed on your machine and we recommend to use **python version 3.11.7**. You can find the installation instructions for your operating system on the [official Python website](https://www.python.org/downloads/). - - -
- Optional: Installing Virtual Environment -
-For simplicity, we recommend using miniconda and setting up an environment with the needed Python version as shown below - -

- -#### Install miniconda for your system: - ```bash - https://docs.conda.io/projects/miniconda/en/latest/ - ``` - -#### Verify the installation using the following command in your terminal - ```bash - conda --version - ``` - - Add miniconda to your path if the terminal does not identify conda as a valid command: - ```bash - export PATH="/Users/yourusername/miniconda3/bin:$PATH" - ``` - - Replace yourusername with your actual username - -##### Create and activate a python environment: - ```bash - conda create -n myenv python=3.11 - conda activate myenv - ``` -

- -Once python3 is installed, we can go ahead and run the lite node:- - -1. Clone this repository using the following command in the terminal: - ```bash - git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-mainnet - ``` -This will clone the repository into a directory named `powerloom-mainnet`. - -2. Change your working directory to the `powerloom-mainnet` directory, open the terminal, and type: - - ```bash - cd powerloom-mainnet - ``` - -3. Run `init.sh` command in the terminal to start the snapshotter lite node v2: - ```bash - ./init.sh - ``` - -:::tip -Please do not use your NFT minting wallet to run the snapshotter lite node v2. The safest approach is to generate and assign a burner wallet. You can generate a burner wallet through any of the tools listed below: -- [Vanity-ETH](https://vanity-eth.tk/) -- [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) - -Once generated, make sure you assign your burner wallet to your [snapshotter dashboard](https://snapshotter-dashboard.powerloom.network/). +Once epoch release goes live on DSV mainnet for the BDS data market, the dashboard will show actual snapshot submissions. ::: +### Check Running Docker Containers -During the setup, you'll be prompted to enter the following values: - -- `$SOURCE_RPC_URL`: Use any Ethereum Mainnet RPC, such as Ankr, Infura, or Alchemy. - -- `$SIGNER_ACCOUNT_ADDRESS`: Utilize a burner wallet for the signer account address. Please DO NOT use your main/primary wallet. - -- `$SIGNER_ACCOUNT_PRIVATE_KEY`: Use the private key from your burner wallet. - -- `$SLOT_ID`: To assign your node to a specific slot, please provide the corresponding Slot ID or NFT ID. You can locate your NFT ID within your transaction details on PolygonScan. - - -This is a one-time configuration process that generates a .env file in the project's root directory. - -### Stopping the Snapshotter Lite Node V2 - -To stop the node, use the command in the terminal: ```bash -pkill -f snapshotter +sudo docker ps | grep -iE 'mainnet|collector' +1dce7f01765b snapshotter-lite-v2-1234-mainnet-bds_mainnet_uniswapv3-eth-snapshotter-lite-v2 "bash -c '\n rm -f /…" 31 seconds ago Up 31 seconds snapshotter-lite-v2-1234-mainnet-BDS_MAINNET_UNISWAPV3-ETH +03f92f3996ee snapshotter-lite-v2-1234-mainnet-bds_mainnet_uniswapv3-eth-snapshotter-lite-v2 "bash -c '\n rm -f /…" 36 seconds ago Up 36 seconds snapshotter-lite-v2-1234-mainnet-BDS_MAINNET_UNISWAPV3-ETH +d4092014c788 snapshotter-lite-v2-1234-mainnet-bds_mainnet_uniswapv3-eth-snapshotter-lite-local-collector "/snapshotter-local-…" 36 seconds ago Up 36 seconds 127.0.0.1:8001->8001/tcp, 127.0.0.1:8085->8085/tcp, 127.0.0.1:50051->50051/tcp snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH +22c4ed99acd3 5f56581c58f2 "/snapshotter-local-…" 8 weeks ago Up 8 weeks 0.0.0.0:50052->50052/tcp, [::]:50052->50052/tcp snapshotter-core-snapshotter-local-collector-1 ``` -This will halt the running node and all associated processes. +### Trail Snapshotter Logs -By following these steps, you can successfully configure the Snapshotter Lite Node V2 on your Mac system. +```bash +# attach to one of the screen sessions +screen -r pl_mainnet_bds_mainnet_uniswapv3_1234 -If you encounter any issues while operating the node, please refer to our [troubleshooting section](./monitoring.md) for guidance on common debugging techniques. +# or check container logs +sudo docker logs -f snapshotter-lite-v2-1234-mainnet-BDS_MAINNET_UNISWAPV3-ETH +``` ---- +You should see snapshotter logs like the following, indicating simulation submission snapshot generation and submission. -
-
+```bash +February 15, 2026 > 13:25:48 | INFO | 🎲 Genesis epoch: querying BDS with epoch 24462489 (latest - 1)| {'module': 'EpochContext'} +February 15, 2026 > 13:25:48 | INFO | 📋 BDS response for active pools: {'snapshot_cid': 'bafkreicy4wnb6rvi72o7yiwejqq5sxku3uc43d3zr7ebxhed5ehldnsrsq', 'epoch_id': 24462489, 'pools': {'0x202A6012894Ae5c288eA824cbc8A9bfb26A49b93': 1, '0x4d68B530920D26c3b01C99fecC19e21011B72bBD': 1, '0x6546055f46e866a4B9a4A13e81273e3152BAE5dA': 1, '0x6d69DCE31606AbD62C58E95BA984718EEbD540eA': 1, '0x75A5A265D21bC89eC130F18EdDe2b49a4B200dac': 1, '0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640': 1, '0xE0554a476A092703abdB3Ef35c80e0D76d32939F': 4, '0xc756BBA710d45647715079cE50aa16aab36deD42': 1, '0xc7bBeC68d12a0d1830360F8Ec58fA599bA1b0e9b': 5, '0xe6ff8b9A37B0fab776134636D9981Aa778c4e718': 1, '0xf31C54cb6F15a5A807Dc33d9dACC2471303D182e': 1}}| {'module': 'EpochContext'} +February 15, 2026 > 13:25:48 | INFO | 🎲 Genesis epoch (epoch 0) - slot 1234 processing pool: 0x| {'module': 'PairTotalReservesProcessor'} + +February 15, 2026 > 13:25:55 | INFO | 📈 [Epoch 24462480-24462480] Pool | Epoch total trade data: totalTradesUSD=0 totalTradesMintBurnUSD=0 totalFeeUSD=0 token0MintBurnVolume=0 token1MintBurnVolume=0 token0MintBurnVolumeUSD=0 token1MintBurnVolumeUSD=0 token0TradeVolume=0 token1TradeVolume=0 token0TradeVolumeUSD=0 token1TradeVolumeUSD=0| {'module': 'PowerLoom|UniswapCore'} +February 15, 2026 > 13:25:55 | DEBUG | [Epoch 24462480-24462480] Pool | Reserves and trade data generated successfully| {'module': 'PowerLoom|UniswapCore'} +February 15, 2026 > 13:25:55 | DEBUG | [Epoch 24462480-24462480] Pool | Creating final base snapshot| {'module': 'PowerLoom|UniswapCore'} +February 15, 2026 > 13:25:55 | INFO | ✅ [Epoch 24462480-24462480] Pool | Base snapshot generated successfully | Total trade: $0.00 | Total fee: $0.00| {'module': 'PowerLoom|UniswapCore'} +February 15, 2026 > 13:25:55 | DEBUG | ✅ [Epoch 24462480-24462480] Pool | Computation completed | Wall time: 1771161955.8083541| {'module': 'EpochContext'} + +February 15, 2026 > 13:25:55 | DEBUG | Sending submission to collector...| {'module': 'GenericAsyncWorker'} +February 15, 2026 > 13:25:55 | DEBUG | Snapshot submission creation with request: slotId: 1234 +deadline: 3174717 +snapshotCid: "bafkreigx5okipomw2qurii4n25u34fjpd5b5gpcbxwm4j3htnxmubgqim4" +projectId: "baseSnapshot:0x:mainnet-BDS_MAINNET_UNISWAPV3-ETH" +| {'module': 'GenericAsyncWorker'} +February 15, 2026 > 13:25:55 | DEBUG | Snapshot submission created: request { + slotId: 1234 + deadline: 3174717 + snapshotCid: "bafkreigx5okipomw2qurii4n25u34fjpd5b5gpcbxwm4j3htnxmubgqim4" + projectId: "baseSnapshot:0x:mainnet-BDS_MAINNET_UNISWAPV3-ETH" +} +signature: "c94ad005cc6d5f0999844fdce7955b23a8eb9a7c8ab5bedcc9177912f6c59ead6f2642ed4bcb072cf8ca2f7ba389a1dd48bfe5a4a58ddddae2eae019eefd84251b" +header: "0x999a6932c997573d9b2557ba2188a488c0c993862abd63dacc0471a58a86c2ed" +dataMarket: "0x4198Bf81B55EE4Af6f9Ddc176F8021960813f641" +nodeVersion: "v2.8.0" +protocolState: "0xa1100CB00Acd3cA83a7C8F4DAA42701D1Eaf4A6c" +| {'module': 'GenericAsyncWorker'} +February 15, 2026 > 13:25:55 | DEBUG | Sent message to local collector and received response: message: "Success" +| {'module': 'GenericAsyncWorker'} +February 15, 2026 > 13:25:55 | INFO | Successfully submitted snapshot to local collector: request { + slotId: 1234 + deadline: 3174717 + snapshotCid: "bafkreigx5okipomw2qurii4n25u34fjpd5b5gpcbxwm4j3htnxmubgqim4" + projectId: "baseSnapshot:0x:mainnet-BDS_MAINNET_UNISWAPV3-ETH" +} +signature: "c94ad005cc6d5f0999844fdce7955b23a8eb9a7c8ab5bedcc9177912f6c59ead6f2642ed4bcb072cf8ca2f7ba389a1dd48bfe5a4a58ddddae2eae019eefd84251b" +header: "0x999a6932c997573d9b2557ba2188a488c0c993862abd63dacc0471a58a86c2ed" +dataMarket: "0x4198Bf81B55EE4Af6f9Ddc176F8021960813f641" +nodeVersion: "v2.8.0" +protocolState: "0xa1100CB00Acd3cA83a7C8F4DAA42701D1Eaf4A6c" +| {'module': 'GenericAsyncWorker'} +``` -
+### Trail Local Collector Logs - - The Snapshotter Lite Node V2 can operate on Windows systems when running in a Docker container. To set up the Snapshotter Lite Node V2 on Windows, follow the Docker installation and configuration instructions provided in this section. - - +```bash +sudo docker logs snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH -f -n 100 2>&1 | grep -i 'mesh' +``` -## Windows Docker Setup {#windows-setup} +You should see local collector logs like the following, indicating submission publication to the DSV mesh network. -### Hardware Requirements +```bash +time="2026-02-15T13:25:36Z" level=info msg="✅ Successfully published submission to gossipsub" func="proto-snapshot-server/pkgs/service.(*server).publishToMesh" file="/app/pkgs/service/msg_server.go:751" epoch_id=0 mesh_state=healthy msg_size=717 peer_count=5 project_id="baseSnapshot:0xc7bbec68d12a0d1830360f8ec58fa599ba1b0e9b:mainnet-BDS_MAINNET_UNISWAPV3-ETH" snapshot_cid=bafkreidpfvo6do3lrdrr5f2skmhsbk4nkkkk35ed5ksf7hjd43d4aoqwi4 topic=/powerloom/dsv-mainnet-bds/snapshot-submissions/0 total_connected=162 uptime_seconds=40110 +``` -The Snapshotter Lite Node V2 is designed for minimal hardware demands, allowing it to operate effectively on various setups, including both local systems and cloud-based Virtual Machines. +## Incentive Structure -For users running the node on a personal Windows system, the minimum specifications are: +The incentive structure for the BDS data market on DSV Mainnet is as follows: -- **RAM:** At least 4 GB. -- **CPU Core**: Minimum of 2 Cores -- **Disk Space:** A minimum of 40 GB. +- We start with a DAILY reward pool of **25,000 $POWER** per day. +- The reward pool will linearly scale with the number of snapshotter nodes successfully coming online, up to **100,000 $POWER** per day. -Setting up the snapshotter node on Windows requires a few additional steps. We suggest using Docker for its ease and speed of setup. To begin with Docker, you must have the Windows Subsystem for Linux (WSL) installed. Please follow the guide provided below for detailed instructions. +### What Happens to the Legacy Uniswap V2 Data Market? -### Initial Setup +:::warning +The legacy Uniswap V2 data market will continue to function only until the next 14 days. After that, it will be deprecated and the centralized sequencer will be turned off. -- **Open PowerShell:** - - Start by opening PowerShell on your Windows machine. Search for `"PowerShell"` in the start menu and launch it. +This is a huge step towards Powerloom's goal of being a fully decentralized network, as well as scaling to the next level of data products and services by removing reliance on a centralized sequencer. +::: -- **Install Windows Subsystem for Linux (WSL):** - - In the PowerShell window, enter the following command: - ```bash - wsl --install - ``` - - This command installs the Windows Subsystem for Linux, necessary for running Docker. +Until then, you can continue to run your older nodes as is and accumulate rewards for the next 14 days with the existing DAILY reward pool of **75,000 $POWER** distributed only among those submitting to the legacy Uniswap V2 data market. -- **Download and Install Docker:** - - Download Docker from the [official website](https://docs.docker.com/get-docker/). - - Follow the installation instructions provided on the website. +After that, you will need to migrate to the new BDS data market on DSV Mainnet. -- **Restart Your Computer:** - - After installing Docker, restart your computer to apply all changes. +## Work Distribution Algorithm -- **Open Docker:** - - Post-restart, open Docker. This should automatically launch a Powershell console which will have WSL installed. +**BDS (Blockchain Data Services)** is a **per-block, Uniswap V3 data market** on Ethereum mainnet. One epoch = one block (~12 seconds). Each epoch, 1000 slots are deterministically selected from all registered nodes; each selected slot computes one active pool and submits its snapshot. No central coordinator: assignment is verifiable by any observer. Tick and reserve data are cached when the same pool is reassigned to a slot across nearby epochs, reducing RPC load. -- **Set Up Linux User Account:** - - In the newly opened powershell console, set up a new user account by entering a username and password. +### What to Expect as an Operator -#### Granting Docker Permissions +- **Selection rate**: With ~8000 slots and 1000 per epoch, your slot has ~12% chance per epoch. Expect ~36 assignments per hour. No minimum guarantee. +- **Not selected = normal**: If your slot is not picked for an epoch, the node simply skips work. That is expected. +- **Selected + failed**: 3 consecutive selected-but-failed epochs trigger a Telegram alert. +- **Stuck detection**: No activity for 10 minutes flags the node as stuck. -- **Modify Docker Group Permissions:** - - To grant Docker the necessary permissions, add your user to the Docker group with this command: +Configure your **Telegram chat ID** during `snapshotter configure` to receive these alerts. Leave it blank to disable. - ```bash - sudo usermod -aG docker $USER - ``` - - Logout and login again or restart the Docker service for the changes to take effect. +### Further Reading -- **Verify Docker Installation:** - - To confirm Docker is set up correctly, run: +- [snapshotter-computes README](https://github.com/powerloom/snapshotter-computes/blob/feat/bds_lite/README.md): deterministic slot selection, incremental reserves cache +- [snapshotter-lite-v2 SLOT_BASED_WORK_DISTRIBUTION.md](https://github.com/powerloom/snapshotter-lite-v2/blob/master/SLOT_BASED_WORK_DISTRIBUTION.md): full algorithm and health monitoring - ```bash - docker run hello-world - ``` - - This command should display a message confirming Docker is functioning. +## Why Per-Block Uniswap V3? -#### Cloning the Repository and Setting Up the Node +Per-block data unlocks near real-time DeFi feeds: live trade flows for bots, instant liquidity snapshots for market makers, tick-level analytics for prediction markets, and pool activity dashboards for power users. The BDS data market is built for this: deterministic, verifiable, and designed to scale. -1. **Clone the Repository:** - - Use the following command in WSL terminal to clone the Snapshotter Lite Node v2 repository: +Want to see it in action? The [Powerloom BDS dashboard](https://bds.powerloom.io/) serves live feed data from the BDS data market. - ```bash - git clone https://github.com/powerloom/snapshotter-lite-v2.git powerloom-mainnet - ``` +## Install the Snapshotter CLI -2. **Navigate to the Repository Directory:** - - Change to the cloned repository's directory: +### Option 1: Use the Pre-Built Snapshotter CLI Binary - ```bash - cd powerloom-mainnet - ``` +Head to the latest [snapshotter-lite-multi-setup release page](https://github.com/powerloom/snapshotter-lite-multi-setup/releases/latest) and download the binary for your platform. Complete instructions are provided there. -3. **Cleanup the Environment**: - - Run the diagnose and cleanup script to check for any previous instances of the lite node, local collector, stale images and networks. +The typical installation path is to copy the downloaded binary to `/usr/local/bin/powerloom-snapshotter-cli` or `/usr/local/bin/snapshotter` and make it executable. - ```bash - ./diagnose.sh - ``` +For example, if you are on an x86_64 Linux machine and `v0.3.1` is the latest release, these would be the commands to install the CLI: - ![Diagnose and Cleanup](/images/snapshotter-lite-v2-mainnet-diagnose.png) +```bash +wget https://github.com/powerloom/snapshotter-lite-multi-setup/releases/download/v0.3.1/powerloom-snapshotter-cli-linux-amd64 +chmod +x powerloom-snapshotter-cli-linux-amd64 +sudo mv powerloom-snapshotter-cli-linux-amd64 /usr/local/bin/powerloom-snapshotter-cli +``` :::tip -It is recommended to run the node in a standalone environment without any other major processes running on the same machine. Running other processes on the same machine may lead to conflicts and errors that can interfere with the node's operation. The diagnose and cleanup script will stop and remove only Powerloom related processes running on the machine, if any. +Complete instructions on using pre-built snapshotter CLI binaries are also available in the [Snapshotter CLI documentation](/build-with-powerloom/snapshotter-node/lite-node-v2/cli#installation). ::: -### Running the Node - -1. **Setting up Screen**: -The Screen utility allows you to run processes in the background, enabling you to maintain long-running tasks without keeping a WSL terminal window open. To initiate a new Screen session for managing the Snapshotter Lite Node V2, follow these steps: - -Enter the following command to create a new Screen session named "snapshotter-lite-node-mainnet": - - ```bash - screen -R snapshotter-lite-node-mainnet - ``` - -- This command opens a new Screen session, where you can start the Snapshotter Lite Node V2. -- Once inside the new Screen session, initiate the Snapshotter Lite Node V2 as required. - -This approach ensures your node can continue running in the background, even if you disconnect from the terminal session. - -:::note -If you have an existing screen session named `snapshotter-lite-node-mainnet`, the above command will attach to the existing session. -Otherwise, it will create a new session with that name. +:::warning +If you are not sure about your platform architecture, such as ARM64 vs x86_64, use the `uv` package manager with the bundled installer as detailed below to install the CLI. ::: -2. **Initialize the Node**: -Initiate the snapshotter lite node v2 setup by typing the command in the terminal: - - ```bash - ./build.sh - ``` - -Follow the prompts to enter the required information. +### Option 2: Use the Bundled Installer with `uv` :::tip -Please do not use your NFT minting wallet to run the snapshotter lite node v2. The safest approach is to generate and assign a burner wallet. You can generate a burner wallet through any of the tools listed below: -- [Vanity-ETH](https://vanity-eth.tk/) -- [Powerloom Burner Wallet Generator](https://snapshotter-dashboard.powerloom.network/burner) - -Once generated, make sure you assign your burner wallet to your [snapshotter dashboard](https://snapshotter-dashboard.powerloom.network/). +With this approach, you will always have to `cd` into the repository directory to run the commands. ::: - -### Configuring the Node - -After initiating the process, the setup steps will differ depending on whether this is the first time the node has been setup or not: - -**First Time Setup:** - -1. Select the Data Market that you would like to participate in: - - The lite node now allows you to choose between two data markets: Uniswap V2 and Aave V3 with Uniswap V2 being the default. This will be further expanded to include more data markets in the future and to allow node operators to choose the data market that they want to operate on. -2. Next, you'll be prompted to enter the following values: - - `$SOURCE_RPC_URL`: Use any Ethereum Mainnet RPC, such as Ankr, Infura, or Alchemy. +#### Clone the Latest Snapshotter Lite Multi Setup Repository - - `$SIGNER_ACCOUNT_ADDRESS`: Utilize a burner wallet for the signer account address. Please DO NOT use your main/primary wallet. - - - `$SIGNER_ACCOUNT_PRIVATE_KEY`: Use the private key from your burner wallet. - - - `$SLOT_ID`: To assign your node to a specific slot, please provide the corresponding Slot ID or NFT ID. You can locate your NFT ID within your transaction details on PolygonScan. - -3. Optionally, you can provide to following values: - - - `$TELEGRAM_CHAT_ID`: Can be provided if you would like to enable Telegram reporting for node issues. See our [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) page for instructions on how to get your Telegram Chat ID. - -After entering these details, the node will start running the background processes. +```bash +git clone https://github.com/powerloom/snapshotter-lite-multi-setup.git dsv-mainnet-snapshotter-lite-multi-setup +cd dsv-mainnet-snapshotter-lite-multi-setup +git checkout master +``` -If you want to exit your screen, type the command in the terminal: - ```bash - CTRL + A + D - ``` +#### Run the Bundled Installer -**Subsequent Setup:** +Run the following script from within the repository directory to install the snapshotter CLI and its dependencies. -1. Select the Data Market that you would like to participate in. +```bash +./install-uv.sh +``` -2. You will be prompted to choose whether you wish to change the previously configured values for the above: `SOURCE_RPC_URL`, `SIGNER_ACCOUNT_ADDRESS`, `SIGNER_ACCOUNT_PRIVATE_KEY` and `SLOT_ID`. Choose `y` or `n` depending on whether you wish to change them. +If everything went well, you should see the following output: - ![Subsequent Setup](/images/snapshoter-lite-v2-node-setup-existing.png) +```bash +🚀 Installing Powerloom Snapshotter CLI with uv... -3. If you choose `y` to change the previously configured values, you will be prompted to enter the new values individually for each of the above values. +Installing uv... +downloading uv 0.10.2 x86_64-unknown-linux-gnu +no checksums to verify +installing to /root/.local/bin + uv + uvx +everything's installed! -### Stopping the Node +[ . . . more output . . . ] +Installing Powerloom Snapshotter CLI globally... +Installing from source... -- To stop the node, you can press `Ctrl+C` in the terminal where the node is running or `docker-compose down` in a new terminal window from the project directory. +Verifying installation... +✅ Installation successful! +Version: Powerloom Snapshotter CLI version: 0.2.0 (pip) -This will halt the running node and all associated processes. +✅ Installation complete! -By following these steps, you can successfully configure the Snapshotter Lite Node V2 on your Mac system. +You can now use any of these commands: + powerloom-snapshotter-cli + snapshotter -If you encounter any issues while operating the node, please refer our [troubleshooting section](./monitoring.md) for guidance on common debugging techniques. +Try: powerloom-snapshotter-cli --help ---- +To add /root/.local/bin to your PATH, either restart your shell or run: + source /root/.local/bin/env (sh, bash, zsh) + source /root/.local/bin/env.fish (fish) +``` - - - Currently, there are no specific instructions for running the Snapshotter Lite Node V2 without Docker on Windows. Users are encouraged to use the Docker setup for Windows as detailed in the Docker Setup section above. - - - -
+As the instructions at the end of the output suggest, you can add the `~/.local/bin` directory to your `PATH` by running the following command: -Everytime you start or restart the node, it goes through two stages +```bash +source ~/.local/bin/env +``` -### Simulation mode submissions +### Test the `help` Command -This does not count towards your snapshot quota. This is to test whether your node can establish connections to the sequencer over libp2p protocol streams that ultimately enforce the Powerloom Protocol for data markets. +You can now run the snapshotter CLI commands by prefixing them with `powerloom-snapshotter-cli` or `snapshotter`. Try the help command to get started: -You will see log messages similar to the one shown below that will ensure that your node has the capability of submitting snapshots to the sequencer. +```bash +powerloom-snapshotter-cli --help +# or +snapshotter --help +``` -![Simulation mode submissions](/images/SimulationSubmission.png) +You should see output like the following: -:::note -Learn more: -* [Sequencer component](/Protocol/Protocol_v2/sequencer.md) -::: +```bash + Usage: powerloom-snapshotter-cli [OPTIONS] COMMAND [ARGS]... + + Powerloom Snapshotter Node Management CLI + + +╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ --version Show version and exit. │ +│ --changelog Show changelog and exit. │ +│ --help Show this message and exit. │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ shell Start an interactive shell session for faster command execution. │ +│ diagnose Run diagnostics on the system and optionally clean up existing deployments. Use filters to target specific slot IDs, chains, or markets. │ +│ deploy Deploy snapshotter nodes for specified environment and data markets. │ +│ configure Configure credentials and settings for a specific chain and market combination. │ +│ status Show status of deployed snapshotter instances (screen sessions and Docker containers). Optionally filter by environment and/or data market. │ +│ check Check slot status: compare wallet-owned slots against running containers. │ +│ list Display available Powerloom chains and their data markets │ +│ identity Manage chain and market-specific identity configurations via namespaced .env files. │ +│ profile Manage CLI profiles for different wallet configurations. │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +``` -:::info -Read more about monitoring and verifying the simulation mode submissions on the [`Monitoring and Troubleshooting`](/build-with-powerloom/snapshotter-node/lite-node-v2/monitoring.md) page. -::: +### Verify BDS Data Market and DSV Mainnet Are Available -### Regular snapshot submissions +```bash +powerloom-snapshotter-cli list +# or from shell mode: +powerloom-snapshotter> list +# or with uv: +uv run powerloom-snapshotter-cli list +``` -Once you can verify the simulation mode submissions, you will have log messagse similar to the one shown below that will ensure that your node is capturing epoch releases and submitting snapshots to the sequencer. +You should see output with the BDS Data Market available for DSV Mainnet as `BDS_MAINNET_UNISWAPV3`. :::note -It usually takes 2 - 5 minutes between the simulation mode submissions and a subsequence epoch release to be caught to trigger the regular snapshot submissions. -::: - -![Sample node logs](/images/RegularSubmission.png) - -:::info -For further details on using the snapshotter dashboard to monitor the running status of your node, check the [`Monitoring Node Activity`](/build-with-powerloom/snapshotter-node/lite-node-v2/monitoring#11-monitoring-node-activity) section. +The Blockchain Data Services (BDS) data market is the first one being launched on the Decentralized Sequencer-Validator Mainnet network. This specifically serves close to realtime data on Uniswap V3 pools from Ethereum Mainnet. ::: - ---- - -## Alternative Setup Methods - -### Snapshotter CLI (Recommended for Multiple Slots) - -For operators managing multiple slots or those who prefer a streamlined setup process, we offer the **Powerloom Snapshotter CLI**. This tool simplifies configuration, deployment, and management of snapshotter nodes. - -:::tip Snapshotter CLI Benefits -- **Single command deployment** for all your slots -- **Interactive configuration** with guided prompts -- **Unified monitoring** of all instances -- **Easier updates** compared to manual setup -::: - -Learn more: [Snapshotter CLI Documentation](/build-with-powerloom/snapshotter-node/lite-node-v2/cli) - -### Manual Multi-Node Setup - -For advanced users who prefer manual control, we also provide detailed documentation for setting up multiple nodes on a Linux VPS. - -Repository: https://github.com/powerloom/snapshotter-lite-multi-setup - - -## Troubleshooting - -If you encounter any issues, please refer to our [Troubleshooting section](./monitoring.md) for more information. - +```bash +🌐 Available Powerloom Chains +└── MAINNET (Chain ID: 7869, RPC: https://rpc-v2.powerloom.network) + ├── BDS_MAINNET_UNISWAPV3 - Source: ETH-MAINNET + │ ├── Market Contract: 0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a + │ ├── Market Protocol State: 0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a + │ ├── P2P mesh (centralized sequencer off) + │ ├── Rendezvous: powerloom-dsv-mainnet-bds + │ ├── Gossipsub prefix: /powerloom/dsv-mainnet-bds/snapshot-submissions + │ ├── Compute: https://github.com/powerloom/snapshotter-computes.git (feat/bds_lite) Commit: 225348c + │ └── Config: https://github.com/powerloom/snapshotter-configs.git (feat/bds_lite) Commit: 8b8296b +``` diff --git a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/monitoring.md b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/monitoring.md index 3666b101..f886679c 100644 --- a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/monitoring.md +++ b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/monitoring.md @@ -5,230 +5,114 @@ title: Monitoring and Troubleshooting # Monitoring and Troubleshooting -This section guides you through monitoring and troubleshooting your node's snapshotting process. +This section covers the snapshotter CLI-based workflow for checking, debugging, and reconfiguring Snapshotter Lite V2 deployments. -## 1. Confirming and Monitoring Node Snapshotting Process ---- - -### 1.1 Monitoring Node Activity - #### Snapshotter Dashboard - Our [Snapshotter Dashboard](https://snapshotter-dashboard.powerloom.network/) enables you to verify if your node slot is actively submitting snapshots. - - ![Snapshotter-node-dashboard](/images/snapshot-lite-v2-daily-dashboard.png) - - #### Telegram Reporting Bot - Snapshotter Lite Nodes have the capability to send Telegram messages directly to you if any issues arise during the snapshotting process. See the [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) page for instructions on how to enable this feature. - - #### Slot Monitoring Service - The Powerloom Slot Monitoring Service provides comprehensive real-time monitoring for your node's slot activities. This service offers webhook-based notifications through platforms like Slack and Discord, giving you instant alerts about your slot's performance and submission status. See the [Slot Monitoring Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/slot-monitoring-setup) page for detailed configuration instructions. - -### 1.2 Simulation Logs - - On start-up, the node will perform two simulation submissions to test its connection to the sequencer network. If you notice logs similar to the lines below in the terminal, then your node's simulation submissions were successful. - - ![Snapshotter-First-Simulation](/images/SimulationSubmission.png) +## Confirm Node Activity -### 1.3 Terminal Status Check - The primary method to verify node status is through the terminal, which displays log responses from the node. Monitor these logs to assess the health and activity of your node. A healthy snapshotter will produce logs similar to the provided example screenshot. These logs indicate normal operation and successful snapshotting. +### Snapshotter Dashboard - ![Snapshotter-node-running](/images/RegularSubmission.png) +Use the [Snapshotter Dashboard](https://mint.powerloom.network/) to verify whether your slot is actively submitting snapshots. +### Telegram Reporting Bot +Snapshotter Lite nodes can send Telegram messages when issues arise during snapshotting. See [Telegram Bot Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup) for setup instructions. -## 2. Troubleshooting and Support ---- +### Slot Monitoring Service -This section provides guidance for troubleshooting your node. These steps help identify and resolve common problems efficiently. +The Powerloom Slot Monitoring Service provides webhook-based notifications through platforms like Slack and Discord. See [Slot Monitoring Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/slot-monitoring-setup) for configuration instructions. -### 2.1 Diagnostic and Cleanup Script +## CLI Status Check -The diagnostic and cleanup script checks for previous instances of the lite node, local collector, stale images, and networks. +Use the snapshotter CLI to check deployed screen sessions and Docker containers: ```bash -./diagnose.sh +powerloom-snapshotter-cli status ``` -For detailed usage instructions, refer to [Diagnostics](/build-with-powerloom/snapshotter-node/lite-node-v2/diagnostics) - -### 2.2 Check Status of Running Docker Containers - -If you launched your node using the `./build.sh` script, check your running Docker containers with: +You can also use shell mode: ```bash -docker ps +powerloom-snapshotter-cli shell +powerloom-snapshotter> status ``` -You should typically see output similar to: - -![Docker-ps](/images/docker-ps-running-containers.png) - -Containers follow these naming patterns: -- `snapshotter-lite-v2----` -- `snapshotter-collector-v2----` - -:::tip -If these containers aren't visible, refer to the [Diagnostics](/build-with-powerloom/snapshotter-node/lite-node-v2/diagnostics) section to check for previous instances. -::: - -For example, if participating with: -- Slot ID 1234 -- On Powerloom Mainnet -- In the UniswapV2 data market on Ethereum mainnet +## Docker Container Checks -You should see these containers: +To inspect running containers directly: -* `snapshotter-lite-v2-1234-mainnet-UNISWAPV2-ETH` -- this corresponds to the snapshotter lite node that computes and generates the snapshot -* `snapshotter-collector-v2-1234-mainnet-UNISWAPV2-ETH` -- this corresponds to the [local collector](/Protocol/Specifications/Snapshotter/local-collector.md) that collects the snapshot and submits it to the [sequencer](/Protocol/Protocol_v2/sequencer.md) - -Both containers should show a `healthy` status. +```bash +docker ps | grep -iE 'mainnet|collector' +``` -:::note -In a multi-node setup, you'll see multiple lite node containers sharing a single collector. This is expected behavior. -::: +For a BDS Mainnet slot such as `1234`, you should see containers similar to: -#### 2.2.1 Check Container Logs +```bash +snapshotter-lite-v2-1234-mainnet-BDS_MAINNET_UNISWAPV3-ETH +snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH +``` -Check running container logs with: +Check snapshotter logs with: ```bash -docker logs -n 500 +docker logs snapshotter-lite-v2-1234-mainnet-BDS_MAINNET_UNISWAPV3-ETH -n 500 ``` -This displays the last 500 lines of the container's logs. - -Following the previous example, check the `snapshotter-lite-v2-1234-mainnet-UNISWAPV2-ETH` container logs with: +Check local collector mesh publication logs with: ```bash -docker logs snapshotter-lite-v2-1234-mainnet-UNISWAPV2-ETH -n 500 +docker logs snapshotter-lite-local-collector-mainnet-BDS_MAINNET_UNISWAPV3-ETH -n 100 2>&1 | grep -i 'mesh' ``` -### 2.3 Check Screen Session Status - -If you followed the [Getting Started](/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started.md) instructions, you'll have a `screen` session named `powerloom-mainnet` running. +## Screen Session Checks -Verify the `screen` session is running with: +The CLI starts screen sessions for deployed snapshotter processes. List sessions with: ```bash screen -ls ``` -![screen sessions list](/images/screen-sessions-ls.png) - -If the `powerloom-mainnet` session is running, attach to it with: +Attach to a slot session with: ```bash -screen -r powerloom-mainnet +screen -r pl_mainnet_bds_mainnet_uniswapv3_1234 ``` -If working correctly, you should see at least one submission log within 3-5 minutes. - -![Regular submissions](/images/RegularSubmission.png) - -:::tip -`screen -R powerloom-mainnet` will also attach you to the `powerloom-mainnet` session, or create a new one if it doesn't exist. +Replace `1234` with your slot ID. -This is the first step in the getting started section. -::: +## Diagnostics and Cleanup -### 2.4 Stop, Kill, and Cleanup Specific Slots' Runtimes - - -#### 2.4.1 Stop and Remove Docker Containers -Stop either the snapshotter lite node or local collector container for specific slots using these commands. Replace `1234` with your slot ID. +Run diagnostics with: ```bash -docker ps --format '{{.Names}}' | grep '1234-mainnet-UNISWAPV2-ETH' | xargs docker kill -docker ps --format '{{.Names}}' | grep '1234-mainnet-UNISWAPV2-ETH' | xargs docker rm +powerloom-snapshotter-cli diagnose ``` -To kill all containers on Powerloom Mainnet for a specific data market (e.g., UniswapV2 on Ethereum mainnet), use: +Clean up existing deployments with: ```bash -docker ps --format '{{.Names}}' | grep 'mainnet-UNISWAPV2-ETH' | xargs docker kill -docker ps --format '{{.Names}}' | grep 'mainnet-UNISWAPV2-ETH' | xargs docker rm +powerloom-snapshotter-cli diagnose --clean --force ``` -#### 2.4.2 Remove Screen Sessions +For detailed usage instructions, see [Diagnostics](/build-with-powerloom/snapshotter-node/lite-node-v2/diagnostics). -For a single node setup, kill the screen session with: +## Reconfigure a Deployment -```bash -screen -X -S powerloom-mainnet quit -``` +Re-run `configure` to update signer details, RPC URLs, Telegram chat ID, or collector settings for the BDS Mainnet market: -For a multi-node setup, kill all screens for a specific slot ID with: ```bash -screen -ls | grep 'powerloom-mainnet-v2-1234-UNISWAPV2' | cut -d. -f1 | awk '{print $1}' | xargs -I % screen -X -S % quit +powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3 ``` -### 2.4 Editing the Environment File - -The environment file for participating in a data market is located in the `powerloom-mainnet` directory. It contains: - -- The namespace `mainnet` -- Data market name (e.g., `UNISWAPV2` or `AAVEV3`) -- Data source chain (e.g., `ETH` for Ethereum mainnet data) - -The examples below use `.env-mainnet-UNISWAPV2-ETH`. This filename appears during `./build.sh` execution if you've completed configuration. - - -:::note -Environment files follow the format `.env-mainnet--` for mainnet nodes. - -For Aave V3 on Ethereum mainnet, the file would be `.env-mainnet-AAVEV3-ETH`. -::: - -![build.sh screenshot asking for confirmation of updating existing env file](/images/snapshoter-lite-v2-node-setup-existing.png) - - -The `.env` file contains essential configuration: `SOURCE_RPC_URL`, `SIGNER_WALLET_ADDRESS`, `SIGNER_PRIVATE_KEY`, and `SLOT_ID`. To modify these variables: - - -1. **Navigate to the Node Directory:** - ```bash - cd powerloom-mainnet - ``` - -2. **Edit the Environment File:** - ```bash - nano .env-mainnet-UNISWAPV2-ETH - ``` - -Update variables as needed. Press `CTRL+X` to save and exit. - -3. **Rebuild the Node:** - ```bash - ./build.sh - ``` - ---- - -### 2.5 Using `build.sh` to Reconfigure the Node - -The `build.sh` script reconfigures the node with a single command. It reruns the setup process, updates the environment file, and rebuilds the node. +Then redeploy: ```bash -./build.sh +powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3 ``` -When prompted to update the existing environment file, select `y` to proceed. - -![build.sh screenshot asking for confirmation of updating existing env file](/images/snapshoter-lite-v2-node-setup-existing.png) - - - -### 2.6 Data Source RPC URLs -You may encounter errors related to the RPC URL configured for your data source (e.g., UniswapV2 or AaveV3 on Ethereum mainnet). When this occurs, verify your RPC URL is correct. For instructions on changing the RPC URL, refer to [Editing the Environment File](#24-editing-the-environment-file). - -While we cannot recommend specific RPC providers and leave the choice to the community, these reliable options are available: - -- **Ankr**: `https://rpc.ankr.com/eth` - Public RPC service, no signup required -- **Infura**: Requires signup and API key, provides usage monitoring -- **Alchemy**: Requires signup and API key, includes usage tracking - ---- +## RPC URL Issues +If the node reports source-chain RPC errors, rerun the configuration step and provide a working Ethereum mainnet RPC URL. Reliable providers include Infura, Alchemy, QuickNode, and Ankr. ## Additional Support -If you have followed these troubleshooting steps and still encounter issues, please contact us on [discord](https://discord.com/invite/powerloom) for further assistance. Our goal is to ensure your node runs smoothly, and we're here to help with any challenges you might face. \ No newline at end of file +If you have followed these troubleshooting steps and still encounter issues, contact us on [Discord](https://discord.com/invite/powerloom). diff --git a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup.md b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup.md index 43aa81a8..7809ac71 100644 --- a/docs/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup.md +++ b/docs/build-with-powerloom/snapshotter-node/lite-node-v2/telegram-bot-setup.md @@ -27,13 +27,14 @@ The PowerloomSnapshotterReportingService will never ask you for any p ![telegram-promp](/images/telegram-prompt.png) - - If you have a running node and would like to add the Telegram reporting feature, there are two options that you can use: + - If you have a running node and would like to add the Telegram reporting feature, re-run the snapshotter CLI configuration for the BDS Mainnet market: - **Option 1**: Update your `.env-mainnet-UNISWAPV2-ETH` or `.env-mainnet-AAVEV3-ETH` file with the generated `Chat ID` as seen in the image below. Once updated, run the `./build.sh` command again to restart the node. + ```bash + powerloom-snapshotter-cli configure --env mainnet --market BDS_MAINNET_UNISWAPV3 + powerloom-snapshotter-cli deploy --env mainnet --market BDS_MAINNET_UNISWAPV3 + ``` - ![updated-env-screenshot](/images/TelegramBotSetup.png) - - **Option 2**: Delete your `.env-mainnet-UNISWAPV2-ETH` or `.env-mainnet-AAVEV3-ETH` file, and then run the `./build.sh` command again to trigger a recreation of the data market specific `.env` file. This will remove all values from the initial setup, so ensure that you have these available. + Enter the `Chat ID` when prompted for the optional Telegram chat ID. ### To check if the Bot is successfully running, try these: diff --git a/docs/build-with-powerloom/use-cases/_category_.json b/docs/build-with-powerloom/use-cases/_category_.json deleted file mode 100644 index 37d509d1..00000000 --- a/docs/build-with-powerloom/use-cases/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Use Cases", - "position": 1, - "link": { - "type": "generated-index", - "description": "Build robust Web3 Data applications with powerloom. Explore existing implementations." - } - } \ No newline at end of file diff --git a/docs/build-with-powerloom/use-cases/building-new-usecase/_category_.json b/docs/build-with-powerloom/use-cases/building-new-usecase/_category_.json deleted file mode 100644 index 45ac7232..00000000 --- a/docs/build-with-powerloom/use-cases/building-new-usecase/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Building a new Use Case", - "position": 1, - "link": { - "type": "generated-index", - "description": "Learn how to build a new Use Case using Powerloom" - } - } \ No newline at end of file diff --git a/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard.md b/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard.md deleted file mode 100644 index c595b96b..00000000 --- a/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -sidebar_position: 0 ---- -# Extending Uniswap V2 dashboard usecase - -This documentation provides a step-by-step guide for developers looking to extend the functionality of the UniswapV2 Dashboard use case, specifically focusing on implementing new data points. The goal is to empower developers to enhance the dashboard with custom features, making it a valuable tool in hackathons and blockchain analytics. - -## Extending with New Data Points - -:::tip -Prerequisites: Before we dive into the implementation of new data points, you may want to look at the concept of how the pooler functions and how it retrieves and processes the data. - -[Closer look into the Snapshot Datasets](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/closer-look-at-snapshots) -::: - -### Scenario: 2-Hour Aggregate of Swap Events - -We'll use the example of creating a new data point that aggregates only Swap events over a 2-hour period. This involves capturing snapshots of Swap event logs and trade volumes within this timeframe. - -### Steps to Implement this New Data Point - -1. **Getting Started**: - You can follow [this guide](/build-with-powerloom/snapshotter-node/full-node/getting-started#for-developers-new-use-cases) to get started with the node setup for custom implementations. - -2. **Configure Aggregation Worker**: - In the `config/aggregator.json` file of your forked repository, add a new entry for your aggregation worker class. This class will be responsible for handling the new data aggregation task. - - Define the `project_type` as something like `"aggregate_swap_events_2h"`. - - Set `"aggregate_on"` to `"SingleProject"` or `"MultiProject"` depending on your aggregation logic. - - Under `"processor"`, specify the module and class name of your new processor. -```json -{ - "config": [ - // ... existing configurations ... - { - "project_type": "aggregate_swap_events_2h", - "aggregate_on": "SingleProject", - "processor": { - "module": "snapshotter.modules.computes.aggregate.swap_event_2h", - "class_name": "AggregateSwapEventProcessor" - } - } - // ... additional configurations ... - ] -} -``` - -1. **Create a New Data Model**: - Develop a new data model in [`utils/message_models.py`](https://github.com/powerloom/snapshotter-computes/blob/eth_uniswapv2/utils/models/message_models.py). Use existing models like `UniswapTradesAggregateSnapshot` and `UniswapTradesSnapshot` as references. Your model should be tailored to capture and represent data specific to the 2-hour Swap event aggregation. - -2. **Focus on 2-Hour Time Span and Swap Events**: - Modify the data collection logic to concentrate on a 2-hour time span (`epochId`). Ensure that your implementation is set to extract only Swap event logs and their associated trade volumes. Refer to the existing 24-hour aggregation example for guidance on structuring your logic. - -3. **Testing and Validation**: - After implementation, rigorously test your new feature to ensure accuracy and efficiency. Validate that the data collected aligns with your intended 2-hour aggregation of Swap events. - -4. **Commit and Share Your Work**: - Once your implementation is complete and tested, commit your changes to your implementation branch. Share your work with the community by creating a pull request to the main Computes repository, if desired. - -## Why Extend the UniswapV2 Dashboard? - -Extending the UniswapV2 Dashboard is an excellent opportunity for developers to: - -- **Contribute to Open Source**: Enhance a widely-used tool and give back to the community. -- **Learn and Experiment**: Gain hands-on experience with blockchain data and smart contract interactions. -- **Create Custom Analytics**: Tailor the dashboard to specific analytical needs, making it more versatile and useful. -- **Showcase Skills**: Use the extended dashboard as a portfolio piece in hackathons and professional settings. - -Extending the UniswapV2 Dashboard with new data points like a 2-hour aggregate of Swap events is an exciting thing to work on. It requires a good understanding of blockchain data, smart contract events, and data modeling. By following the steps outlined in this guide, developers can successfully enhance the dashboard, making it a more powerful tool for blockchain analytics and research. - -If you have any questions while building / integrating, you can reach us out on our [discord](https://discord.com/invite/powerloom). diff --git a/docs/build-with-powerloom/use-cases/building-new-usecase/tracking-wallet-interactions.md b/docs/build-with-powerloom/use-cases/building-new-usecase/tracking-wallet-interactions.md deleted file mode 100644 index 34399cc4..00000000 --- a/docs/build-with-powerloom/use-cases/building-new-usecase/tracking-wallet-interactions.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Tracking Wallet Interactions - -Let's say you want to do something as simple as tracking all the smart contract addresses a particular wallet interacts with from now on. You can do this by running a snapshotter node and writing a simple compute processor very similar to what we saw in the [activity tracking](/category/on-chain-activity-tracking) section. - -## Pre-requisites - -:::tip -Prerequisites: Before we dive into the implementation of new data points, you may want to look at the concept of how the pooler functions and how it retrieves and processes the data. - -[On-Chain Activity Tracking](/build-with-powerloom/use-cases/existing-implementations/activity-tracking/) -::: - -## Scenario: Tracking Wallet Transactions - -Let's use the example of tracking transactions of a wallet for Eth Chain. This involves capturing snapshots of transactions and their associated data. - -## Steps to Implement this New Data Point - -1. **Getting Started**: - You can follow [this guide](/build-with-powerloom/snapshotter-node/full-node/getting-started#for-developers-new-use-cases) to get started with the node setup for custom implementations. - -2. **Configure Snapshot Workers**: - In the `config/projects.json` file of your forked repository, add a new entry for your snapshot worker class. This class will be responsible for handling the new data snapshotting task. - - Define the `project_type` as something like `"eth:tracking_wallet_interactions"`. - - Set `"bulk_mode"` to `true` - - Under `"processor"`, specify the module and class name of your new processor. - - ```json - { - "project_type": "eth:tracking_wallet_interaction", - "projects":[], - "preload_tasks":[ - "block_transactions" - ], - "bulk_mode": true, - "processor":{ - "module": "snapshotter.modules.computes.tracking_wallet_interaction", - "class_name": "TrackingWalletInteractionProcessor" - } - } - ``` - -3. **Create a New Data Model**: - Develop a new data model in `utils/models/message_models.py`. Let's assume we are only capturing the contract addresses that a wallet interacts with. Your model should be tailored to capture and represent data specific to the wallet interactions. - The data model in this case will look something like this - ```python - - class TrackingWalletInteractionSnapshot(BaseModel): - wallet_address: str - contract_address: str - ``` - -4. **Focus on Wallet Interactions**: - You can simply fork and modify the BungeeBridgeProcessor to suit your needs. In this case, we will modify the data collection logic to concentrate on the wallet interactions. - -A sample implementation of such a processor will look something like this - -```python -import json -from typing import List -from typing import Tuple -from typing import Union - -from redis import asyncio as aioredis - -from .utils.event_log_decoder import EventLogDecoder -from .utils.models.message_models import TrackingWalletInteractionSnapshot -from snapshotter.utils.callback_helpers import GenericProcessorSnapshot -from snapshotter.utils.default_logger import logger -from snapshotter.utils.models.message_models import EthTransactionReceipt -from snapshotter.utils.models.message_models import PowerloomSnapshotProcessMessage -from snapshotter.utils.redis.redis_keys import epoch_txs_htable -from snapshotter.utils.rpc import RpcHelper - - -class TrackingWalletInteractionProcessor(GenericProcessorSnapshot): - transformation_lambdas = None - - def __init__(self) -> None: - self.transformation_lambdas = [] - self._logger = logger.bind(module='TrackingWalletInteractionProcessor') - - async def compute( - self, - epoch: PowerloomSnapshotProcessMessage, - redis_conn: aioredis.Redis, - rpc_helper: RpcHelper, - - ) -> Union[None, List[Tuple[str, TrackingWalletInteractionSnapshot]]]: - min_chain_height = epoch.begin - max_chain_height = epoch.end - - if max_chain_height != min_chain_height: - self._logger.error('Currently only supports single block height') - raise Exception('Currently only supports single block height') - - # get txs for this epoch - txs_hset = await redis_conn.hgetall(epoch_txs_htable(epoch.epochId)) - all_txs = {k.decode(): EthTransactionReceipt.parse_raw(v) for k, v in txs_hset.items()} - - wallet_address = '0xae2Fc483527B8EF99EB5D9B44875F005ba1FaE13' - wallet_txs = list( - map( - lambda x: x.dict(), filter( - lambda tx: tx.from_field == wallet_address and tx.to, - all_txs.values(), - ), - ), - ) - - snapshots = [] - for tx in wallet_txs: - snapshots.append( - ( - f"{wallet_address}_{tx['to']}", - TrackingWalletInteractionSnapshot( - wallet_address=wallet_address, - contract_address=tx['to'], - ), - ), - ) - - return snapshots -``` - -5. **Test your Processor**: - You can test your processor by running the snapshotter node and checking the output of the snapshots. - -4. **Commit and Share Your Work**: - Once your implementation is complete and tested, commit your changes to your implementation branch. Share your work with the community by creating a pull request to the main Computes repository, if desired. - - -If you have any questions while building / integrating, you can reach us out on our [discord](https://discord.com/invite/powerloom). - -If you're interested in understanding the working of core components of the protocol, you can check out the [protocol overview](/category/protocol-overview) section. \ No newline at end of file diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/_category_.json b/docs/build-with-powerloom/use-cases/existing-implementations/_category_.json deleted file mode 100644 index e8ef3148..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Existing Implementations", - "position": 0, - "link": { - "type": "generated-index", - "description": "A list of existing implementations of different Use Cases using Powerloom Snapshotter Node" - } - } \ No newline at end of file diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/_category_.json b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/_category_.json deleted file mode 100644 index d9552c7a..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "AaveV3 Dashboard", - "position": 1, - "link": { - "type": "generated-index", - "description": "AaveV3 Dashboard Implementation using Powerloom protocol" - } - } \ No newline at end of file diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md deleted file mode 100644 index 999a5522..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 5 ---- - -# Datapoints - -![AaveV3 Dashboard Powerloom](/images/aavev3-dashboard-powerloom.png) - -In Aave V3-Pooler, data points are specific, quantifiable elements derived from Aave V3 lending activities. -Each snapshot inherits `SnapshotBase` which looks something like this: -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L9-L17 -``` - -## Base Snapshots - -The following type of Base Snapshots are generated for the Aave V3 dashboard: - -### 1. Asset Metrics Snapshot - -The Asset Metrics refer to the total supplied and borrowed amounts, supply and borrow interest rates, and the indices used to compute future rate changes. -The asset snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/message_models.py#L26-L42 -``` -#### 1a. AaveSupplyData / AaveDebtData - -The nominal token amount and the token amount in terms of USD at the time of snapshotting: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/data_models.py#L65-L72 -``` -#### 1b. AssetDetailsData - -Additional asset details include the maximum loan-to-value ratio, liquidation information, the asset's reserve factor, borrow/supply caps, and available eMode options. - -For further information, please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/asset-risk/risk-parameters). - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/data_models.py#L25-L34 -``` - -#### 1c. RateDetailsData - -Additional rate details describing the interest rate strategy for the asset. - -For further information, please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/liquidity-risk/borrow-interest-rate). - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/data_models.py#L37-L45 -``` - -### 2. Volume-by-Action Snapshot - -The asset's total volume-by-action for the Epoch, and the corresponding events for each action emitted by the blockchain. -The volume-by-action snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/message_models.py#L91-L98 -``` - -#### 2a. volumeData - -The total nominal token volume and the volume in terms of USD at the time of snapshotting: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/data_models.py#L92-L94 -``` - -#### 2b. liquidationData - -Additional details describing a liquidation action: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/data_models.py#L117-L122 -``` - -## Aggregate Snapshots - -The above base snapshots are used as the data source for higher-order aggregates. These aggregates are then used to generate the data points present on the Aave V3 Dashboard. Refer to [data-composition](/Protocol/data-composition) for more details on how data points are composed. - -The following aggregate snapshots are generated by AaveV3-Pooler using base snapshots: - -### 1. Top Assets by Marketshare Snapshot - -All assets are organized by the total market share on the protocol. The top assets by marketshare snapshot look something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/message_models.py#L55-L69 -``` - -### 2. 24 Hour Volume-by-Action Snapshot - -24-hour volume-by-action for each asset per Epoch. The 24-hour volume-by-action snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/message_models.py#L101-L107 -``` - -### 3. Top Assets by Volume Snapshot - -All assets are organized by their 24-hour total volume-by-action. The top assets by volume snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/message_models.py#L110-L128 -``` - -### 4. 6 Hour Average Rates Snapshot - -Average supply and borrow rates over the previous 6 hours for each asset per Epoch. The 6-hour average rate snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/message_models.py#L82-L88 -``` - -### 5. 24 Hour Total Market Stats Snapshot - -24-hour stats for the entire Aave lending market. The 24-hour stats snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/message_models.py#L72-L79 -``` - diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md deleted file mode 100644 index 3b7b66a6..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -sidebar_position: 0 ---- - -# Introduction - -## Pooler - AaveV3 Data Market - -Powerloom's AaveV3 dashboard is an [extension](/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) of the Pooler framework. Its design is similar to the [Uniswap](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/) dashboard use case. The data network is powered by [Snapshotters](/build-with-powerloom/snapshotter-node/introduction) who capture critical data points from Aave's on-chain Smart Contracts. This data is then processed, aggregated, and displayed on the dashboard to provide users of the Aave protocol with actionable metrics. This implementation is a testament to the composable nature of Pooler and the Powerloom data network's flexibility in capturing a diverse range of data points. - -The Dashboard is hosted at [aave-v3.powerloom.io/](https://aave-v3.powerloom.io/) - -### Data Points and Aggregated Metrics - -Data points are essential elements that serve as the foundational units upon which base snapshots are built. In the Aave protocol, they capture key information about loans, such as the total supplied and borrowed amounts, interest rates, and asset prices at the time of the lending. These base data points are snapshotted and then aggregated by AaveV3-Pooler to provide broader loan market statistics & insights, such as 24-hour lending/borrowing volumes and historical APR rates. Due to their inherent complexity, participants may find lending markets challenging to navigate. Access to actionable metrics is important for users seeking to deploy their capital efficiently and at the appropriate risk levels. - ---- - -### Development and Extension - -The Pooler framework builds upon the modular architecture of a Snapshotter Node and enables extensions and custom use case implementations. A developer can extend the pooler compute files found in [snapshotter-computes](https://github.com/powerloom/snapshotter-computes/tree/aave) and config files found in [snapshotter-configs](https://github.com/powerloom/snapshotter-configs/tree/aave) to build their own custom use case implementations. - -The documentation has a dedicated section that discusses further implementation and use-case extensions. -Check out our guide on [Setup and Extension](/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md). diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md deleted file mode 100644 index 451da358..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Setup and Extension - -This section will help you set up a full node to participate in the Powerloom Aave V3 data market and run your personal dashboard. At the end of this guide, you will find instructions on extending the current Aave V3 implementation with additional data points. - -## Full Node Setup - -:::tip -Prerequisite: Ensure that the minimum requirements are met by the system on which it is to be deployed, which is located under the **System Requirements** section of the [Full Node - Getting Started](/build-with-powerloom/snapshotter-node/full-node/getting-started.md) page. -::: - -1. **Cloning the Deploy Repo** - Clone the repository against the `aave` branch. Open the terminal and run the below command to clone the deploy repo in a directory named `powerloom_deploy`. - ```bash - git clone https://github.com/powerloom/deploy.git --single-branch powerloom_deploy --branch aave && cd powerloom_deploy - ``` - -2. **Configuring The Node** - Copy `env.example` to `.env`. -- Ensure the following required variables are filled: - - `SOURCE_RPC_URL`: The URL for the Ethereum RPC (Local node/Infura/Alchemy) service. - - `SIGNER_ACCOUNT_ADDRESS`: The address of the signer account. This is your whitelisted address on the protocol. **Using a burner account is highly recommended** - - `SIGNER_ACCOUNT_PRIVATE_KEY`: The private key corresponding to the signer account address. - - `PROST_RPC_URL`: The URL for the PROST RPC service. - - `PROTOCOL_STATE_CONTRACT`: The contract address for the protocol state. - - `RELAYER_HOST`: The host address for the relayer. - - `NAMESPACE`: The unique key used to identify your project namespace - - `PROST_CHAIN_ID`: The chain ID for the PROST RPC service. - - Optionally, you may also set the following variables: - around which all consensus activity takes place. - - `POWERLOOM_REPORTING_URL`: The URL for reporting to Powerloom. - - `IPFS_URL`: The URL for the IPFS (InterPlanetary File System) service in HTTP(s) (e.g. `https://ipfs.infura.io:5001`) multiaddr format (e.g. `/dns/ipfs.infura.io/tcp/5001/https`) - - `IPFS_API_KEY`: The API key for the IPFS service (if required). - - `IPFS_API_SECRET`: The API secret for the IPFS service (if required). - - `SLACK_REPORTING_URL`: The URL for reporting to Slack. - - `WEB3_STORAGE_TOKEN`: The token for Web3.Storage. You can generate or retrieve this token from your [API tokens page](https://web3.storage/tokens/?create=true) after signing up for a free plan at web3.storage. - -3. **Running The Node** -- Run the following command (ideally in a `screen`) and follow the instructions. - ```bash - ./build.sh - ``` - -4. **Displaying the Dashboard** -- Once all of the services are up and running, the front-end can be accessed via [Pooler Frontend](https://github.com/powerloom/pooler-frontend/tree/aave) to see an Aave V3 summary data dashboard similar to the [Powerloom Aave V3 Dasboard](https://aave-v3.powerloom.io/). - - The front-end does not come packaged as part of the Aave deploy repository and will need to be run separately. The Front-end deployment instructions can be found [here](https://github.com/powerloom/pooler-frontend/tree/aave?tab=readme-ov-file#powerloom-pooler-product). - - The dashboard's `Synced by` section displays the time of the last snapshot taken, indicating if your snapshotting is falling behind. - -## Extending the Aave V3 Implementation - -:::tip -This section will utilize core concepts explained in the [Closer Look at Snapshots](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/closer-look-at-snapshots) section. It is strongly recommended that you review this page before extending the Aave use case. -::: - -### Development Node Setup - -1. **Forking the Computes and Config templates** - For an optimized development process, it's recommended to fork the templates [snapshotter-computes](https://github.com/powerloom/snapshotter-computes/tree/aave) and [snapshotter-configs](https://github.com/powerloom/snapshotter-configs/tree/aave). Our system utilizes the Git submodule architecture to manage these components efficiently. For a deeper understanding of how these elements integrate and function within our larger system, please refer to our [architecture documentation](/build-with-powerloom/snapshotter-node/architecture.md). This approach ensures a streamlined and cohesive development workflow. - - - Aave V3 Snapshotter Configs: https://github.com/powerloom/snapshotter-computes/tree/aave - - Aave V3 Snapshotter Computes: https://github.com/powerloom/snapshotter-configs/tree/aave - - Once the above branches are forked, you should have the two repositories in your profile. - -2. **Deploy the Development Node** - Detailed instructions for configuring the Aave V3 use case for development can be found in the [Powerloom Deploy](https://github.com/powerloom/deploy/tree/aave?tab=readme-ov-file#instructions-for-code-contributors) GitHub repository. - - - Ensure that the correct Config and Computes submodules are provided in the `SNAPSHOT_CONFIG_REPO` and `SNAPSHOTTER_COMPUTE_REPO` entries in the `.env` file. These must be changed if you have chosen to fork the submodule repositories as they are set to the Powerloom URLs by default. Additionally, ensure the correct branch names are provided in `SNAPSHOT_CONFIG_REPO_BRANCH` and `SNAPSHOTTER_COMPUTE_REPO_BRANCH` entries if they have been changed. - -3. **Run the Node** - It is recommended to run the full node before any extensions are made to ensure the setup is done properly. - ```bash - ./build-dev.sh - ``` - -### Preloaders - -Most on-chain data used by the current Aave V3 use case is retrieved using [Preloaders](docs/Protocol/Specifications/Snapshotter/preloading.md). These processors run before the base snapshots and are computed to reduce redundant queries on the Aave Smart Contracts. The Aave protocol stores data for *all* assets in their Smart Contracts, so preloaders are particularly useful when gathering data for this use case. Any base snapshot extension of the current implementation may find that the required on-chain data has already been gathered by a preloader. See the [Snapshot Generation](/Protocol/Specifications/Snapshotter/snapshot-build.md) page for more information on "how base snapshots are built". - -There are two important preloaders to be aware of: - -1. **Bulk Asset Data Preloader** -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/preloaders/asset_data/preloader.py#L10-L34 -``` - -2. **Bulk Events Preloader** -```python reference -https://github.com/powerloom/snapshotter-computes/blob/aave/utils/preloaders/volume_events/preloader.py#L9-L33 -``` - -Both of these preloaders retrieve on-chain data and then store it locally in Redis for [later use](https://github.com/powerloom/snapshotter-computes/blob/aave/utils/core.py#L93-L121) by the base snapshot processors' `compute` functions. The data models describing the data gathered by the `BulkAssetDataPreloader` can be found [here](https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/data_models.py#L9-L45). The list of event emissions gathered by the `BulkVolumeEventsPreloader` can be found [here](https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/data_models.py#L9-L45). - -Visit the [Data Points](/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md) section for a complete list of currently available base snapshots. - -### Adding an Aggregate Snapshot - -For this example, we will add a 6-hour volume-by-action aggregate using the 24-hour volume aggregate as a reference. The data for the 24-hour volume aggregate is already retrieved by the `BulkVolumeEventsPreloader` and processed using the `AggregateSupplyVolumeProcessor` as seen in this [compute](https://github.com/powerloom/snapshotter-computes/blob/aave/aggregate/single_aave_volume_24h.py#L108). - -1. **Create the Aggregation Worker Processor**: - - In the `aggregate/` directory of your forked `snapshotter-computes` repository, create a Python file containing your new processor. - - Name the file something like `single_aave_volume_6h.py` - - For now, this will be used as a placeholder and filled in with the processor's logic in later steps. - - Visit the Aggregate Snapshots section of the [Snapshot Generation](/Protocol/Specifications/Snapshotter/snapshot-build.md) page for more information on Aggregate Processors - -2. **Configure Aggregation Worker**: - - In the `aggregator.json` file of your forked `snapshotter-configs` repository, add a new entry for your aggregation worker class. This class will be responsible for handling the new data aggregation task. - - Define the `project_type` as something like `single_aave_volume_6h`. - - Set `aggregate_on` to `SingleProject` since we will extend the current SingleProject 24-hour implementation. - - Under `processor`, specify the module and class name of your new processor created in Step 1. - - ```json - { - "config": [ - // ... existing configurations ... - { - "project_type": "single_aave_volume_6h", - "aggregate_on": "SingleProject", - "processor": { - "module": "snapshotter.modules.computes.aggregate.single_aave_volume_6h", - "class_name": "AggregateSupplyVolumeProcessor" - } - } - // ... additional configurations ... - ] - } - ``` - -3. **Modify the Processor Logic**: - - Modify the data collection logic to concentrate on a 6-hour time span (`epochId`). Refer to the existing 24-hour aggregation example for guidance on structuring your logic. The 24-hour aggregate currently collects data for all core Aave V3 "actions" that can be taken on-chain. You may continue to collect data for all action's events, or you may choose to focus on a single action. Keep in mind that you will need to create a new data model in the `utils/message_models.py` file in your `snapshotter-computes` fork if you choose to change the snapshot data. See the [`AaveVolumeAggregateSnapshot`](https://github.com/powerloom/snapshotter-computes/blob/aave/utils/models/message_models.py#L101-L107) for reference. - -4. **Testing and Validation**: - - After implementation, rigorously test your new feature to ensure accuracy and efficiency. Validate that the data collected aligns with your intended 6-hour aggregation of each asset's volume-by-action. - -5. **Commit and Share Your Work**: - - Once your implementation is complete and tested, commit your changes to your implementation branch. Share your work with the community by creating a pull request to the `aave` Computes repository, if desired. - diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/_category_.json b/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/_category_.json deleted file mode 100644 index 85c840c1..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "On-Chain Activity Tracking", - "position": 2, - "link": { - "type": "generated-index", - "description": "Monitor Events and Transactions over various chains and protocols" - } - } \ No newline at end of file diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/index.md deleted file mode 100644 index 6b7260e3..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/index.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 0 ---- - -# Tracking Quests on ZkEVM - -Tracking on-chain activities can be a challenging task for developers. It requires a deep understanding of the underlying blockchain protocol and the ability to process large amounts of data per block. - -With the Snapshotter Peers, developers can easily track on-chain activities across various blockchains and protocols. The only thing they need to do is write a Snapshot Processor that extracts and returns the relevant data from the list of transactions in a block which are already accessible to them, thanks to [preloading](/Protocol/Specifications/Snapshotter/preloading). - -## Why On-Chain Activity Tracking Matters - -Being able to track on-chain activities is crucial for a wide range of applications, including: -- **Understanding User Interactions**: It helps in identifying patterns and trends in how users interact with different blockchain protocols. -- **Identifying trends**: It helps in identifying trends in how users interact with different blockchain protocols. For example, it can be used to identify the most popular smart contracts or the most active wallet addresses. -- **Signal to Trading Strategies**: It can be used to identify potential trading opportunities based on the activity of specific wallet addresses or smart contracts. -- **Quest Completion Tracking**: It can be used to track the completion of quests or tasks on the blockchain. - -For example, we at Powerloom use Quest completion tracking for our Testnet program participants. We leverage Snapshotter Peers to monitor on-chain activities of testnet participants across various chains and protocols. These quests predominantly operate in [Bulk Mode](/Protocol/Specifications/Snapshotter/snapshot-build#data-source-specification-bulk-mode) due to their one-time nature and the highly dynamic set of participants involved. - -## Building an On-Chain Activity Tracker - -### Snapshot Building - -We let Snapshotter Peers handle the heavy lifting of capturing on-chain activities. Developers can focus on building a Snapshot Processor that extracts and returns the relevant data from the list of transactions in a block. -For example, `BungeeBridgeProcessor` located in [`snapshotter/modules/computes`](https://github.com/powerloom/snapshotter-computes/blob/zkevm_quests/bungee_bridge.py) is one of the base Processor computes for ZkEVM Quest Tracking. This class uses the `GenericProcessorSnapshot` structure found in [`snapshotter/utils/callback_helpers.py`](https://github.com/powerloom/pooler/blob/main/snapshotter/utils/callback_helpers.py). - -Any compute for base snapshots basically needs to implement the `compute` function. - -```python reference -https://github.com/powerloom/pooler/blob/d8b7be32ad329e8dcf0a7e5c1b27862894bc990a/snapshotter/utils/callback_helpers.py#L190-L195 -``` - -The `compute` function is the main part where we create and process snapshots. It uses these inputs: - - - `epoch`: Epoch details for which the snapshot is being generated. - - `redis`: Redis connection object. - - `rpc_helper`: RPC Helper object. - - `epoch` is `PowerloomSnapshotProcessMessage` object which contains the following information: -```python reference -https://github.com/powerloom/pooler/blob/main/snapshotter/utils/models/message_models.py#L46-L50 -``` - -The Infrastructure is scalable enough to handle high throughput chains like ZkEvm in close to real time even with `Epoch` size of 1 block. - -The `BungeeBridgeProcessor` then goes through all preloaded block transactions, filters out, and then generates relevant snapshots for wallet addresses that received funds from the Bungee Bridge refuel contract during that epoch. - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/29199feab449ad0361b5867efcaae9854992966f/bungee_bridge.py#L40-L92 -``` - -The format of the output data can vary based on what you need it for. However, the return type must always be a list of (`wallet_address`, [`pydantic`](https://pypi.org/project/pydantic/) snapshot object) (for bulk mode). - -Each `wallet_address` is mapped to a `pydantic` snapshot object and submitted to the protocol state. - -### Configuration - -A configuration file [`config/projects.json`](https://github.com/powerloom/snapshotter-configs/blob/39e4713cdd96fff99d100f1dea7fb7332df9e491/projects.example.json) specifies the details of the snapshots to be generated. For instance, sample config for [`BungeeBridgeProcessor`](https://github.com/powerloom/snapshotter-computes/blob/zkevm_quests/bungee_bridge.py) for `zkevm:bungee_bridge` might look like this: - -```json -{ - "project_type": "zkevm:bungee_bridge", - "projects":[], - "preload_tasks":[ - "block_transactions" - ], - "bulk_mode": true, - "processor":{ - "module": "snapshotter.modules.computes.bungee_bridge", - "class_name": "BungeeBridgeProcessor" - } -} -``` - -Critical dependencies, such as [`block_transactions`](https://github.com/powerloom/pooler/blob/main/snapshotter/utils/preloaders/tx_receipts/preloader.py), are essential components defining the initial dataset processed by the snapshot builder. - -## Expanding to Monitor Additional On-chain Activities - -Extending the tracking of other on-chain activities through custom snapshot processors is a straightforward process. For detailed guidance on this topic, please refer to the [Build with Powerloom](/category/building-a-new-use-case) section. diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/eth_price_tracking.md b/docs/build-with-powerloom/use-cases/existing-implementations/eth_price_tracking.md deleted file mode 100644 index 9d063d37..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/eth_price_tracking.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -sidebar_position: 3 ---- -# ETH Price Tracker - -## Introduction -This guide provides a detailed walkthrough for setting up a price tracker for the Ethereum token, from hereon referred to as ETH. - -:::tip -Prerequisites: Before we dive into the implementation of ETH price tracker, you must follow all the steps to -[setup your Devnet Node](/build-with-powerloom/devnet/getting-started) -::: -### Scenario: ETH Price Tracking - -We aim to capture real-time changes in ETH's price conversion ratio. Watch the tutorial below for a detailed walkthrough. - - - -## Steps to Implement this Use Case - -### Cloning the Deploy Repository -Clone repository against the respective branch (main by default). Open the terminal and run the below command to clone the deploy repo in a directory named `powerloom_deploy`. - -```bash -git clone https://github.com/powerloom/deploy.git --single-branch powerloom_deploy --branch devnet && cd powerloom_deploy -``` - -### Configuring The Node - Copy env.example to .env - -#### Required variables - - -- `SOURCE_RPC_URL` : The URL for the Ethereum RPC (Local node/Infura/Alchemy) service. Set the RPC URL to Ethereum mainnet to snapshot the data source contracts on it. -- `SIGNER_ACCOUNT_ADDRESS` : The address of the signer account. This should be an unused "burner" address that does not need to have any token balance. You can create a new burner wallet from our [tool](https://snapshotter-dashboard.powerloom.network/burner). -- `SIGNER_ACCOUNT_PRIVATE_KEY` : The private key corresponding to the signer account address. -- `SLOT_ID` : Enter your Devnet Slot ID. - -:::info -Unless it is a customized need or instructed by us, the below need not be changed or modified from the values already supplied in `env.example` -::: - -- `SNAPSHOT_CONFIG_REPO`=[https://github.com/powerloom/snapshotter-configs](https://github.com/powerloom/snapshotter-configs/tree/eth_price_monitor) -- `SNAPSHOT_CONFIG_REPO_BRANCH`=eth_price_monitor -- `SNAPSHOTTER_COMPUTE_REPO`=[https://github.com/powerloom/snapshotter-computes](https://github.com/powerloom/snapshotter-computes/tree/eth_price_monitor) -- `SNAPSHOTTER_COMPUTE_REPO_BRANCH`=eth_price_monitor -- `PROTOCOL_STATE_CONTRACT` : The contract address for the protocol state. -- `RELAYER_HOST`: The host address for the relayer. -- `NAMESPACE` : The unique key used to identify your project namespace. -- `PROST_CHAIN_ID` : The Devnet chain ID. -- `PROST_RPC_URL` : The URL for the PROST RPC service. -- `POWERLOOM_REPORTING_URL` : The URL for reporting to Powerloom. - -#### Optional - -- `IPFS URL` : The URL for the IPFS (InterPlanetary File System) service in HTTP/HTTPS (e.g. `https://ipfs.infura.io:5001`) multiaddr format (e.g. `/dns/ipfs.infura.io/tcp/5001/https`) -- `IPFS_API_KEY`: The API key for the IPFS service (if required). -- `IPFS_API_SECRET`: The API secret for the IPFS service (if required). -- `SLACK_REPORTING_URL`: The URL for reporting to Slack. -- `WEB3_STORAGE_TOKEN`: The token for Web3 Storage. You can generate or retrieve this token from your [API token page](https://web3.storage/) after signing up for a free plan at web3.storage. - -### Snapshot Building - -:::info -It is recommended to look at the docs on [snapshot generation](/Protocol/Specifications/Snapshotter/snapshot-build). -::: - -Snapshotter node has a simple interface as part of `GenericProcessorSnapshot` class that business logic specific computes need to implement. The rest of the heavy lifting around reliable submissions and finalization is taken care of by the rest of the features of the node. - -In this case, `EthPriceProcessor` located in [`snapshotter/modules/computes`](https://github.com/powerloom/snapshotter-computes/blob/eth_price_monitor/eth_price_tracking.py) is the sole compute class for ETH price tracking. This class implements the [`GenericProcessorSnapshot`](https://github.com/powerloom/pooler/blob/main/snapshotter/utils/callback_helpers.py) interface, most notably the `compute()` callback. This callback is where we build the snapshots. - - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/eth_price_monitor/eth_price_tracking.py#L1-L45 -``` - -`get_eth_price_usd()` is located in [`snapshotter/modules/computes`](https://github.com/powerloom/snapshotter-computes/blob/eth_price_monitor/eth_price_tracking.py) and is a utility function that calculates the price of ETH as a weighted average of its price conversion ratios against DAI, USDC and USDT in the corresponding Uniswap V2 pair contracts. The weights assigned are relative to the total liquidity locked against the W(rapped)ETH token across the three pair contracts. - -```python reference -https://github.com/powerloom/pooler/blob/main/snapshotter/utils/snapshot_utils.py#L140-L154 -``` - -### Set Up the Codebase - -Setup the codebase by running the `bootstrap.sh` command in the terminal. Developers may use different shells, such as `bash` or `zsh`. Adjust the command accordingly. - -For bash: - -```bash -bash bootstrap.sh -``` -or -```zsh -zsh bootstrap.sh -``` - -### Run the Snapshotter Node - - -```bash -bash build.sh -``` -or -```zsh -zsh build.sh -``` - -Once your node is running, the core API server can be found on [http://localhost:8002](http://localhost:8002). It comes with an easy to use SwaggerUI at [http://localhost:8002/docs](http://localhost:8002/docs) to test out the endpoints to retrieve snapshotted data, or monitor the node status among other things. - -![endpoints](/images/endpoints.png) - -The snapshotted data as generated by the compute module referred above is retrieved from `/data/{epoch_id}/{project_id}` endpoint. It requires two parameters - -- `epoch_id (int)`: the [epoch ID](/Protocol/Specifications/Epoch) against which it will fetch the snapshotted data. -- `project_id (str)`: refer to [project id generation](/Protocol/Specifications/Snapshotter/snapshot-build) to know more. In this example, it is the concatenation of the the first element in the tuple [returned from the snapshot compute module's implementation of `compute()`](#snapshot-building) along with the project type prefix as found in the [corresponding config for this snapshotter node](#configuring-the-node---copy-envexample-to-env). - -```python reference -https://github.com/powerloom/snapshotter-configs/blob/8ed08b19272005f5c45b1af1ff9fd0ab5195bbc6/projects.example.json#L4 -``` - -:::info -To learn more about the details of the first element in the tuple being returned from `compute()` being considered as the data source in project ID generation, refer to the docs on [Data Source Specification: Bulk Mode](/Protocol/Specifications/Snapshotter/snapshot-build#data-source-specification-bulk-mode) -::: - -## Verifying snapshotted data - -As the node continues snapshotting data, the quickest way to check the snapshotted data is to check against `epoch_id` and `project_id` returned in the logs. Copy these values and paste them in the endpoint to retrieve project data in the [SwaggerUI exposed against the core API](#run-the-snapshotter-node). - -![endpoints](/images/docker.png) - -For example, in the screenshot above, the `epoch_id` is `100792`. Hit execute. The corresponding snapshotted data to this specific `epoch_id` displays the price of ETH as `3067.935921`. - -As the `epoch_id` moves ahead to `100793`, we find the above endpoint reflects the latest price captured of ethereum as `3068.034792` - -![endpoints](/images/eth-price-one-snapshot.png) -![endpoints](/images/eth-price-two-snapshot.png) - -### How to program this - -1. Define the correct project ID against which data has to be fetched - -```python -project_type = "eth:price_tracking" # from https://github.com/powerloom/snapshotter-configs/blob/eth_price_monitor/projects.example.json#L4 -project_namespace = "DEVNET" # from https://github.com/powerloom/deploy/blob/95ceb83a97a16279816c406eef484245df483fb1/env.example#L25 -data_source = "example" # from https://github.com/powerloom/snapshotter-computes/blob/15059013c6c17327d1c0d413d3885c23a6383305/eth_price_tracking.py#L45 -project_id = f'{project_type}:{data_source}:{project_namespace}' -``` -2. Fetch the last finalized epoch from the API endpoint `http://localhost:8002/last_finalized_epoch/{project_id}` -3. Fetch the data against this epoch ID from the API endpoint `http://localhost:8002/data/{epoch_id}/{project_id}` - -## Reach out to us - -For any sort of support or clarification, reach out to us on our [discord developer channel](https://discord.com/channels/777248105636560948/1180479966434054165). diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/_category_.json b/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/_category_.json deleted file mode 100644 index c0521046..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Uniswap Dashboard", - "position": 0, - "link": { - "type": "generated-index", - "description": "UniswapV2 and UniswapV3 Dashboard Implementation using Powerloom protocol" - } - } \ No newline at end of file diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/closer-look-at-snapshots.md b/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/closer-look-at-snapshots.md deleted file mode 100644 index 1fcd54e6..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/closer-look-at-snapshots.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -sidebar_position: 4 ---- -# Closer Look at Snapshots -Let's take a closer look at how base snapshots and aggregates are generated by the Snapshotter Node for Pooler. - -## Base Snapshots - -:::info -Before you dive into this section, please make sure you take a look into the [Snapshot Generation Section](/Protocol/Specifications/Snapshotter/snapshot-build#base-snapshots). -::: - -Snapshotter node has several interfaces defined to handle the heavy lifting so that you can focus on just writing computes modules. For example, `TradeVolumeProcessor`, located in the **Snapshotter-computes** [`snapshotter-computer/trade_volume.py`](https://github.com/powerloom/snapshotter-computes/blob/eth_uniswapv2/trade_volume.py), is one of the base Processor computes for Pooler. This class uses the `GenericProcessorSnapshot` structure found in [`snapshotter/utils/callback_helpers.py`](https://github.com/powerloom/pooler/blob/main/snapshotter/utils/callback_helpers.py). - -Any processor for base snapshots needs to implement the `compute` function. - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/74b2eaa452bfac8c0e4e0a7ed74a4d2748e9c224/trade_volume.py#L23-L28 -``` - -The `compute` function is the main part where we create and process snapshots. It uses these inputs: -- `epoch`: Epoch details for which the snapshot is being generated. -- `redis`: Redis connection object. -- `rpc_helper`: RPC Helper object. - -`epoch` is `PowerloomSnapshotProcessMessage` object which contains the following information: -```python reference -https://github.com/powerloom/pooler/blob/main/snapshotter/utils/models/message_models.py#L46-L50 -``` - -The `TradeVolumeProcessor` collects and stores information about trades that happen within a specific range of blocks in the blockchain, known as the epoch. This range is defined by the lowest block number (`min_chain_height`) and the highest block number (`max_chain_height`) in that epoch. - -The format of the output data can vary based on what you need it for. However, the return type must always be a [`pydantic`](https://pypi.org/project/pydantic/) model, it helps organize and define the data structure clearly. - - -:::info -Pydantic Model is a Python Library that helps data validation and parsing, by using Python type annotations. -::: - -## Aggregated Snapshots - -In the preceding section, we delved into the `TradeVolumeProcessor` logic, responsible for capturing snapshots of Uniswap v2 trade information between block heights `min_chain_height` and `max_chain_height`. - -The epoch size, as detailed in the earlier section on [epoch generation](/Protocol/Specifications/Epoch), remains constant for this specific implementation of the Uniswap v2 use case on the Powerloom Protocol. This consistency extends to the time duration encompassed within each epoch. - -To access the finalized state and data CID corresponding to each epoch, refer to the smart contract on the anchor chain holding the protocol state. The relevant helpers for this can be located in `get_project_epoch_snapshot()` within [`pooler/snapshotter/utils/data_utils.py`](https://github.com/powerloom/pooler/blob/main/snapshotter/utils/data_utils.py). - -```python reference - -https://github.com/powerloom/pooler/blob/fc08cdd951166ab0cea669d233cd28d0639f628d/snapshotter/utils/data_utils.py#L273-L295 - -``` - -To figure out the end point (or tail) for a 24-hour period of snapshots and trade data, starting from a given epoch ID (the beginning or head of this time span), we use a specific formula. - -``` -time_in_seconds = 86400 -tail_epoch_id = current_epoch_id - int(time_in_seconds / (source_chain_epoch_size * source_chain_block_time)) -``` - -```python reference - -https://github.com/powerloom/pooler/blob/fc08cdd951166ab0cea669d233cd28d0639f628d/snapshotter/utils/data_utils.py#L507-L546 -``` - -The worker class for such aggregation is defined in `config/aggregator.json` in the following manner: - -```json reference -https://github.com/powerloom/snapshotter-configs/blob/ae77941311155a9126205af08735c3dfa5d72ac2/aggregator.example.json#L3-L10 - -``` - -`AggregateTradeVolumeProcessor`, located in the **Snapshotter-computes** [`snapshotter-computer/aggregate/single_uniswap_trade_volume_24h.py`](https://github.com/powerloom/snapshotter-computes/blob/eth_uniswapv2/aggregate/single_uniswap_trade_volume_24h.py) is one of the aggregate computes for Pooler. This class uses the `GenericProcessorAggregate` structure found in [`snapshotter/utils/callback_helpers.py`](https://github.com/powerloom/pooler/blob/main/snapshotter/utils/callback_helpers.py). - -Any processor for aggregate snapshots needs to implement the `compute` function. - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/74b2eaa452bfac8c0e4e0a7ed74a4d2748e9c224/aggregate/single_uniswap_trade_volume_24h.py#L110-L118 -``` - -The `compute` function is the main part where we create and process snapshots. It uses these inputs: -- `msg_obj`: Underlying message object that contains the details of the aggregate snapshot composition. -- `redis`: Redis connection object. -- `rpc_helper`: RPC Helper object. -- `anchor_rpc_helper`: RPC Helper object for the anchor chain. -- `ipfs_reader`: IPFS Client object. -- `protocol_state_contract`: Protocol state contract Web3 object. -- `project_id`: Project ID for which the aggregate snapshot is being generated. - -`msg_object` is either of type `PowerloomSnapshotSubmittedMessage` or `PowerloomCalculateAggregateMessage` for even more complex aggregates. - -PowerloomSnapshotSubmittedMessage contains the following information: -```python reference -https://github.com/powerloom/pooler/blob/main/snapshotter/utils/models/message_models.py#L46-L50 -``` - -PowerloomCalculateAggregateMessage contains the following information: -```python reference -https://github.com/powerloom/pooler/blob/main/snapshotter/utils/models/message_models.py#L90-L93 -``` - -For a comprehensive understanding of Pooler computes, refer to the [snapshotter-computes](https://github.com/powerloom/snapshotter-computes/tree/eth_uniswapv2) repository. - -## Extending Pooler for Additional Datapoints - -It's straightforward to implement custom data points on top of the existing pooler. Our [Extending UniswapV2 dashboard](/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) section provides detailed coverage on this topic. diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/data-points.md deleted file mode 100644 index 427da359..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/data-points.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 5 ---- - -# Datapoints - -![UniswapV2 Dashboard Powerloom](/images/uniswapv2-dashboard-powerloom-2.png) - -In Pooler, data points are specific, quantifiable elements derived from Uniswap V2 and V3 trading activities. -Each snapshot inherits `SnapshotBase` which looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L9-L17 -``` - -## Base Snapshots - -The following type of Base Snapshots are generated by Pooler for the Uniswap V2 and V3 Dashboards: - -### 1. Pair Reserves Snapshot - -Liquidity reserves of each pair per Epoch. The reserves snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L20-L32 -``` - -Significant differences between the V2 and V3 implementations can be found in the generation of this base snapshot and are outlined below: - -#### V2 Reserves Snapshot Caclulations - -The token reserve amounts for a UniswapV2 pair are retrieved from the [getReserves()](https://github.com/Uniswap/v2-core/blob/ee547b17853e71ed4e0101ccfd52e70d5acded58/contracts/UniswapV2Pair.sol#L38) function that is available in the `UniswapV2Pair` contract. These amounts are converted from their native integer format into a normalized decimal format and are then used to populate the snapshot's `token0Reserves` and `token1Reserves` fields. This calculation can be seen in the UniswapV2 compute module here: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/core.py#L103-L130 -``` - -The price of a token in a UniswapV2 pair can be derived using the ratio of the pair's token reserves, or by utilizing one of the pricing functions available in the `UniswapV2Library` contract such as [getAmountsOut()](https://github.com/Uniswap/v2-periphery/blob/0335e8f7e1bd1e8d8329fd300aea2ef2f36dd19f/contracts/libraries/UniswapV2Library.sol#L62-L70). See the [UniswapV2 Pricing](https://docs.uniswap.org/contracts/v2/concepts/advanced-topics/pricing) documentation for additional information. The snapshot's `token0Prices` and `token1Prices` fields are calculated by first deriving each token's price in terms of ETH (or the source chain's equivalent gas token), and then converting the resulting ETH price to USD terms. - -For each token, the compute attempts to find a UniswapV2 pair consisting of the given token and wrapped ETH (WETH). If the token's WETH pair exists, its ETH price is derived using the ratio of the pair's token reserves. If the token's WETH pair does not exist, an additional pair consisting of the given token and a whitelisted token is used to derive an intermediary price before converting it back in terms of ETH. This calculation can be seen in the [Pricing Utils](https://github.com/powerloom/snapshotter-computes/blob/1abcf639d00a2fed87f01fcf0332cfb090257272/utils/pricing.py#L259-L318) of the UniswapV2 compute module. - -The ETH price in terms of USD is calculated in Pooler's [Snapshot Utils](https://github.com/powerloom/pooler/blob/db969eb3956d77cbca36daaeb96fce70314a9b63/snapshotter/utils/snapshot_utils.py#L37-L184), and it is used to convert each token's ETH price to USD in the [Pricing Utils](https://github.com/powerloom/snapshotter-computes/blob/1abcf639d00a2fed87f01fcf0332cfb090257272/utils/pricing.py#L320-L331) of the UniswapV2 compute module. The results are used to populate the snapshot's `token0Prices` and `token1Prices` fields. - -The snapshot's `token0ReservesUSD` and `token1ReservesUSD` fields are calculated by applying the `token0Prices` and `token1Prices` to the `token0Reserves` and `token1Reserves` values respectively. This calculation can be seen in the [Core Utils](https://github.com/powerloom/snapshotter-computes/blob/1abcf639d00a2fed87f01fcf0332cfb090257272/utils/core.py#L132-L133) of the UniswapV2 compute module. - -#### V3 Reserves Snapshot Caclulations - -:::tip -The following section contains references to advanced concepts specific to the UniswapV3 Protocol. It is recommended that you read the [UniswapV3 Concepts](https://docs.uniswap.org/concepts/protocol/concentrated-liquidity) documentation as well as the [UniswapV3 Math Primer](https://blog.uniswap.org/uniswap-v3-math-primer) before continuing if you are unfamilar with the inner workings of the protocol. -::: - -Unlike the `UniswapV2Pair` contract, the `getReserves()` function is not available in the `UniswapV3Pool` contract, so the token reserve amounts cannot be retrieved directly from the chain and must be calculated manually. The calculation is computationally expensive, as it involves iterating over each available tick on the pool's price curve to sum the liquidity available at each tick. In order to reduce resource usage and limit the number of RPC requests, Powerloom's UniswapV3 dashboard implementation splits the computation of the `UniswapPairTotalReservesSnapshot` into two phases: - -1. An initial manual calculation of the token reserves for each pool using the `calculate_reserves()` function found in the [Total Value Locked Utils](https://github.com/powerloom/snapshotter-computes/blob/9241e32155107949ccf4dbc4214ef29a91996b7f/total_value_locked.py#L158-L182) of the UniswapV3 compute module. -2. Incremental adjustments to the initially calculated reserve values based on `Mint` and `Burn` events for each token in the pool. This calculation can be seen in the [Core Utils](https://github.com/powerloom/snapshotter-computes/blob/9241e32155107949ccf4dbc4214ef29a91996b7f/utils/core.py#L131-L168) of the UniswapV3 compute module. - -The resulting reserve values are used to populate the snapshot's `token0Reserves` and `token1Reserves` fields. - -The price of a token in a UniswapV3 pool can be calculated from the `sqrtPriceX96` value returned from a `UniswapV3Pool` contract's [slot0()](https://github.com/Uniswap/v3-core/blob/d8b1c635c275d2a9450bd6a78f3fa2484fef73eb/contracts/UniswapV3Pool.sol#L74) function. This value is returned in a format known as Q Notation. For additional information on Q notation and price calculation in UniswapV3, see the [UniswapV3 Math Primer](https://blog.uniswap.org/uniswap-v3-math-primer). - -The snapshot's `token0Prices` and `token1Prices` are computed following a similar process to the UniswapV2 calculation, however, instead of the using the ratio of the the token reserves or a pricing function, the prices are derived from each pool's `sqrtPriceX96`. This calculation can be seen here: - -```python reference -https://github.com/powerloom/pooler/blob/bf68b35eba32255e25d7b6701b0e5609fef86655/snapshotter/utils/snapshot_utils.py#L40-L49 -``` - -The snapshot's `token0ReservesUSD` and `token1ReservesUSD` fields are calculated by applying the `token0Prices` and `token1Prices` to the `token0Reserves` and `token1Reserves` values respectively. This calculation can be seen in the [Core Utils](https://github.com/powerloom/snapshotter-computes/blob/9241e32155107949ccf4dbc4214ef29a91996b7f/utils/core.py#L173-L176) of the UniswapV3 compute module. - -### 2. Trade Volume Snapshot - -Trade volume of each pair per Epoch. The trade volume snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L40-L54 - -``` - -## Aggregate Snapshots - -The above base snapshots are then used to generate higher order aggregates. These aggregates are then used to generate the data points that are used in the Uniswap V2 and V3 Dashboards. Refer to [data-composition](/Protocol/data-composition) for more details on how data points are composed. - -The following aggregate snapshots are generated by Pooler using base snapshots. - -### 1. 24 Hour Trade Volume Snapshot - -24 hour trade volume of each pair per Epoch. The 24 hour trade volume snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L57-L64 -``` - -### 2. 7 days Trade Volume Snapshot - -7 days trade volume of each pair per Epoch. The 7 days trade volume snapshot is exactly like 24 hour trade volume snapshot but with a different time window. - -### 3. 24 hours Top Pairs Snapshot - -Top pairs by 24 hour trade volume per Epoch. The 24 hours top pairs snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L83-L93 -``` - -### 4. 7 days Top Pairs Snapshot - -Top pairs by 7 days trade volume per Epoch. The 7 days top pairs snapshot is very similar to 24 hour top pairs snapshot but with a different time window. - -### 5. 24 hours Top Tokens Snapshot - -Top tokens by 24 hour trade volume per Epoch. The 24 hours top tokens snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L67-L80 -``` - -### 6. 24 hours Stats Snapshot - -24 hour stats of each pair per Epoch. The 24 hours stats snapshot looks something like this: - -```python reference -https://github.com/powerloom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L108-L115 -``` - -## Implementation - -The implementation of these processes is detailed in the [Closer Look at Snapshots](/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/closer-look-at-snapshots.md) - - -The specific configurations for data points like pair reserves, token prices, trading volumes, and fees are outlined in `config/projects.json` and `config/aggregator.json`. These configurations dictate what data to capture and how to process it. We have covered that in the [Data sources section](/Protocol/data-sources). - diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/index.md deleted file mode 100644 index 0bca4864..00000000 --- a/docs/build-with-powerloom/use-cases/existing-implementations/uniswap-dashboard/index.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 0 ---- - -# Introduction - -## Pooler - UniswapV2 and UniswapV3 Data Markets - -Pooler is a Uniswap-specific implementation within the Powerloom ecosystem, designed as a snapshotter. It functions by synchronizing with other snapshotter peers over a smart contract on the Powerloom Protocol testnet. This architecture, guided by state transitions, is both easily comprehensible and modifiable. The Powerloom Protocol supports snapshotting for both the V2 and V3 smart contracts for Uniswap. - -:::tip -**Pooler in a Nutshell:** - -Forex, the foreign exchange market, involves currency trading and is known for its high liquidity and 24/7 operation. Pooler, in a parallel sense, operates continuously, capturing snapshots of Uniswap trades. Like Forex traders who analyze currency fluctuations to make profits, Pooler users can analyze trade volumes, liquidity reserves, and other metrics to understand market trends and potential profits in the Uniswap market. - -In essence, Pooler is to Uniswap and other DeFi product what Forex platforms are to currency trading – a tool for real-time tracking and analysis, facilitating better understanding and potentially profitable decision-making in the dynamic world of cryptocurrency trading. -::: - - -### How it works -Let's explore the details of the Pooler implementation. The image provided illustrates the operational flow of the UniswapV2 Dashboard hosted at [uniswapv2.powerloom.io](https://uniswapv2.powerloom.io). - -> Note: The below image depicts the workflow for the UniswapV2 specific implementation, however, the flow described in the rendering and the following outlined steps are the same for the UniswapV3 use case. The UniswapV3 Dashboard is hosted at: [uniswapv3.powerloom.io](https://uniswapv3.powerloom.io/). - -![Uniswap Dashboard Rendering](/images/dashboard-rendering.png) - - -#### Workflow: -1. The user accesses the Uniswap V2 dashboard through [uniswapv2.powerloom.io](https://uniswapv2.powerloom.io). -2. The dashboard makes calls to a foundation hosted node to get the latest aggregated data. -3. These calls are handled by the Snapshotter Core API interface, running on the foundation hosted node. -4. The foundation nodes then fetch the relevant data from blockchain/Redis cache to optimize the response times. -5. Once the data is retrieved, the frontend is rendered with the data. - - -### Data Points and Aggregated Metrics in Pooler - -Data points are key metrics sourced from Uniswap V2 or V3 pair contracts, detailing how snapshots are built and stored. Pooler generates base trade snapshots as well as higher order aggregates per Epoch, providing an overview of market trends, such as trade frequencies and average prices. These insights aid users in understanding market movements and asset performance, crucial for informed trading decisions while participating in the Uniswap protocol. - ---- - -### Development and Extension - -Snapshotter Node's design enables extensions and custom use case implementations. A developer can extend the pooler UniswapV2 compute files found in [snapshotter-computes (V2)](https://github.com/powerloom/snapshotter-computes/tree/eth_uniswapv2) and config files found in [snapshotter-configs (V2)](https://github.com/powerloom/snapshotter-configs/tree/eth_uniswapv2), or the UniswapV3 compute files found in [snapshotter-computes (V3)](https://github.com/powerloom/snapshotter-computes/tree/uniswapv3-v1) and the associated config files in [snapshotter-configs (V3)](https://github.com/powerloom/snapshotter-configs/tree/eth_uniswapv3) to build their own custom use case implementations. - -We have a dedicated section in the documentation which walkthrough the details on further implementation and usecases extensions. -Check out our guide on [Extending Uniswap V2 dashboard usecase.](/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) diff --git a/docs/dsv-mainnet/_category_.json b/docs/dsv-mainnet/_category_.json new file mode 100644 index 00000000..64c927b2 --- /dev/null +++ b/docs/dsv-mainnet/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "DSV Mainnet", + "position": 1.5, + "link": { + "type": "generated-index", + "description": "Architecture, consensus flow, on-chain verification, and operational characteristics of the live Powerloom decentralized sequencer-validator network." + } +} diff --git a/docs/dsv-mainnet/incentives-and-staking.md b/docs/dsv-mainnet/incentives-and-staking.md new file mode 100644 index 00000000..b24ff3ef --- /dev/null +++ b/docs/dsv-mainnet/incentives-and-staking.md @@ -0,0 +1,115 @@ +--- +sidebar_position: 5 +title: Incentives and Staking +--- + +# Incentives and Staking + +DSV is not only a transport and consensus upgrade. It is also the layer that makes Powerloom's data markets economically enforceable. + +The protocol uses incentives to answer four questions: + +1. who is allowed to produce data, +2. who is allowed to validate and finalize it, +3. what happens when participants behave honestly, and +4. how value flows back from data consumers to the network. + +## $POWER as the coordination asset + +$POWER is the asset that coordinates participation across the network. + +At a high level, it underpins: + +- **Slot access** for snapshotter participation, +- **Validator participation** in DSV, +- **Reward distribution** for useful network work, and +- **Penalty surfaces** for provable misbehavior or non-performance when those rules are enforced by the market. + +The important architectural point is that DSV consensus is not meant to run on goodwill alone. Operators are expected to have economic skin in the game. + +## Snapshotter economics + +Snapshotter economics are tied to slot-based participation: + +- Nodes are assigned or operate through slots, +- Slots determine when a node is expected to submit, +- Rewards are linked to useful participation, and +- Poor or malicious behavior can reduce expected earnings and, where enforced, expose stake to slashing or other penalties. + +This matters because DSV assumes high-throughput, repeated submissions. Without economic discipline at the snapshotter edge, the network would be easy to spam and hard to keep deterministic. + +## Validator economics + +Validators take on higher-value work than raw submission transport. They: + +- Verify incoming submissions, +- Build and compare batches, +- Participate in network consensus, and +- Anchor the winning result on-chain when selected by VPA. + +That makes validators the final economic checkpoint before a CID becomes publicly verifiable state. + +Validator-side rewards are therefore aligned to: + +- Staying online for epoch processing, +- Participating honestly in aggregation and attestation, +- Being ready to submit when their priority window opens, and +- Not causing consensus divergence or submission failures through negligence. + +## Slashing and accountability + +Powerloom's economic model is designed around the idea that incorrect data should be costly to push through the system. + +The exact market-level enforcement knobs can evolve, but the design intent is stable: + +- **Incorrect submissions** should be challengeable or outvoted, +- **Dishonest validation** should not be cost-free, +- **Stake** should be the mechanism that turns protocol rules into economic consequences. + +This is one of the reasons DSV is materially different from a centralized indexing backend. In a centralized system, correctness depends on operator reputation. In DSV, correctness is meant to depend on a mix of majority consensus and economically exposed participants. + +## Signallers and market demand + +Powerloom is not designed around one monolithic global dataset. It is a market system. + +That means economic demand also matters: + +- Signallers help express which data markets deserve network resources, +- Market demand influences where compute and validator attention should go, +- New data markets can justify new operator participation and, in time, new reward flows. + +This is how the protocol connects infrastructure to product demand instead of treating the network as a static research network. + +## Consumer payments + +For end users, the visible part of this economic loop is straightforward: consumers pay for access to useful, verifiable data products. + +In the current BDS rollout, that shows up as: + +- Hosted API access, +- Credit-based consumption for agent and application workloads, and +- Verification metadata that lets the consumer confirm the API response still maps back to DSV finalization. + +That payment surface is strategically important. A decentralized data protocol becomes durable when consumer spend can support the operators who keep the market running. + +## Why staking matters to the network + +Nodes by themselves are not a moat. Anyone can run infrastructure. The harder thing to copy is a network where useful work, economic commitment, and verifiable output are tied together. + +In DSV, stake gives weight to the jobs that matter: + +- snapshotters earn from producing useful market data, +- validators earn from keeping finalization live and honest, +- signallers can direct attention toward markets that deserve resources, +- consumers create demand by paying for verified data, +- and every finalized CID remains checkable on-chain. + +That is the loop that $POWER coordinates. The protocol is stronger when the operators who produce, move, validate, and prioritize data also have something at risk in the markets they serve. + + +## Related pages + +- [`Roles and Topology`](./roles-and-topology.md) +- [`Why DSV Exists`](./why-dsv-exists.md) +- [`What BDS Is`](/bds-data-market/what-bds-is) — the product surface where consumer payments originate +- [`Agents & BDS — Overview`](/category/agents--bds) — the distribution and access layer that turns DSV finalization into agent-ready consumption diff --git a/docs/dsv-mainnet/onchain-submission-and-verification.md b/docs/dsv-mainnet/onchain-submission-and-verification.md new file mode 100644 index 00000000..9c567a75 --- /dev/null +++ b/docs/dsv-mainnet/onchain-submission-and-verification.md @@ -0,0 +1,133 @@ +--- +sidebar_position: 4 +title: On-Chain Submission and Verification +--- + +# On-Chain Submission and Verification + +The point of DSV is not just to move data through a decentralized network. The point is to finish with a state transition that any consumer can verify independently. + +For BDS mainnet, that verification path is already concrete. + +## Contracts used by the live BDS mainnet market + +| Contract | Address | Role | +|----------|---------|------| +| `ProtocolState` | [`0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a`](https://explorer-v2.powerloom.network/address/0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a?tab=read_write_proxy) | Canonical protocol entrypoint for validator submissions and CID reads | +| `DataMarket` | [`0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a`](https://explorer-v2.powerloom.network/address/0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a?tab=read_write_proxy) | Market-scoped storage for finalized snapshot CIDs and epoch state | + +The public Powerloom RPC for this anchor chain is [`https://rpc-v2.powerloom.network`](https://rpc-v2.powerloom.network). + +## Which function submits consensus on-chain + +The validator-side submission entrypoint is: + +```solidity +function submitSubmissionBatch( + PowerloomDataMarket dataMarket, + string memory batchCid, + uint256 epochId, + string[] memory projectIds, + string[] memory snapshotCids, + bytes32 finalizedCidsRootHash +) external +``` + +This function lives on `ProtocolState`. It does two important things: + +1. verifies that the submitting validator is currently allowed to submit for that `dataMarket` and `epochId` through VPA, and +2. forwards the batch into the underlying `DataMarket`, which persists the finalized project-level CID state. + +In other words, `ProtocolState` is the public control surface, while `DataMarket` is where the market-specific finalized outputs are stored. + +## Which fields matter + +The submission bundle contains three pieces of information consumers should care about: + +| Field | Meaning | +|-------|---------| +| `batchCid` | IPFS CID of the uploaded batch payload | +| `projectIds[]` | Ordered list of projects included in the batch | +| `snapshotCids[]` | Finalized CID for each corresponding project in the same order | +| `finalizedCidsRootHash` | Merkle root over the finalized CIDs used for integrity and attestation checks | + +Once the call succeeds, the consumer-facing state becomes the per-project finalized CID stored for that epoch. + +## The verification read path + +The verification function a consumer cares about is: + +```solidity +function maxSnapshotsCid( + PowerloomDataMarket dataMarket, + string memory projectId, + uint256 epochId +) public view returns (string memory, SnapshotStatus) +``` + +Call it on `ProtocolState`, passing the target `DataMarket` as the first argument. + +For a finalized response, the function returns: + +- the canonical IPFS CID for that `(dataMarket, projectId, epochId)`, and +- the snapshot status enum for that record. + +## What a BDS client verifies + +BDS resolver/full node/API responses include a `verification` object with exactly the fields needed to reproduce this check: + +```json +{ + "cid": "bafkrei...", + "epochId": 24785718, + "projectId": "allTradesSnapshot:0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a:mainnet-BDS_MAINNET_UNISWAPV3-ETH", + "protocolState": "0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a", + "dataMarket": "0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a" +} +``` + +An independent verifier only has to: + +1. call `ProtocolState.maxSnapshotsCid(dataMarket, projectId, epochId)`, +2. compare the returned CID to `verification.cid`, and +3. optionally fetch the IPFS content behind that CID if they want to validate the payload itself. + +## Example with `cast` + +Any JSON-RPC client can do this with `eth_call`. Using `cast` is the most readable example: + +```bash +cast call \ + 0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a \ + "maxSnapshotsCid(address,string,uint256)(string,uint8)" \ + 0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a \ + "allTradesSnapshot:0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a:mainnet-BDS_MAINNET_UNISWAPV3-ETH" \ + 24785718 \ + --rpc-url https://rpc-v2.powerloom.network +``` + +If the returned CID matches the BDS response's `verification.cid`, the consumer has proven that the API served the same content reference the protocol finalized on-chain. + +## What not to use + +Do not use `lastFinalizedSnapshot` to verify content. That field gives you the latest finalized **epoch number** for a project, not the finalized **CID** for a specific epoch. + +For content provenance, the canonical check is always `maxSnapshotsCid(dataMarket, projectId, epochId)`. + +## Verification model in plain English + +Powerloom does not ask the consumer to trust a dashboard, a hosted API, or a Foundation-run indexer. + +The trust model is: + +- the network reaches consensus on a project CID, +- the validator with current priority anchors that result on-chain, +- the consumer replays a read against `ProtocolState`, +- the CID either matches or it does not. + +That is the core property that turns DSV output into verifiable data rather than API-delivered opinion. + +## Related pages + +- [`Protocol Workflow`](./protocol-workflow.md) +- [`Stability and Scale`](./stability-and-scale.md) diff --git a/docs/dsv-mainnet/protocol-workflow.md b/docs/dsv-mainnet/protocol-workflow.md new file mode 100644 index 00000000..54ea0fd8 --- /dev/null +++ b/docs/dsv-mainnet/protocol-workflow.md @@ -0,0 +1,137 @@ +--- +sidebar_position: 3 +title: Protocol Workflow +--- + +# Protocol Workflow + +This page traces one epoch from snapshot creation to a finalized on-chain CID. + +Protocol v2 already introduced off-chain sequencing, batching, IPFS upload, and on-chain anchoring. DSV extends that architecture by replacing the centralized sequencer with a decentralized sequencer-validator network. + +The important idea is that DSV reaches consensus in two stages: + +- **Level 1**: each validator builds its own local finalized batch from the submissions it collected; +- **Level 2**: validators compare those finalized batches and converge on a network-wide batch; +- **On-chain**: the validator with the right priority for that epoch anchors the agreed batch. + +## End-to-end sequence + +```mermaid +sequenceDiagram + autonumber + participant S as Snapshotter + participant LC as Local Collector + participant PG as P2P Gateway + participant DQ as Dequeuer + participant EM as Event Monitor + participant F1 as Finalizer Workers + participant A1 as Aggregator L1 + participant P2P as Validator Mesh + participant A2 as Aggregator L2 + participant VPA as VPA Client + participant PS as ProtocolState + participant DM as DataMarket + + EM->>PS: Watch EpochReleased(dataMarket, epochId) + PS-->>EM: Submission window opens for epoch + + S->>LC: Build snapshot payloads for projects in epoch + LC->>PG: Publish signed submissions on gossipsub + PG->>DQ: Push raw submissions into processing queue + DQ->>DQ: Validate signatures and deduplicate + DQ->>DQ: Store epoch-scoped submissions + + EM-->>F1: Submission window closes + F1->>F1: Count votes per project CID + F1-->>A1: Emit finalized batch parts + A1->>A1: Combine parts into local finalized batch + A1->>A1: Upload batch to IPFS + A1->>P2P: Broadcast local batch CID + + P2P-->>A2: Receive local and remote validator batches + A2->>A2: Wait aggregation window + A2->>A2: Compute Level 2 majority per project + A2->>A2: Upload aggregated batch to IPFS + + VPA->>PS: getPriorities(dataMarket, epochId) + PS-->>VPA: Priority assignment for validator + VPA->>PS: submitSubmissionBatch(dataMarket, batchCid, epochId, projectIds, snapshotCids, finalizedCidsRootHash) + PS->>DM: Forward batch submission into market state + DM-->>PS: Persist finalized per-project snapshot CIDs + PS-->>VPA: Emit SnapshotBatchSubmitted / SnapshotFinalized +``` + +## Step-by-step + +### 1. Epoch release + +The workflow starts when `ProtocolState` emits `EpochReleased` for a data market. Validator-side event monitoring uses that signal plus market configuration to determine when the submission window is open. + +For the BDS mainnet flow documented internally, the submission window is typically **45 seconds**, and the network aggregation window is **30 seconds** after local batches begin arriving. + +### 2. Snapshot propagation + +Snapshotters build project-specific snapshots for the active epoch. The local collector publishes those signed submissions into the libp2p mesh. + +This is where DSV diverges from the Protocol v2 deployment model: transport no longer depends on routing all submissions into one centralized sequencer service operated as a monolithic control point. + +### 3. Validation and deduplication + +On each validator, the P2P gateway receives the gossipsub message and pushes it into the submission queue. The dequeuer then: + +- verifies the EIP-712 signature, +- checks epoch and project metadata, +- removes duplicates by `(epoch, project, snapshotter)`, and +- stores the normalized submissions in epoch-scoped Redis keys. + +This stage matters because it prevents a malicious or buggy peer from amplifying its own vote just by replaying the same submission. + +### 4. Level 1 aggregation + +When the submission window closes, finalizer workers compute the majority CID per project from the submissions the validator saw. Those worker outputs are then combined into a single local finalized batch. + +That local batch: + +- contains one consensus CID per project for the epoch, +- is uploaded to IPFS, +- is written into the validator's local state, and +- is broadcast to the rest of the validator mesh. + +### 5. Level 2 aggregation + +The second aggregation stage is what turns "my validator's view" into network consensus. + +Each validator collects local and remote batch notifications during the aggregation window. When the timer expires, the validator computes the majority batch outcome per project across validator-produced batches. The result is a network-consensus batch with its own IPFS CID. + +This second stage is why DSV can tolerate disagreement or partial failure at the submission level. Snapshotter submissions are voted on first; validator batches are voted on second. + +### 6. Priority-based on-chain submission + +After the network-consensus batch is ready, the VPA client determines whether a validator is allowed to submit for that epoch. `ProtocolState` enforces this by checking validator priority before accepting `submitSubmissionBatch(...)`. + +That removes the race where multiple validators try to finalize the same epoch on-chain at once while still preserving decentralized participation. If a higher-priority validator misses its slot, lower-priority validators can submit according to the configured fallback windows. + +### 7. Finalized state + +On successful submission: + +- `ProtocolState` records the market-scoped submission, +- the underlying `DataMarket` stores the finalized CID for each `(projectId, epochId)`, +- events such as `SnapshotBatchSubmitted` and `SnapshotFinalized` are emitted, and +- consumers can later retrieve the canonical CID through `maxSnapshotsCid(...)`. + +That final read path is what powers independent verification for BDS and any other consumer-facing data product built on top of DSV. + +## Why this workflow scales better + +DSV improves on the Protocol v2 centralized sequencer model in three concrete ways: + +1. **It keeps intermediate transport off-chain.** Only the canonical outputs need to be anchored. +2. **It distributes sequencing responsibility.** Finalization no longer depends on one Foundation-operated sequencer boundary for every market. +3. **It preserves auditability.** Consumers can still reconstruct trust by checking the final CID, contract state, and IPFS payload. + +## Related pages + +- [`Roles and Topology`](./roles-and-topology.md) +- [`On-Chain Submission and Verification`](./onchain-submission-and-verification.md) diff --git a/docs/dsv-mainnet/roles-and-topology.md b/docs/dsv-mainnet/roles-and-topology.md new file mode 100644 index 00000000..682421c1 --- /dev/null +++ b/docs/dsv-mainnet/roles-and-topology.md @@ -0,0 +1,102 @@ +--- +sidebar_position: 2 +title: Roles and Topology +--- + +# Roles and Topology + +DSV mainnet is a multi-role network. The important thing to understand is that it replaces the centralized sequencer deployment model of Protocol v2 with a distributed sequencer-validator topology. Each role has a narrow job, and the pipeline works because those jobs compose cleanly. + +Implementation references: + +- DSV validator network: [`powerloom/snapshot-sequencer-validator`](https://github.com/powerloom/snapshot-sequencer-validator) +- Snapshotter lite node: [`powerloom/snapshotter-lite-v2`](https://github.com/powerloom/snapshotter-lite-v2) +- Snapshotter full node / resolver: [`powerloom/snapshotter-core-edge`](https://github.com/powerloom/snapshotter-core-edge) + +## Core roles + +| Role | What it does | Why it exists | +|------|---------------|---------------| +| Snapshotter lite node | Builds market-specific snapshots from source-chain state transitions | Keeps data collection distributed across many node operators | +| Local collector | Receives snapshots from compute modules and publishes them into the libp2p mesh | Decouples snapshot creation from network transport | +| DSV validator | Receives, validates, deduplicates, and aggregates submissions | Turns raw submissions into deterministic consensus outputs | +| IPFS | Stores batch payloads and finalized batch artifacts | Keeps large batch payloads off-chain while preserving content-addressed integrity | +| `ProtocolState` contract | Exposes protocol-wide read and write entrypoints | Provides the canonical contract interface for batch submission and CID lookup | +| `DataMarket` contract | Holds finalized snapshot state for a specific market | Namespaces epochs, finalized project CIDs, and validator-facing market parameters | +| VPA (Validator Priority Assignment) | Determines which validator can submit first for a given epoch | Prevents submission races while preserving decentralized participation | + +## Network topology at a glance + +The network has three planes operating together: + +1. **Data production plane**: snapshotters and local collectors produce market data. +2. **Consensus plane**: validators ingest the stream, compute majority outcomes, and converge on a batch. +3. **Settlement plane**: the winning validator submits the consensus batch on-chain, where consumers can verify it later. + +That separation is what lets Powerloom scale high-frequency data without storing raw intermediate traffic in protocol state. + +## P2P transport + +At the transport layer, DSV relies on libp2p discovery plus gossipsub propagation. + +Two topic families matter most for the live BDS mainnet market: + +- Snapshot submissions: `/powerloom/dsv-mainnet-bds/snapshot-submissions/all` +- Discovery / mesh-formation topic family under the same prefix + +The local collector also uses a rendezvous point so peers can recover connectivity without depending on a single static host list. In the published BDS mainnet setup, that rendezvous point is `powerloom-dsv-mainnet-bds`. + +## Validator-side components + +A validator is not one opaque binary. The DSV pipeline is composed of cooperating services: + +| Component | Responsibility | +|-----------|----------------| +| P2P gateway | Subscribes to gossipsub topics and writes raw submissions into the processing queue | +| Dequeuer | Validates EIP-712 signatures, deduplicates submissions, and stores epoch-scoped state | +| Event monitor | Tracks `EpochReleased` events and submission windows from contract state | +| Finalizer workers | Compute per-project majority CIDs and create batch parts | +| Aggregator Level 1 | Produces the validator's local finalized batch and publishes its IPFS CID | +| Aggregator Level 2 | Collects batches from multiple validators and computes network consensus | +| VPA client | Checks submission priority and performs on-chain batch submission when eligible | + +## Geographic distribution and mesh behavior + +The transport layer is designed for geographically distributed operators rather than a single region or a single data-center cluster. + +Operationally, the mesh is treated as healthy only when peers are present on both discovery and submissions topics. The published local-collector health model defines: + +- **healthy**: both topics have at least 2 peers, +- **degraded**: one or both topics have fewer than 2 peers, +- **pruned**: one or both topics have 0 peers. + +That is a useful design detail because it shows DSV is not merely "P2P" in name. The operator tooling is explicitly built around mesh-state visibility. + +## A concrete BDS mainnet topology snapshot + +The public BDS mainnet setup guide exposes a representative healthy mesh sample from a live collector session: + +- `peer_count=5` on the submissions topic, +- `total_connected=162`, +- `uptime_seconds=40110`. + +Those values are not a protocol guarantee, but they are exactly the kind of operational signal you want from a production network: peer depth, total connectivity, and long-lived session uptime are all measurable rather than implied. + +## Why the topology matters + +Powerloom's differentiator is not that it has a sequencer, a validator, or IPFS. Many systems have some version of those words. + +The differentiator is the topology: + +- data collection happens at the edge, +- transport happens over a mesh, +- consensus happens in two stages, +- state commitment is reduced to canonical outputs, and +- verification stays available to anyone with an RPC endpoint. + +That combination is what makes DSV a data protocol instead of a centralized API with blockchain branding. + +## Continue Reading + +- [`Protocol Workflow`](./protocol-workflow.md) +- [`On-Chain Submission and Verification`](./onchain-submission-and-verification.md) diff --git a/docs/dsv-mainnet/stability-and-scale.md b/docs/dsv-mainnet/stability-and-scale.md new file mode 100644 index 00000000..494425d0 --- /dev/null +++ b/docs/dsv-mainnet/stability-and-scale.md @@ -0,0 +1,214 @@ +--- +sidebar_position: 6 +title: Stability and Scale +--- + +# Stability and Scale + +This page presents operational signals from the live BDS mainnet market. Figures are derived from on-chain events on Powerloom L2 (chain 7869) unless noted otherwise. + +**Reproducibility:** Committed analysis artifacts and reproduction commands are in the [`dsv-validator-activity` reports tree](https://github.com/powerloom/dsv-validator-activity/tree/main/reports) (`days-1-30/`, `days-31-60/`, `days-61-90/`, `combined-days-1-90/summary.json`). Raw log exports are not committed; rerun the scripts with an archive RPC to verify. + +--- + +## Network at a Glance (90 protocol days) + +BDS mainnet has operated through **90 protocol days** of DSV validator activity (three consecutive 30-day windows). Combined on-chain epoch coverage: + +| Metric | Days 1–30 | Days 31–60 | Days 61–90 | Combined 1–90 | +|--------|----------:|----------:|----------:|----------------:| +| Epochs assigned | 217,295 | 215,226 | 215,991 | **648,512** | +| Epochs with submissions | 212,297 | 210,430 | 204,416 | **627,143** | +| Completion rate | 97.70% | 97.77% | 94.64% | **96.70%** | +| Missed epochs | 4,998 (2.30%) | 4,796 (2.23%) | 11,575 (5.36%) | 21,369 (3.30%) | +| Median latency | 89s | 97s | 97s | — | +| P95 latency | 138s | 155s | 160s | — | + +Across 90 days the network sustained **96.7%** submission coverage with **96.7%** of assigned epochs receiving a submission. End-to-end latency, which had drifted upward between the first two windows, **held flat** in days 61–90 (median 97s, P95 +5s). Throughout, the same structural pattern holds: once a validator submits, batch completion stays above 99%. + +Days 61–90 saw a **temporary coverage dip to 94.64%**, concentrated in the final week of the window. This was traced to an infrastructure issue on the bootstrap node — not the validator set — and resolved; see [Days 61–90](#days-6190) below. + +![DSV Network Health Timeline — Days 1–90](/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_1_90.png) + +*Figure 1: Daily batch submission completion rate across all 90 protocol days (648,512 epochs assigned). Batch-level completion (submit → on-chain complete) holds above 99% throughout.* + +![DSV Network Health Timeline — Days 31–60](/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_31_60.png) + +*Figure 2: Daily batch submission completion rate, protocol days 31–60 (215,226 epochs assigned). 28 of 30 days at full 7,200-epoch cadence; days 49–50 were shorter L2 windows.* + +--- + +## First 30 days (baseline window) + +Detailed figures for protocol days 1–30 (historical baseline for comparisons and charts): + +| Metric | Value | +|--------|------:| +| Total epochs assigned | 217,295 | +| Epochs with submissions | 212,297 | +| Completion rate | **97.70%** | +| Median end-to-end latency | **89 seconds** | +| P95 latency | 138 seconds | +| Full steady-state days (7,200 priorities/day) | 26 of 30 | + +The 2.3% coverage gap clustered around brief restart windows rather than uniform random loss. + +### Validator performance (days 1–30) + +Six validator nodes maintained 22+ consecutive active days: + +| Node | Active Days | Completion Rate | Total Submitted | +|------|-------------|-----------------|----------------:| +| Node 1 | 30/30 | 99.87% | 29,670 | +| Node 5 | 30/30 | 99.90% | 49,717 | +| Node 4 | 29/30 | 99.20% | 27,252 | +| Node 3 | 28/30 | 97.42% | 33,827 | +| Node 10 | 26/30 | 98.01% | 27,690 | +| Node 11 | 22/30 | 98.79% | 25,319 | + +Three additional transient nodes participated during operator testing and rotation. + +![Validator Network Constellation](/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_validator_constellation.png) + +*Figure 4: Validator constellation (days 1–30 window).* + +--- + +## Days 31–60 + +The second production month is shown in **Figure 2** above. Daily completion held in the same band as days 1–30; batch-level completion (submit → on-chain complete) averaged **99.10%** across the window. + +| Metric | Value | +|--------|------:| +| Epochs assigned | 215,226 | +| Epochs with submissions | 210,430 | +| Completion rate | **97.77%** | +| Median latency | **97 seconds** | +| P95 latency | 155 seconds | +| Days at 7,200 priorities/day | 28 of 30 | +| Batch submit → complete (log totals) | 208,550 / 210,437 (**99.10%**) | + +**Cadence exceptions:** days 49 (6,490) and 50 (7,136) priorities — shorter L2 day windows, same class of anomaly as day 1 / day 14 in the first window. + +### Validator performance (days 31–60) + +Fleet consolidated to five nodes at full-month uptime plus one transient: + +| Node | Active Days | Completion Rate | Total Submitted | +|------|-------------|-----------------|----------------:| +| Node 5 | 30/30 | 99.99% | 70,070 | +| Node 4 | 30/30 | 99.49% | 45,434 | +| Node 1 | 30/30 | 99.92% | 39,829 | +| Node 3 | 30/30 | 97.57% | 30,472 | +| Node 11 | 28/30 | 96.27% | 23,411 | +| Node 9 | 2/30 | 99.92% | 1,221 | + +Node 5 carried the largest submission share in this window (+41% vs its days 1–30 total). Nodes 2, 7, and 10 did not appear in the 31–60 summary (rotation / decommission). + +--- + +## Days 61–90 + +The third production month held the latency gains and ran epoch assignment at full cadence (29 of 30 days at 7,200 priorities/day), but **submission coverage dipped to 94.64%** — a 3.13-point drop from days 31–60. + +| Metric | Value | +|--------|------:| +| Epochs assigned | 215,991 | +| Epochs with submissions | 204,416 | +| Completion rate | **94.64%** | +| Median latency | **97 seconds** (flat vs days 31–60) | +| P95 latency | 160 seconds | +| Days at 7,200 priorities/day | 29 of 30 | +| Batch submit → complete (log totals) | 202,641 / 204,424 (**99.13%**) | + +![DSV Network Health Timeline — Days 61–90](/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_61_90.png) + +*Figure 3: Daily batch submission completion rate, protocol days 61–90. Batch-level completion stays above 99% even through the coverage dip — the gap was in how many assigned epochs received a submission, not in whether submitted batches finished.* + +### What happened, and the fix + +The dip was concentrated in the **final week** of the window (days ~83–90), where daily submissions fell from ~7,100 toward ~6,000 of the 7,200 assigned epochs per day. Crucially, **epoch assignment never dropped** and **batch completion stayed at 99.1%** — so this was not a protocol-layer or on-chain-submission failure. + +Root cause was an **infrastructure issue on the bootstrap node**, not the validator set: a resource (memory) leak combined with a libp2p host misconfiguration degraded **gossipsub mesh stability**. As the mesh destabilized, validators that were themselves online could not reliably propagate and receive finalization submissions for their assigned epochs, so coverage fell. The per-node activity swings observed in this window (for example, one node's active days dropping mid-window) were **symptoms of mesh instability rather than operators leaving**. + +The bootstrap-node memory leak and libp2p host configuration were **fixed on 2026-06-04**, and the mesh has been stable since. Because the remediation landed after day 90, this window captures the degradation in full; the recovery toward the established ~97.7% coverage baseline will be reflected in the subsequent (days 91+) reporting window. + +--- + +## Submission Latency + +Latency is measured from priority assignment (`PrioritiesAssigned`) to on-chain batch submission (`SnapshotBatchSubmitted`). + +![Batch Submission Latency](/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_latency_heatmap.png) + +*Figure 5: Latency distribution (days 1–30 chart). Median 89s → 97s in days 31–60, then flat at 97s in days 61–90; P95 138s → 155s → 160s.* + +Patterns remain consistent across hours of day in the first window; the second window shows a modest shift toward higher absolute latency without a coverage regression. + +--- + +## Epoch Coverage Pattern + +![Epoch Coverage Matrix](/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_epoch_coverage_matrix.png) + +*Figure 6: Coverage matrix (days 1–30). Gaps cluster at operational transitions, not random scatter.* + +--- + +## Snapshotter Participation + +Separate measurement of 1,811 epochs (April 17–24) — snapshotter / slot layer (not validator export): + +| Metric | Value | +|--------|-------| +| Unique eligible nodes per day | 2,970 – 3,047 | +| Median eligible nodes per epoch | 305 | +| Active validators per epoch | 3–5 (median 4) | + +![Snapshotter Slot Activity](/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_slot_distribution_radial.png) + +*Figure 7: Slot activity sample (3,078 slots).* + +--- + +## What These Figures Show + +### Continuous cadence under pressure + +BDS mainnet processes block-aligned epochs on Ethereum mainnet. **648k+ assigned epochs** over 90 protocol days with **96.7%** submission coverage shows sustained operation under continuous pressure — including through a recoverable infrastructure incident in the third month. + +### Measurable validator participation + +- **Five stable validators** at full-month uptime in days 31–60 +- **~3,000 eligible snapshotter nodes** per day (separate tally sample) +- **99%+ batch completion** once a validator commits to submit (held even through the days 61–90 coverage dip) + +### Observable mesh health + +P2P mesh stability is a first-order input to coverage, as the days 61–90 window demonstrated: when the gossipsub mesh degraded (a bootstrap-node resource leak plus a libp2p host misconfiguration, fixed 2026-06-04), online validators still missed assigned epochs because submissions could not propagate reliably. Local-collector health states (`healthy` / `degraded` / `pruned`) and peer counts are tracked as part of the operational story; see deployment docs for collector configuration. + +--- + +## Related Pages + +- [`On-Chain Submission and Verification`](./onchain-submission-and-verification.md) +- [`Why DSV Exists`](./why-dsv-exists.md) + +--- + +## Methodology and Reproducibility + +1. **On-chain export** — `export_validator_activity.py` with archive `POWERLOOM_RPC_URL` (Powerloom L2) +2. **Epoch participation** — `analyze_epoch_participation.py` → `participation_summary.json` +3. **Per-node reliability** — `analyze_validator_reliability.py` → `reliability_summary.json` +4. **Window comparison** — `compare_windows.py` between output directories +5. **Charts** — `generate_visualizations.py` → `reports/charts/` (e.g. `dsv_network_health_timeline_days_31_60.png`) + +**Committed artifacts:** [github.com/powerloom/dsv-validator-activity/reports](https://github.com/powerloom/dsv-validator-activity/tree/main/reports) — includes `days-61-90/network_health_daily.csv`, `combined-days-1-90/summary.json`, and chart PNGs under `reports/charts/`. + +**Contracts (BDS mainnet):** + +- ProtocolState: `0x1d0e010Ff11b781CA1dE34BD25a0037203e25E2a` +- DataMarket: `0x26c44e5CcEB7Fe69Cffc933838CF40286b2dc01a` + +Last updated: 2026-06-05 diff --git a/docs/dsv-mainnet/why-dsv-exists.md b/docs/dsv-mainnet/why-dsv-exists.md new file mode 100644 index 00000000..4cd1c31d --- /dev/null +++ b/docs/dsv-mainnet/why-dsv-exists.md @@ -0,0 +1,105 @@ +--- +sidebar_position: 1 +title: Why DSV Exists +--- + +# Why DSV Exists + +DSV is not the first scalability upgrade in Powerloom. It is the decentralization of the upgrade that came before it. + +**Implementation:** [`powerloom/snapshot-sequencer-validator`](https://github.com/powerloom/snapshot-sequencer-validator) + +The protocol evolved in three distinct steps: + +![Protocol evolution from v1 direct submissions to Protocol v2 centralized batching to DSV decentralized validator mesh](/images/bds-agentic-workflow/dsv-consensus-agg-evolution-web.png) + +1. **Protocol v1** relied on direct snapshot-submission transactions against protocol state. +2. **Protocol v2** replaced that with a centralized off-chain sequencer that batched submissions, uploaded batch payloads to IPFS, and anchored finalized results on-chain. +3. **DSV** replaces that centralized sequencer model with a decentralized sequencer-validator network. + +That distinction matters because the problem DSV solves is not the same problem Protocol v2 solved. + +## What Protocol v2 solved + +Protocol v2 was the major architectural break from the older testnet model. + +It replaced the expensive and operationally fragile pattern where every snapshot submission needed to become its own on-chain transaction. Instead, the protocol moved to: + +- an off-chain sequencer, +- batch construction and IPFS upload, +- on-chain anchoring of finalized batch outputs, +- and validator attestation over those batch submissions. + +That was a substantial performance upgrade. It is the reason the protocol could move away from the earlier per-submission on-chain path and support much higher throughput. + +The public `Protocol v2` overview already documents the pressures that made that upgrade necessary: + +- Powerloom was operating at **more than 1 million snapshot submission transactions per day**. +- At that scale, the older relayer-driven submission flow saw **more than 5% of transactions dropped** in stressed periods. + +## Why Protocol v2 was not the end state + +Protocol v2 solved throughput, but it still concentrated sequencing responsibility into a centralized, monolithic service. + +That created a different class of constraints: + +- the sequencer remained a single operational dependency, +- the Powerloom Foundation remained responsible for running and maintaining that system, +- and even one new data market could require non-trivial sequencing-side configuration and operational intervention. + +In other words, Protocol v2 improved performance, but it did not yet decentralize the responsibility for finalization. + +That is the gap DSV closes. + +## What changed with DSV + +DSV keeps the core direction introduced by Protocol v2, but replaces the centralized sequencer model with a validator mesh that separates **data propagation**, **batch consensus**, and **on-chain anchoring** across multiple network participants: + +- Snapshotters continue building market-specific snapshots. +- The local collector pushes those submissions into a libp2p mesh instead of routing them into one centralized sequencer service. +- Validator nodes collect, validate, deduplicate, and aggregate submissions off-chain. +- Consensus output is uploaded to IPFS and only the final canonical references are anchored on-chain. + +The architectural objective is different from the one Protocol v2 served: + +- **Protocol v2** made high-throughput finalization operationally feasible. +- **DSV** makes that finalization model decentralized, fault-tolerant, and less dependent on one Foundation-maintained service boundary. + +## Why this is a continuation of Protocol v2 + +DSV is not a separate protocol. It is the continuation of the same design direction introduced in [`Protocol v2`](/Protocol/Protocol_v2/overview.md): + +- batched submissions instead of per-snapshot chain writes, +- off-chain aggregation before on-chain anchoring, +- IPFS-backed batch payloads, and +- smart-contract state designed around finalized outputs rather than raw transport. + +The key difference is organizational and architectural at the same time: where Protocol v2 depended on a centralized sequencer run as a monolithic service, DSV distributes sequencing, aggregation, and submission responsibility across a validator network. + +## What DSV optimizes for + +DSV is opinionated about the problem it is solving. It is built to support: + +- **continuous epoch releases** for fast-moving markets, +- **majority-based agreement** over per-project snapshot CIDs, +- **verifiable finalization** through on-chain contract state, and +- **data reuse** so later compute modules can build on prior finalized outputs. + +## Where DSV sits relative to adjacent systems + +DSV is not trying to collapse every data category into one protocol. + +- **Compared with indexing networks**, DSV is oriented around finalized per-epoch outputs that can be verified back to contract state, rather than flexible historical query execution over an indexed schema. +- **Compared with oracle feeds**, DSV is designed for broader data-market outputs and reusable snapshot datasets, not only narrow reference-feed delivery. +- **Compared with centralized APIs**, DSV keeps the product surface simple to consume while preserving an independent provenance check through `ProtocolState.maxSnapshotsCid(...)`. + +This is the practical distinction that matters for Powerloom: DSV is a data-finalization system whose outputs can be consumed directly by products and agents without reducing trust to the operator serving the API. + +That is why the rest of this section goes deeper than a high-level overview. The architectural value only becomes clear when you can trace the full path from snapshot build to an independently verifiable finalized CID. + +## Continue Reading + +- [`Roles and Topology`](./roles-and-topology.md) +- [`Protocol Workflow`](./protocol-workflow.md) +- [`On-Chain Submission and Verification`](./onchain-submission-and-verification.md) +- [`Stability and Scale`](./stability-and-scale.md) diff --git a/docs/index.md b/docs/index.md index a983d875..25d54638 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,89 +1,132 @@ --- sidebar_position: 0 +title: Introduction +sidebar_label: Introduction --- -# Introduction -Powerloom Protocol is a decentralized data protocol primarily designed to meet the growing data requirements of smart contract-based applications, including DeFi, games, and other user-centric platforms. It incentivizes participating peers to achieve consensus on state transitions and event emission observations across multiple smart contracts. +# Introduction -By utilizing data compositions on smaller, consensus-reached data units, Powerloom stands as a peer-validated and accurate information source, empowering rich data applications such as dashboards, bots, aggregators, and insights trackers. +Powerloom Protocol is a decentralized data protocol for applications that need reliable blockchain data without operating their own indexing and verification stack. It coordinates snapshotter nodes, validators, data markets, and consumers around peer-validated observations of smart contract state transitions and events. + +By composing smaller consensus-reached data units into queryable datasets, Powerloom gives dashboards, bots, aggregators, agents, and analytics systems a verifiable source of blockchain data. ![Powerloom Workflow](/images/protocol_workflow.png) -:::tip -**Powerloom in a nutshell:** Powerloom is analogous to a decentralized library catalog for blockchain data. +:::info +**Current mainnet read path:** -The "snapshotters" are like librarians who continually observe shelves of books (smart contracts), cataloging additions or removals of books, changes in existing books, and notes added by readers in book margins (events). +1. **[DSV Mainnet](/category/dsv-mainnet)** — the decentralized sequencer-validator network that finalizes data, writes CIDs on-chain, and adds economic accountability to the finalization layer. +2. **[BDS Data Market](/category/bds-data-market)** — the first production data market on DSV, serving Uniswap V3 data from Ethereum mainnet through a snapshotter full-node resolver. +3. **[Agents & BDS](/category/agents--bds)** — agent access through metered routes, API keys, the OpenClaw/ClawHub skill, hosted MCP, and the headless `bds-agent` CLI (`pip install bds-agent` or `uv tool install bds-agent`). ::: -If you are a developer looking to build a data dashboard, DEX aggregator, or any web3 application that requires data, Powerloom offers out-of-the-box features to assist you in focusing on building robust applications while simultaneously addressing the data aspect. +:::tip +**Powerloom in a nutshell:** Powerloom turns raw blockchain activity into decentralized, consensus-backed data products. -Here are some key features of Powerloom: +Snapshotter nodes observe contracts and produce snapshots. Validators finalize canonical outputs. Consumers and agents use the resulting data through APIs, tooling, and market-specific products. +::: -**Decentralized Data:** Powerloom allows developers to build applications on top of decentralized, consensus-backed data, enhancing reliability and transparency. +## What Powerloom Provides -**Real-Time Data:** The snapshotter network provides real-time data updates as transactions occur on the blockchain, enabling applications that require live data. +**Decentralized data:** Applications can build on peer-validated, consensus-backed datasets rather than relying only on a single hosted indexer. -**Time-series Queries:** Datasets are available across precise time periods captured in epochs, which can be further filtered and composed to serve specific use cases. This is useful for analytics and tracking trends. +**Real-time data products:** Snapshotter networks can track contract state and event activity as markets evolve, enabling data feeds for dashboards, bots, alerts, and analytics. -**Flexible Data Models:** Developers can contribute to data markets by building their own use cases and contributing to the "data markets" to track what's most valuable for their specific use case, beyond basic transactions. +**Time-series queries:** Datasets are captured across epochs, making them useful for historical analysis, monitoring, and trend detection. -**Modular and Extensible:** Powerloom has a modular architecture that makes it easy for developers to add support for new data sources, transform data, and build on top of existing data pipelines. +**Flexible data markets:** Curators can define new data products around protocol-specific requirements, while the network allocates participants and incentives around those markets. -:::info -Stay updated with all the latest news from the Powerloom team and the community by joining our [Discord](https://discord.com/invite/powerloom). -::: +**Modular architecture:** Snapshotting, validation, finalization, data serving, metering, and consumption tooling are separate layers that can evolve independently. ## Roles in the Powerloom Ecosystem -The Powerloom ecosystem consists of six different roles that work together to provide trusted and consensus-backed data to applications. + +The Powerloom ecosystem has several roles that work together to produce, validate, serve, and consume decentralized data. ### Snapshotter -A Snapshotter is a node that captures crucial on-chain data transitions and event emissions. Snapshotter nodes are the backbone of the Powerloom ecosystem. They are responsible for capturing data from the blockchain and storing it in a decentralized manner. To become a snapshotter node, a node must stake a certain amount of Powerloom tokens. Snapshotter nodes are incentivized to capture data by receiving rewards in the form of Powerloom tokens for their work. + +Snapshotter nodes observe smart contracts and produce data snapshots for assigned data markets. They capture state transitions, event emissions, and derived outputs required by a market's compute logic. ### Validator -Validators are responsible for validating blocks and securing the Prost Chain. To become a validator node, a node must stake a certain amount of Powerloom tokens. Validators are incentivized to validate blocks by receiving rewards in the form of Powerloom tokens for their work. + +Validators participate in the finalization layer. In the current DSV path, validator nodes collect submissions, validate them, deduplicate payloads, aggregate consensus outputs, upload finalized artifacts to IPFS, and anchor canonical references on-chain. ### Curator -Curators are responsible for building new use cases, keeping current data market implementations up to date, and ensuring that data markets are healthy. Curators are incentivized to work through various grants, bounties, and initiatives run by the Powerloom Foundation initially and later by market participants. + +Curators define and maintain data markets. They are responsible for market-specific logic, supported datasets, and the usefulness of the resulting data product. ### Signaller -A Signaller is a node that signals the importance of different data markets, ensuring that snapshotter resources are allocated to the most important data markets. Signallers are incentivized to signal by receiving rewards in the form of Powerloom tokens for their work. + +Signallers help direct network attention toward valuable data markets. Their role is to influence where snapshotter resources and market participation should concentrate. ### Consumer -Consumers are the end-users of the data, using it to build applications like dashboards, bots, aggregators, and insights trackers. Consumers need to pay a fee in the form of Powerloom tokens to keep their data market active and to access the data. + +Consumers are the applications, dashboards, agents, analysts, and services that use Powerloom data. In the current BDS market, consumers can access Uniswap V3 data through metered HTTP routes and agent-oriented tooling. ### Watchmen -Watchmen are entities responsible for the accuracy of the data. They ensure that the data is accurate and that snapshotter nodes are not malicious. Watchmen can challenge the data, and if it's found to be inaccurate, the snapshotter node that provided the data will be penalized, and the watchman will be rewarded. However, since this is additional work for the network, it's important that watchmen only challenge the data when they are sure it's inaccurate. Watchmen need to stake a certain amount of Powerloom tokens to challenge the data, and if they are found to be wrong, their stake will be slashed. Watchmen are incentivized to challenge the data by receiving rewards in the form of Powerloom tokens for their work. ---- -## See Powerloom in Action :rocket: +Watchmen are accuracy-focused participants that can challenge incorrect data. Their role adds another accountability path for data correctness when disputes arise. -Discover the practical application of Powerloom through our various dashboard implementations. This latest release of Pooler is a powerhouse for Uniswap V2, Uniswap V3, and Aave V3 analytics, offering comprehensive data aggregations and flexibility to extend to more use cases. +## Current Production Path: BDS on DSV -[UniswapV2 Dashboard](https://uniswapv2.powerloom.io) -[UniswapV3 Dashboard](https://uniswapv3.powerloom.io) -[AaveV3 Dashboard](https://aave-v3.powerloom.io/) +The current production path starts with **BDS**, a live Uniswap V3 data market on Ethereum mainnet. Snapshotter nodes produce market snapshots, the decentralized sequencer-validator network finalizes canonical CIDs, and a snapshotter full-node resolver exposes the data through metered HTTP routes. ---- +Supported BDS responses include a `verification` object containing the finalized CID, epoch, project ID, protocol state contract, and data market contract. Agents and applications can verify provenance by checking: + +```solidity +ProtocolState.maxSnapshotsCid(dataMarket, projectId, epochId) +``` + +That means alerts, reports, and automated workflows can carry a proof path back to DSV-finalized state instead of trusting the API operator alone. + +## Start With the Current Mainnet Guides + +- **Consume verified data:** start with [Agents & BDS](/category/agents--bds). +- **Understand the live data market:** read [What Is BDS?](/bds-data-market/what-bds-is). +- **Review the endpoint surface:** see the [Endpoint Catalog](/bds-data-market/endpoint-catalog). +- **Verify provenance:** use [Verification in Agent Workflows](/agents-and-bds/verification-in-agents). +- **Understand DSV finalization:** begin with [Why DSV Exists](/dsv-mainnet/why-dsv-exists). +- **Review production signals:** read [Stability and Scale](/dsv-mainnet/stability-and-scale). + +## See Powerloom in Action + +The current mainnet access path begins with the [BDS Data Market](/category/bds-data-market), where DSV-finalized Uniswap V3 data is served through metered HTTP routes with verification metadata. -## Building with Powerloom +[Powerloom BDS Dashboard](https://bds.powerloom.io/) -To begin using the Powerloom Protocol, you need to understand the workflow and architecture of the system. This involves familiarizing yourself with the different components and how they interact within the protocol. -The best way to start is by exploring the [existing-implementations](/category/existing-implementations), understanding how they work, and how you can leverage them to [build your own use cases](/category/building-a-new-use-case). +## Building With Powerloom -### Utilizing Existing Implementations to Build Your Data Application +- **Run a BDS snapshotter slot:** follow [Snapshotter Lite V2 Setup](/build-with-powerloom/snapshotter-node/lite-node-v2/getting-started). +- **Operate resolver/full-node infrastructure:** review [Snapshotter Core Edge](/build-with-powerloom/snapshotter-node/full-node/getting-started). +- **Use OpenClaw and hosted MCP:** follow [OpenClaw & Hosted MCP](/agents-and-bds/openclaw-and-mcp). +- **Run a headless agent:** `pip install bds-agent` or `uv tool install bds-agent`, then follow [`Headless CLI for BDS`](/agents-and-bds/bds-agent-headless). -The data generated by the Powerloom Protocol is decentralized and accessible to everyone, and it is not always easy to understand how to use it. -To make it easier for developers, each snapshotter node comes with a set of APIs that can be used to access the data. These are easy to use and can be employed to build data applications such as dashboards, bots, aggregators, and insights trackers. +![BDS and protocol resolvers](/images/bds-agentic-workflow/bds-resolver-2d.png) + +## Implementation Repositories + +- Powerloom GitHub: [github.com/powerloom](https://github.com/powerloom) +- Snapshotter full-node resolver: [`powerloom/snapshotter-core-edge`](https://github.com/powerloom/snapshotter-core-edge) +- Snapshotter lite node: [`powerloom/snapshotter-lite-v2`](https://github.com/powerloom/snapshotter-lite-v2) +- DSV validator network: [`powerloom/snapshot-sequencer-validator`](https://github.com/powerloom/snapshot-sequencer-validator) +- OpenClaw skill: [`powerloom/powerloom-bds-univ3`](https://github.com/powerloom/powerloom-bds-univ3) +- Headless agent CLI: [`bds-agent` on PyPI](https://pypi.org/project/bds-agent/) · [`powerloom/bds-agent-py`](https://github.com/powerloom/bds-agent-py) ## Walkthrough -We've been working on the Powerloom Protocol for quite some time now, and the protocol has evolved significantly. We have a detailed walkthrough of our network, how it functions, and how one can leverage the power of data using Powerloom. You can watch these technical community calls: +Powerloom has evolved through multiple protocol versions and production paths. These technical community calls provide additional background on the network, how it functions, and how developers can build with Powerloom data. ### Technical Community Call #1 + ### Technical Community Call #2 + +## Community + +Stay updated with the Powerloom team and community on [Discord](https://discord.com/invite/powerloom), [X](https://x.com/powerloom), and [GitHub](https://github.com/powerloom). + ## Something Missing? -If you find issues with the documentation or have suggestions on how to improve the documentation or the project in general, please [file an issue for us](https://github.com/powerloom/docs) or email us at support@powerloom.io. + +If you find issues with the documentation or have suggestions on how to improve the documentation or the project, please [file an issue](https://github.com/powerloom/docs) or email support@powerloom.io. diff --git a/docs/participate/devnet.md b/docs/participate/devnet.md deleted file mode 100644 index be34641f..00000000 --- a/docs/participate/devnet.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -sidebar_position: 4 ---- -# Devnet - -## Devnet Program is live! - -Powerloom Devnet is a development environment that allows developers to build and test data rich applications. - -You can mint our Devnet slot from our [Mint page](https://devnet-mint.powerloom.dev/). Once minted, you can navigate to the [getting started](../build-with-powerloom/devnet/getting-started.md) section to kickstart your devnet journey. - - -## What Can You Build with Devnet? - -Here are a few exciting examples on what can be built using powerloom: - -1. **Data Dashboards**: Create interactive visualizations and dashboards that provide insights into blockchain metrics, user behavior, and more. Empower users with data-driven decision making. - -2. **Wallet Tracking Applications**: Build tools that allow users to easily track and manage their portfolios. Provide features like transaction alerts, balance updates. - -3. **Arbitrage Bots**: Develop intelligent bots that can identify and capitalize on arbitrage opportunities across different exchanges and trading pairs. - - -## Get Started with Devnet - -Ready to embark on your Devnet journey? Follow these simple steps: - -1. Visit our [Mint page](https://devnet-mint.powerloom.dev) to mint your Devnet slot. -2. Once minted, head over to the [Getting Started guide](../build-with-powerloom/devnet/getting-started.md) for a step-by-step walkthrough on setting up your development environment. -3. Join our [developer community](https://discord.com/invite/powerloom) to connect with fellow builders, ask questions, and share your projects. - -We can't wait to see the amazing applications you'll build with Powerloom Devnet. Happy coding! diff --git a/docs/participate/testnet-phase1.md b/docs/participate/testnet-phase1.md index fe8b24d0..173f2751 100644 --- a/docs/participate/testnet-phase1.md +++ b/docs/participate/testnet-phase1.md @@ -32,11 +32,9 @@ Additionally, Phase 1 included a consensus dashboard, enabling users to verify t The inaugural phase of our testnet concluded in October 2023. It was met with an overwhelming response from the community, attracting over 5000 applications. :::info -To learn more and gain further insights, you can check out our announcement on Twitter regarding Powerloom Phase 1. https://x.com/Powerloom/status/1693655148931993647 +To learn more and gain further insights, you can check out our announcement on X regarding Powerloom Phase 1. https://x.com/powerloom/status/1693655148931993647 ::: > The source code for this phase is publicly accessible on GitHub: [Powerloom Testnet Phase 1 Source Code](https://github.com/powerloom/pooler/blob/testnet_5_pairs/). -> In our comprehensive documentation, you will find a dedicated section that guides you through the process of extending the UniswapV2 dashboard. Explore this section to understand how you can build upon the UniswapV2 dashboard, adapting it to fit your specific requirements and ideas. For more information, please visit the [Extending UniswapV2 Dashboard section](../build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard.md) in our documentation. - This first phase not only demonstrated the capabilities of Powerloom but also set a strong foundation for future developments in our data-driven approach to Web3 solutions. \ No newline at end of file diff --git a/docs/participate/testnet-phase2.md b/docs/participate/testnet-phase2.md index e915ebfb..874cd046 100644 --- a/docs/participate/testnet-phase2.md +++ b/docs/participate/testnet-phase2.md @@ -34,6 +34,4 @@ Currently, Phase 2 is actively in progress and can be accessed at [Mercle](https ## Code and Documentation -For developers interested in the technical aspects, the source code for Phase 2 is available on GitHub. For detailed insights into the mechanisms behind onchain activity tracking, please refer to the repository [here](https://github.com/powerloom/pooler/tree/zkevm_quests). - -> Additionally, you can explore our documentation on [onchain Activity Tracking](../build-with-powerloom/use-cases/existing-implementations/activity-tracking/) for further information on the technical implementation. \ No newline at end of file +For developers interested in the technical aspects, the source code for Phase 2 is available on GitHub. For detailed insights into the mechanisms behind onchain activity tracking, please refer to the repository [here](https://github.com/powerloom/pooler/tree/zkevm_quests). \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 81904fc4..cff684c3 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -39,6 +39,10 @@ const config = { locales: ['en'], }, + markdown: { + mermaid: true, + }, + presets: [ [ 'classic', @@ -151,7 +155,7 @@ const config = { }, { label: 'X(Twitter)', - href: 'https://x.com/Powerloom', + href: 'https://x.com/powerloom', }, { label: 'Telegram', @@ -199,6 +203,7 @@ const config = { }, themes: [ + '@docusaurus/theme-mermaid', 'docusaurus-theme-search-typesense' ] }; diff --git a/package.json b/package.json index 4d4fef06..94bbb75b 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@docusaurus/core": "^3.8.1", "@docusaurus/faster": "^3.8.1", "@docusaurus/preset-classic": "^3.8.1", + "@docusaurus/theme-mermaid": "3.8.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "docusaurus-theme-search-typesense": "^0.25.0", diff --git a/src/components/LiveCreditPlans/index.js b/src/components/LiveCreditPlans/index.js new file mode 100644 index 00000000..83143ccf --- /dev/null +++ b/src/components/LiveCreditPlans/index.js @@ -0,0 +1,172 @@ +import React, {useEffect, useMemo, useState} from 'react'; +import styles from './styles.module.css'; + +const PLANS_URL = 'https://bds-metering.powerloom.io/credits/plans'; + +const CHAIN_NAMES = { + 1: 'Ethereum', + 137: 'Polygon', + 7869: 'Powerloom', + 42161: 'Arbitrum One', + 10: 'Optimism', + 42431: 'Moderato', +}; + +function chainName(chainId) { + return CHAIN_NAMES[chainId] ? `${CHAIN_NAMES[chainId]} (${chainId})` : `Chain ${chainId}`; +} + +function paymentKindLabel(paymentKind) { + if (paymentKind === 'native_value') { + return 'native value transfer'; + } + if (paymentKind === 'erc20') { + return 'ERC-20 transfer'; + } + return paymentKind || 'unknown'; +} + +export default function LiveCreditPlans() { + const [state, setState] = useState({ + loading: true, + error: null, + data: null, + fetchedAt: null, + }); + + useEffect(() => { + const controller = new AbortController(); + + async function loadPlans() { + try { + const response = await fetch(PLANS_URL, { + method: 'GET', + headers: { + Accept: 'application/json', + }, + signal: controller.signal, + }); + + if (!response.ok) { + throw new Error(`GET /credits/plans returned ${response.status}`); + } + + const data = await response.json(); + setState({ + loading: false, + error: null, + data, + fetchedAt: new Date().toISOString(), + }); + } catch (error) { + if (error.name === 'AbortError') { + return; + } + setState({ + loading: false, + error: error.message, + data: null, + fetchedAt: null, + }); + } + } + + loadPlans(); + + return () => controller.abort(); + }, []); + + const activePlans = useMemo(() => { + return (state.data?.plans || []) + .filter((plan) => plan.active !== false) + .sort((a, b) => { + const orderA = Number.isFinite(a.sort_order) ? a.sort_order : 0; + const orderB = Number.isFinite(b.sort_order) ? b.sort_order : 0; + if (orderA !== orderB) { + return orderA - orderB; + } + return String(a.label || a.id).localeCompare(String(b.label || b.id)); + }); + }, [state.data]); + + return ( +
+
+
+ Live payment plans +

+ Fetched from GET /credits/plans on the metering service. +

+
+ + Open JSON + +
+ +
+        {`curl -sS ${PLANS_URL}`}
+      
+ + {state.loading &&

Loading latest plans...

} + + {state.error && ( +
+ Could not load the live plan list: {state.error} +
+ Use the curl command above to query the endpoint directly. +
+ )} + + {!state.loading && !state.error && ( + <> +
+ {activePlans.length} active plan(s) + {state.fetchedAt && ( + Fetched {new Date(state.fetchedAt).toLocaleString()} + )} + {state.data?.epoch_unit?.note && {state.data.epoch_unit.note}} +
+ +
+ {activePlans.map((plan) => ( +
+
{plan.label || plan.id}
+
+ {plan.credits} credits + {chainName(plan.chain_id)} +
+
+
+
Token
+
{plan.token_symbol || 'unknown'}
+
+
+
Amount
+
{plan.token_amount}
+
+
+
Payment
+
{paymentKindLabel(plan.payment_kind)}
+
+ {plan.offer && ( +
+
Offer
+
{plan.offer}
+
+ )} +
+ {plan.description &&

{plan.description}

} +
+ ))} +
+ + {state.data?.primary_recipient && ( +
+ Primary recipient: {state.data.primary_recipient} +
+ )} + + )} +
+ ); +} diff --git a/src/components/LiveCreditPlans/styles.module.css b/src/components/LiveCreditPlans/styles.module.css new file mode 100644 index 00000000..6acb3320 --- /dev/null +++ b/src/components/LiveCreditPlans/styles.module.css @@ -0,0 +1,118 @@ +.wrapper { + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 12px; + padding: 1rem; + margin: 1rem 0 1.5rem; + background: var(--ifm-background-surface-color); +} + +.header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 1rem; + margin-bottom: 0.75rem; +} + +.header p { + margin: 0.25rem 0 0; + color: var(--ifm-color-emphasis-700); +} + +.curlBlock { + margin: 0 0 1rem; + white-space: pre-wrap; +} + +.status, +.error { + margin: 0; +} + +.error { + border-left: 3px solid var(--ifm-color-danger); + padding-left: 0.75rem; + color: var(--ifm-color-danger-dark); +} + +.meta { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-bottom: 1rem; + color: var(--ifm-color-emphasis-700); + font-size: 0.9rem; +} + +.meta span { + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 999px; + padding: 0.2rem 0.55rem; +} + +.planGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + gap: 0.85rem; +} + +.planCard { + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 10px; + padding: 0.85rem; + background: var(--ifm-background-color); +} + +.planTitle { + font-weight: 700; + margin-bottom: 0.5rem; +} + +.planMeta { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; + margin-bottom: 0.75rem; +} + +.planMeta span { + border-radius: 999px; + background: var(--ifm-color-emphasis-200); + padding: 0.15rem 0.5rem; + font-size: 0.85rem; +} + +.planDetails { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.6rem; + margin: 0 0 0.75rem; +} + +.planDetails div { + min-width: 0; +} + +.planDetails dt { + color: var(--ifm-color-emphasis-700); + font-size: 0.78rem; + margin-bottom: 0.15rem; +} + +.planDetails dd { + margin: 0; + overflow-wrap: anywhere; +} + +.description { + color: var(--ifm-color-emphasis-700); + font-size: 0.9rem; + margin: 0; +} + +.recipient { + margin-top: 1rem; + overflow-wrap: anywhere; + color: var(--ifm-color-emphasis-700); + font-size: 0.9rem; +} diff --git a/src/components/LiveMeteredRoutesTable/index.js b/src/components/LiveMeteredRoutesTable/index.js new file mode 100644 index 00000000..b186559f --- /dev/null +++ b/src/components/LiveMeteredRoutesTable/index.js @@ -0,0 +1,163 @@ +import React, {useEffect, useMemo, useState} from 'react'; +import styles from './styles.module.css'; + +const DEFAULT_CATALOG_URL = + 'https://raw.githubusercontent.com/powerloom/snapshotter-computes/bds_eth_uniswapv3_core/api/endpoints.json'; + +function epochDenominator(creditPerEpoch) { + if (!Number.isFinite(creditPerEpoch) || creditPerEpoch <= 0) return null; + const den = Math.round(1 / creditPerEpoch); + return Math.abs(den * creditPerEpoch - 1) < 1e-9 ? den : null; +} + +function creditsLabel(weight, billing) { + const w = Number.isFinite(weight) && weight > 0 ? weight : 1; + const perEpoch = billing?.credit_per_epoch; + if (!Number.isFinite(perEpoch) || perEpoch <= 0) { + return `×${w}`; + } + const den = epochDenominator(perEpoch); + if (den != null) { + return w === 1 ? `1/${den} credit` : `${w}/${den} credits`; + } + const product = w * perEpoch; + return `${product} credit${product === 1 ? '' : 's'}`; +} + +function billingColumn(ep, billing) { + const mod = ep.billing_modifier; + if (ep.sse === true || mod?.type === 'stream_session') { + const session = + Number.isFinite(mod?.credits_per_connection) && mod.credits_per_connection > 0 + ? mod.credits_per_connection + : billing?.credit_per_stream_session; + if (Number.isFinite(session) && session > 0) { + return `${session} credits / session`; + } + return 'flat rate / session'; + } + if (mod?.type === 'lookback_multiplier') { + const base = Number.isFinite(ep.credit_weight) ? ep.credit_weight : 5; + return `${creditsLabel(base, billing)} × lookback (see below)`; + } + return creditsLabel(ep.credit_weight, billing); +} + +function weightColumn(ep) { + const mod = ep.billing_modifier; + if (ep.sse === true || mod?.type === 'stream_session') { + return '—'; + } + if (mod?.type === 'lookback_multiplier') { + const base = Number.isFinite(ep.credit_weight) ? ep.credit_weight : 5; + return `${base} × lookback`; + } + const w = Number.isFinite(ep.credit_weight) ? ep.credit_weight : 1; + return String(w); +} + +function meteredEndpoints(catalog) { + const eps = Array.isArray(catalog?.endpoints) ? catalog.endpoints : []; + return eps + .filter((e) => e && e.metered !== false && typeof e.path === 'string') + .sort((a, b) => a.path.localeCompare(b.path)); +} + +export default function LiveMeteredRoutesTable({catalogUrl = DEFAULT_CATALOG_URL}) { + const [state, setState] = useState({loading: true, error: null, data: null}); + + useEffect(() => { + const controller = new AbortController(); + async function load() { + try { + const response = await fetch(catalogUrl, { + headers: {Accept: 'application/json'}, + signal: controller.signal, + }); + if (!response.ok) { + throw new Error(`GET catalog returned ${response.status}`); + } + const data = await response.json(); + setState({loading: false, error: null, data}); + } catch (error) { + if (error.name === 'AbortError') return; + setState({loading: false, error: error.message, data: null}); + } + } + load(); + return () => controller.abort(); + }, [catalogUrl]); + + const rows = useMemo(() => meteredEndpoints(state.data), [state.data]); + const billing = state.data?.billing; + const market = state.data?.market; + const version = state.data?.version; + + return ( +
+
+
+ Metered routes (live) +

+ Fetched from api/endpoints.json — same catalog the resolver and{' '} + bds-agent use for route matching and credit weights. +

+
+ + Open catalog JSON + +
+ + {state.loading &&

Loading catalog…

} + + {state.error && ( +
+ Could not load the live catalog: {state.error} +
+ Open the catalog JSON above for the full route list. +
+ )} + + {!state.loading && !state.error && rows.length === 0 && ( +
No metered endpoints found in the catalog.
+ )} + + {!state.loading && !state.error && rows.length > 0 && ( + <> +
+ {market && {market}} + {Number.isFinite(version) && catalog v{version}} + {rows.length} metered route(s) + {billing?.credit_per_epoch != null && ( + base GET ≈ 1/7200 credit + )} +
+
+ + + + + + + + + + {rows.map((ep) => ( + + + + + + ))} + +
Metered route + credit_weight + Typical credits
+ {ep.path} + {weightColumn(ep)}{billingColumn(ep, billing)}
+
+ + )} +
+ ); +} diff --git a/src/components/LiveMeteredRoutesTable/styles.module.css b/src/components/LiveMeteredRoutesTable/styles.module.css new file mode 100644 index 00000000..6d2e7d6d --- /dev/null +++ b/src/components/LiveMeteredRoutesTable/styles.module.css @@ -0,0 +1,60 @@ +.wrapper { + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 12px; + padding: 1rem; + margin: 1rem 0 1.5rem; + background: var(--ifm-background-surface-color); +} + +.header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 1rem; + margin-bottom: 0.75rem; +} + +.header p { + margin: 0.25rem 0 0; + color: var(--ifm-color-emphasis-700); +} + +.status, +.error { + margin: 0; +} + +.error { + border-left: 3px solid var(--ifm-color-danger); + padding-left: 0.75rem; + color: var(--ifm-color-danger-dark); +} + +.meta { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-bottom: 1rem; + color: var(--ifm-color-emphasis-700); + font-size: 0.9rem; +} + +.meta span { + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 999px; + padding: 0.2rem 0.55rem; +} + +.tableWrap { + overflow-x: auto; +} + +.tableWrap table { + width: 100%; + margin: 0; +} + +.pathCell { + font-size: 0.85rem; + word-break: break-word; +} diff --git a/src/components/LiveTimeseriesMultiplier/index.js b/src/components/LiveTimeseriesMultiplier/index.js new file mode 100644 index 00000000..a17f57db --- /dev/null +++ b/src/components/LiveTimeseriesMultiplier/index.js @@ -0,0 +1,144 @@ +import React, {useEffect, useMemo, useState} from 'react'; +import styles from './styles.module.css'; + +// Same default catalog the resolver uses (snapshotter-core-edge endpoint_catalog.py). +const DEFAULT_CATALOG_URL = + 'https://raw.githubusercontent.com/powerloom/snapshotter-computes/bds_eth_uniswapv3_core/api/endpoints.json'; + +function windowLabel(maxSeconds) { + if (maxSeconds % 86400 === 0) { + const d = maxSeconds / 86400; + return `≤ ${d} day${d > 1 ? 's' : ''} (${maxSeconds}s)`; + } + if (maxSeconds % 3600 === 0) { + const h = maxSeconds / 3600; + return `≤ ${h} hour${h > 1 ? 's' : ''} (${maxSeconds}s)`; + } + if (maxSeconds % 60 === 0) { + return `≤ ${maxSeconds / 60} min (${maxSeconds}s)`; + } + return `≤ ${maxSeconds}s`; +} + +function findLookbackEndpoint(catalog) { + const eps = Array.isArray(catalog?.endpoints) ? catalog.endpoints : []; + return eps.find( + (e) => e && e.billing_modifier && e.billing_modifier.type === 'lookback_multiplier', + ); +} + +export default function LiveTimeseriesMultiplier({catalogUrl = DEFAULT_CATALOG_URL}) { + const [state, setState] = useState({loading: true, error: null, data: null}); + + useEffect(() => { + const controller = new AbortController(); + async function load() { + try { + const response = await fetch(catalogUrl, { + headers: {Accept: 'application/json'}, + signal: controller.signal, + }); + if (!response.ok) { + throw new Error(`GET catalog returned ${response.status}`); + } + const data = await response.json(); + setState({loading: false, error: null, data}); + } catch (error) { + if (error.name === 'AbortError') return; + setState({loading: false, error: error.message, data: null}); + } + } + load(); + return () => controller.abort(); + }, [catalogUrl]); + + const model = useMemo(() => { + const ep = findLookbackEndpoint(state.data); + if (!ep) return null; + const base = Number.isFinite(ep.credit_weight) ? ep.credit_weight : 1; + const mod = ep.billing_modifier; + const tiers = Array.isArray(mod.tiers) + ? [...mod.tiers].sort((a, b) => a.max_seconds - b.max_seconds) + : []; + return { + path: ep.path, + param: mod.param, + base, + tiers, + overflow: Number.isFinite(mod.overflow_multiplier) ? mod.overflow_multiplier : 1, + version: state.data?.version, + }; + }, [state.data]); + + return ( +
+
+
+ Time series lookback multiplier (live) +

+ Fetched from the resolver endpoint catalog (billing_modifier on the + time series route). Effective debit ={' '} + CREDIT_PER_EPOCH × base_weight × multiplier. +

+
+ + Open catalog JSON + +
+ + {state.loading &&

Loading latest multipliers…

} + + {state.error && ( +
+ Could not load the live catalog: {state.error} +
+ Open the catalog JSON above to read billing_modifier.tiers directly. +
+ )} + + {!state.loading && !state.error && !model && ( +
+ No lookback_multiplier billing modifier found in the catalog. +
+ )} + + {!state.loading && !state.error && model && ( + <> +
+ + {model.path} + + base weight ×{model.base} + keyed off {model.param} + {Number.isFinite(model.version) && catalog v{model.version}} +
+ + + + + + + + + + {model.tiers.map((t) => ( + + + + + + ))} + {model.tiers.length > 0 && ( + + + + + + )} + +
Lookback window ({model.param})MultiplierEffective cost (base ×{model.base})
{windowLabel(t.max_seconds)}{t.multiplier}×{t.multiplier * model.base}
> {windowLabel(model.tiers[model.tiers.length - 1].max_seconds).replace('≤ ', '')}{model.overflow}×{model.overflow * model.base}
+ + )} +
+ ); +} diff --git a/src/components/LiveTimeseriesMultiplier/styles.module.css b/src/components/LiveTimeseriesMultiplier/styles.module.css new file mode 100644 index 00000000..50c3a0a8 --- /dev/null +++ b/src/components/LiveTimeseriesMultiplier/styles.module.css @@ -0,0 +1,46 @@ +.wrapper { + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 12px; + padding: 1rem; + margin: 1rem 0 1.5rem; + background: var(--ifm-background-surface-color); +} + +.header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 1rem; + margin-bottom: 0.75rem; +} + +.header p { + margin: 0.25rem 0 0; + color: var(--ifm-color-emphasis-700); +} + +.status, +.error { + margin: 0; +} + +.error { + border-left: 3px solid var(--ifm-color-danger); + padding-left: 0.75rem; + color: var(--ifm-color-danger-dark); +} + +.meta { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-bottom: 1rem; + color: var(--ifm-color-emphasis-700); + font-size: 0.9rem; +} + +.meta span { + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 999px; + padding: 0.2rem 0.55rem; +} diff --git a/static/images/bds-agentic-workflow/aeon-first-run-healthy.png b/static/images/bds-agentic-workflow/aeon-first-run-healthy.png new file mode 100644 index 00000000..a81aacce Binary files /dev/null and b/static/images/bds-agentic-workflow/aeon-first-run-healthy.png differ diff --git a/static/images/bds-agentic-workflow/aeon-first-run-telegram-alerts.png b/static/images/bds-agentic-workflow/aeon-first-run-telegram-alerts.png new file mode 100644 index 00000000..79e502df Binary files /dev/null and b/static/images/bds-agentic-workflow/aeon-first-run-telegram-alerts.png differ diff --git a/static/images/bds-agentic-workflow/aeon-fork-enable-actions.png b/static/images/bds-agentic-workflow/aeon-fork-enable-actions.png new file mode 100644 index 00000000..779035ae Binary files /dev/null and b/static/images/bds-agentic-workflow/aeon-fork-enable-actions.png differ diff --git a/static/images/bds-agentic-workflow/aeon-fork-github-secrets.png b/static/images/bds-agentic-workflow/aeon-fork-github-secrets.png new file mode 100644 index 00000000..432e2022 Binary files /dev/null and b/static/images/bds-agentic-workflow/aeon-fork-github-secrets.png differ diff --git a/static/images/bds-agentic-workflow/aeon-yml-skill-enabled.png b/static/images/bds-agentic-workflow/aeon-yml-skill-enabled.png new file mode 100644 index 00000000..8e0a10a4 Binary files /dev/null and b/static/images/bds-agentic-workflow/aeon-yml-skill-enabled.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/1-bds-agent-signup.png b/static/images/bds-agentic-workflow/bds-agent-cli/1-bds-agent-signup.png new file mode 100644 index 00000000..094dcbf1 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/1-bds-agent-signup.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/2-browser-verify-turnstile.png b/static/images/bds-agentic-workflow/bds-agent-cli/2-browser-verify-turnstile.png new file mode 100644 index 00000000..7eb7d0bf Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/2-browser-verify-turnstile.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/3-browser-verification-complete.png b/static/images/bds-agentic-workflow/bds-agent-cli/3-browser-verification-complete.png new file mode 100644 index 00000000..368c5b49 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/3-browser-verification-complete.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/4-agent-cli-signup-complete.png b/static/images/bds-agentic-workflow/bds-agent-cli/4-agent-cli-signup-complete.png new file mode 100644 index 00000000..67cb1889 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/4-agent-cli-signup-complete.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-balance.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-balance.png new file mode 100644 index 00000000..d0bc3dce Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-balance.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-config-init.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-config-init.png new file mode 100644 index 00000000..2b633d6c Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-config-init.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-config-show.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-config-show.png new file mode 100644 index 00000000..919efb5b Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-config-show.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-llm-setup.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-llm-setup.png new file mode 100644 index 00000000..db8c3e8d Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-llm-setup.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-llm-use-ping.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-llm-use-ping.png new file mode 100644 index 00000000..2f38f791 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-llm-use-ping.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-plans.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-plans.png new file mode 100644 index 00000000..f4c609e0 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-plans.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-query-execute.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-query-execute.png new file mode 100644 index 00000000..07ad1272 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-query-execute.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-run-pre-packaged.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-run-pre-packaged.png new file mode 100644 index 00000000..5135dc5f Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-run-pre-packaged.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-run.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-run.png new file mode 100644 index 00000000..02274660 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-run.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-setup-evm.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-setup-evm.png new file mode 100644 index 00000000..700da772 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-setup-evm.png differ diff --git a/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-signup-pay.png b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-signup-pay.png new file mode 100644 index 00000000..912b1e52 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agent-cli/automated/bds-agent-signup-pay.png differ diff --git a/static/images/bds-agentic-workflow/bds-agentic-consumption.jpg b/static/images/bds-agentic-workflow/bds-agentic-consumption.jpg new file mode 100644 index 00000000..4a2bfb3d Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-agentic-consumption.jpg differ diff --git a/static/images/bds-agentic-workflow/bds-and-agents-hero.jpg b/static/images/bds-agentic-workflow/bds-and-agents-hero.jpg new file mode 100644 index 00000000..e8351364 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-and-agents-hero.jpg differ diff --git a/static/images/bds-agentic-workflow/bds-resolver-2d.png b/static/images/bds-agentic-workflow/bds-resolver-2d.png new file mode 100644 index 00000000..2be4b3e2 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-resolver-2d.png differ diff --git a/static/images/bds-agentic-workflow/bds-resolver-use-cases-web.jpg b/static/images/bds-agentic-workflow/bds-resolver-use-cases-web.jpg new file mode 100644 index 00000000..15ec0cb7 Binary files /dev/null and b/static/images/bds-agentic-workflow/bds-resolver-use-cases-web.jpg differ diff --git a/static/images/bds-agentic-workflow/browser-signup-api-key-ready.png b/static/images/bds-agentic-workflow/browser-signup-api-key-ready.png new file mode 100644 index 00000000..ddeb034c Binary files /dev/null and b/static/images/bds-agentic-workflow/browser-signup-api-key-ready.png differ diff --git a/static/images/bds-agentic-workflow/browser-signup-turnstile-verify.png b/static/images/bds-agentic-workflow/browser-signup-turnstile-verify.png new file mode 100644 index 00000000..afbace68 Binary files /dev/null and b/static/images/bds-agentic-workflow/browser-signup-turnstile-verify.png differ diff --git a/static/images/bds-agentic-workflow/browser-signup-verify-pending.png b/static/images/bds-agentic-workflow/browser-signup-verify-pending.png new file mode 100644 index 00000000..7f61e1ec Binary files /dev/null and b/static/images/bds-agentic-workflow/browser-signup-verify-pending.png differ diff --git a/static/images/bds-agentic-workflow/clawhub-powerloom-bds-univ3-skill.png b/static/images/bds-agentic-workflow/clawhub-powerloom-bds-univ3-skill.png new file mode 100644 index 00000000..7b349eb3 Binary files /dev/null and b/static/images/bds-agentic-workflow/clawhub-powerloom-bds-univ3-skill.png differ diff --git a/static/images/bds-agentic-workflow/clawhub-skill-prompt.png b/static/images/bds-agentic-workflow/clawhub-skill-prompt.png new file mode 100644 index 00000000..b61809c8 Binary files /dev/null and b/static/images/bds-agentic-workflow/clawhub-skill-prompt.png differ diff --git a/static/images/bds-agentic-workflow/dsv-consensus-agg-evolution-web.png b/static/images/bds-agentic-workflow/dsv-consensus-agg-evolution-web.png new file mode 100644 index 00000000..be824c89 Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-consensus-agg-evolution-web.png differ diff --git a/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_epoch_coverage_matrix.png b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_epoch_coverage_matrix.png new file mode 100644 index 00000000..1c591b94 Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_epoch_coverage_matrix.png differ diff --git a/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_latency_heatmap.png b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_latency_heatmap.png new file mode 100644 index 00000000..3fae420f Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_latency_heatmap.png differ diff --git a/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline.png b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline.png new file mode 100644 index 00000000..65e26144 Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline.png differ diff --git a/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_1_90.png b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_1_90.png new file mode 100644 index 00000000..b9760cc6 Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_1_90.png differ diff --git a/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_31_60.png b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_31_60.png new file mode 100644 index 00000000..222af224 Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_31_60.png differ diff --git a/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_61_90.png b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_61_90.png new file mode 100644 index 00000000..1ab68c30 Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_network_health_timeline_days_61_90.png differ diff --git a/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_slot_distribution_radial.png b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_slot_distribution_radial.png new file mode 100644 index 00000000..e911557e Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_slot_distribution_radial.png differ diff --git a/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_validator_constellation.png b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_validator_constellation.png new file mode 100644 index 00000000..b9d61dd8 Binary files /dev/null and b/static/images/bds-agentic-workflow/dsv-mainnet-operations/dsv_validator_constellation.png differ diff --git a/static/images/bds-agentic-workflow/metering-dashboard-usage.png b/static/images/bds-agentic-workflow/metering-dashboard-usage.png new file mode 100644 index 00000000..f4f3d685 Binary files /dev/null and b/static/images/bds-agentic-workflow/metering-dashboard-usage.png differ diff --git a/static/images/bds-agentic-workflow/metering-signup-page.png b/static/images/bds-agentic-workflow/metering-signup-page.png new file mode 100644 index 00000000..25d672b2 Binary files /dev/null and b/static/images/bds-agentic-workflow/metering-signup-page.png differ diff --git a/static/images/bds-agentic-workflow/openclaw-automated-install-existing-api-key.png b/static/images/bds-agentic-workflow/openclaw-automated-install-existing-api-key.png new file mode 100644 index 00000000..992fe13a Binary files /dev/null and b/static/images/bds-agentic-workflow/openclaw-automated-install-existing-api-key.png differ diff --git a/static/images/bds-agentic-workflow/openclaw-automated-install.png b/static/images/bds-agentic-workflow/openclaw-automated-install.png new file mode 100644 index 00000000..0291e30c Binary files /dev/null and b/static/images/bds-agentic-workflow/openclaw-automated-install.png differ diff --git a/static/images/bds-agentic-workflow/openclaw-cronjob-setup-complete.png b/static/images/bds-agentic-workflow/openclaw-cronjob-setup-complete.png new file mode 100644 index 00000000..3ad06248 Binary files /dev/null and b/static/images/bds-agentic-workflow/openclaw-cronjob-setup-complete.png differ diff --git a/static/images/bds-agentic-workflow/openclaw-cronjob-setup-input-tg.png b/static/images/bds-agentic-workflow/openclaw-cronjob-setup-input-tg.png new file mode 100644 index 00000000..df748f9b Binary files /dev/null and b/static/images/bds-agentic-workflow/openclaw-cronjob-setup-input-tg.png differ diff --git a/static/images/bds-agentic-workflow/openclaw-cronjob-whale-alert.png b/static/images/bds-agentic-workflow/openclaw-cronjob-whale-alert.png new file mode 100644 index 00000000..971cd50f Binary files /dev/null and b/static/images/bds-agentic-workflow/openclaw-cronjob-whale-alert.png differ diff --git a/static/images/bds-agentic-workflow/openclaw-topup.png b/static/images/bds-agentic-workflow/openclaw-topup.png new file mode 100644 index 00000000..7971b58d Binary files /dev/null and b/static/images/bds-agentic-workflow/openclaw-topup.png differ diff --git a/static/images/bds-agentic-workflow/protocol-state-maxsnapshots-cid-verify.png b/static/images/bds-agentic-workflow/protocol-state-maxsnapshots-cid-verify.png new file mode 100644 index 00000000..ff9086dc Binary files /dev/null and b/static/images/bds-agentic-workflow/protocol-state-maxsnapshots-cid-verify.png differ diff --git a/yarn.lock b/yarn.lock index bd91a54c..951a4a0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@algolia/abtesting@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.1.0.tgz#32c84876956727dcdca8df03c567f12fb39edf0d" + resolved "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.1.0.tgz" integrity sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow== dependencies: "@algolia/client-common" "5.35.0" @@ -14,7 +14,7 @@ "@algolia/autocomplete-core@1.17.9": version "1.17.9" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz#83374c47dc72482aa45d6b953e89377047f0dcdc" + resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz" integrity sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ== dependencies: "@algolia/autocomplete-plugin-algolia-insights" "1.17.9" @@ -22,45 +22,45 @@ "@algolia/autocomplete-core@1.8.2": version "1.8.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz#8d758c8652742e2761450d2b615a841fca24e10e" + resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz" integrity sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ== dependencies: "@algolia/autocomplete-shared" "1.8.2" "@algolia/autocomplete-plugin-algolia-insights@1.17.9": version "1.17.9" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz#74c86024d09d09e8bfa3dd90b844b77d9f9947b6" + resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz" integrity sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ== dependencies: "@algolia/autocomplete-shared" "1.17.9" "@algolia/autocomplete-preset-algolia@1.17.9": version "1.17.9" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz#911f3250544eb8ea4096fcfb268f156b085321b5" + resolved "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz" integrity sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ== dependencies: "@algolia/autocomplete-shared" "1.17.9" "@algolia/autocomplete-preset-algolia@1.8.2": version "1.8.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz#706e87f94c5f198c0e90502b97af09adeeddcc79" + resolved "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz" integrity sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA== dependencies: "@algolia/autocomplete-shared" "1.8.2" "@algolia/autocomplete-shared@1.17.9": version "1.17.9" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz#5f38868f7cb1d54b014b17a10fc4f7e79d427fa8" + resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz" integrity sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ== "@algolia/autocomplete-shared@1.8.2": version "1.8.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz#e6972df5c6935a241f16e4909aa82902338e029d" + resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz" integrity sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g== "@algolia/client-abtesting@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.35.0.tgz#e4cb9ad90357c8b26fb6fbcd0157cc8bd1b600ed" + resolved "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.35.0.tgz" integrity sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ== dependencies: "@algolia/client-common" "5.35.0" @@ -70,7 +70,7 @@ "@algolia/client-analytics@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.35.0.tgz#ff0b9d9cbda074472d727a2d0a6b18bcc47076be" + resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.35.0.tgz" integrity sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw== dependencies: "@algolia/client-common" "5.35.0" @@ -80,12 +80,12 @@ "@algolia/client-common@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.35.0.tgz#1d72b36308ceaa53d7d488cd3a161506ddeb0c42" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.35.0.tgz" integrity sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w== "@algolia/client-insights@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.35.0.tgz#8fd51eead7d89925522d48b5c164b3d7b656707c" + resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.35.0.tgz" integrity sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA== dependencies: "@algolia/client-common" "5.35.0" @@ -95,7 +95,7 @@ "@algolia/client-personalization@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.35.0.tgz#a661767851269b8ff091eaa900fe0b65b3937382" + resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.35.0.tgz" integrity sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA== dependencies: "@algolia/client-common" "5.35.0" @@ -105,7 +105,7 @@ "@algolia/client-query-suggestions@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.35.0.tgz#b8704f3cdb2b49b8f0348bb77a3821a5ffa5b73b" + resolved "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.35.0.tgz" integrity sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w== dependencies: "@algolia/client-common" "5.35.0" @@ -115,7 +115,7 @@ "@algolia/client-search@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.35.0.tgz#61441c4de212d8a1af93ab1406f46fd3386c35a0" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.35.0.tgz" integrity sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg== dependencies: "@algolia/client-common" "5.35.0" @@ -125,12 +125,12 @@ "@algolia/events@^4.0.1": version "4.0.1" - resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + resolved "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== "@algolia/ingestion@1.35.0": version "1.35.0" - resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.35.0.tgz#fb263cc190da421756f8f52e3fe5e5afdc89f68c" + resolved "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.35.0.tgz" integrity sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA== dependencies: "@algolia/client-common" "5.35.0" @@ -140,7 +140,7 @@ "@algolia/monitoring@1.35.0": version "1.35.0" - resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.35.0.tgz#6be2b3e2a48328b57d98827da9c85ec2b42d49da" + resolved "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.35.0.tgz" integrity sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw== dependencies: "@algolia/client-common" "5.35.0" @@ -150,7 +150,7 @@ "@algolia/recommend@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.35.0.tgz#03c3d1dbbd1b5b07dda98350b45640c819081211" + resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.35.0.tgz" integrity sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ== dependencies: "@algolia/client-common" "5.35.0" @@ -160,36 +160,44 @@ "@algolia/requester-browser-xhr@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.35.0.tgz#b1c26fc9be80a0ddde6b2e45fb50d52c7c6c05f4" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.35.0.tgz" integrity sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw== dependencies: "@algolia/client-common" "5.35.0" "@algolia/requester-fetch@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.35.0.tgz#29815c5bf501148ea619ed96bae09c099a5cced4" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.35.0.tgz" integrity sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ== dependencies: "@algolia/client-common" "5.35.0" "@algolia/requester-node-http@5.35.0": version "5.35.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.35.0.tgz#9095b80a0ae77f574036261f44053636e31d1baf" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.35.0.tgz" integrity sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ== dependencies: "@algolia/client-common" "5.35.0" "@ampproject/remapping@^2.2.0": version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + 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" +"@antfu/install-pkg@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz" + integrity sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ== + dependencies: + package-manager-detector "^1.3.0" + tinyexec "^1.0.1" + "@babel/code-frame@^7.0.0", "@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" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: "@babel/helper-validator-identifier" "^7.27.1" @@ -198,12 +206,12 @@ "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz" integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== "@babel/core@^7.21.3", "@babel/core@^7.25.9": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.0.tgz#55dad808d5bf3445a108eefc88ea3fdf034749a4" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz" integrity sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ== dependencies: "@ampproject/remapping" "^2.2.0" @@ -224,7 +232,7 @@ "@babel/generator@^7.25.9", "@babel/generator@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.0.tgz#9cc2f7bd6eb054d77dc66c2664148a0c5118acd2" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz" integrity sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg== dependencies: "@babel/parser" "^7.28.0" @@ -235,14 +243,14 @@ "@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz" integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== dependencies: "@babel/types" "^7.27.3" "@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz" integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: "@babel/compat-data" "^7.27.2" @@ -253,7 +261,7 @@ "@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" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz" integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A== dependencies: "@babel/helper-annotate-as-pure" "^7.27.1" @@ -266,7 +274,7 @@ "@babel/helper-create-regexp-features-plugin@^7.18.6", "@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" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz" integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== dependencies: "@babel/helper-annotate-as-pure" "^7.27.1" @@ -275,7 +283,7 @@ "@babel/helper-define-polyfill-provider@^0.6.5": version "0.6.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz" integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== dependencies: "@babel/helper-compilation-targets" "^7.27.2" @@ -286,12 +294,12 @@ "@babel/helper-globals@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== "@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" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz" integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== dependencies: "@babel/traverse" "^7.27.1" @@ -299,7 +307,7 @@ "@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" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz" integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: "@babel/traverse" "^7.27.1" @@ -307,7 +315,7 @@ "@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.27.3": version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz" integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== dependencies: "@babel/helper-module-imports" "^7.27.1" @@ -316,19 +324,19 @@ "@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" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz" integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== dependencies: "@babel/types" "^7.27.1" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@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" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz" 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" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz" integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== dependencies: "@babel/helper-annotate-as-pure" "^7.27.1" @@ -337,7 +345,7 @@ "@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" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz" integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== dependencies: "@babel/helper-member-expression-to-functions" "^7.27.1" @@ -346,7 +354,7 @@ "@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" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz" integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== dependencies: "@babel/traverse" "^7.27.1" @@ -354,22 +362,22 @@ "@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" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== "@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" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" 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" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz" 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" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz" integrity sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ== dependencies: "@babel/template" "^7.27.1" @@ -378,7 +386,7 @@ "@babel/helpers@^7.27.6": version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.2.tgz#80f0918fecbfebea9af856c419763230040ee850" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz" integrity sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw== dependencies: "@babel/template" "^7.27.2" @@ -386,14 +394,14 @@ "@babel/parser@^7.27.2", "@babel/parser@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz" integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== dependencies: "@babel/types" "^7.28.0" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz" integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -401,21 +409,21 @@ "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz" integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + 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.27.1.tgz" integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz" integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -424,7 +432,7 @@ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz#bb1c25af34d75115ce229a1de7fa44bf8f955670" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz" integrity sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -432,47 +440,47 @@ "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + 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== "@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" + 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" "@babel/plugin-syntax-import-assertions@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz" integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-import-attributes@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz" integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@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" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz" integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@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" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz" integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + 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== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -480,14 +488,14 @@ "@babel/plugin-transform-arrow-functions@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz" integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-async-generator-functions@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz" integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -496,7 +504,7 @@ "@babel/plugin-transform-async-to-generator@^7.27.1": 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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz" integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== dependencies: "@babel/helper-module-imports" "^7.27.1" @@ -505,21 +513,21 @@ "@babel/plugin-transform-block-scoped-functions@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz" integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-block-scoping@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz#e7c50cbacc18034f210b93defa89638666099451" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz" integrity sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-class-properties@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz" integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== dependencies: "@babel/helper-create-class-features-plugin" "^7.27.1" @@ -527,7 +535,7 @@ "@babel/plugin-transform-class-static-block@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz#7e920d5625b25bbccd3061aefbcc05805ed56ce4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz" integrity sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA== dependencies: "@babel/helper-create-class-features-plugin" "^7.27.1" @@ -535,7 +543,7 @@ "@babel/plugin-transform-classes@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz#12fa46cffc32a6e084011b650539e880add8a0f8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz" integrity sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" @@ -547,7 +555,7 @@ "@babel/plugin-transform-computed-properties@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz" integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -555,7 +563,7 @@ "@babel/plugin-transform-destructuring@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz#0f156588f69c596089b7d5b06f5af83d9aa7f97a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz" integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -563,7 +571,7 @@ "@babel/plugin-transform-dotall-regex@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz" integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.27.1" @@ -571,14 +579,14 @@ "@babel/plugin-transform-duplicate-keys@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz" integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz" integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.27.1" @@ -586,14 +594,14 @@ "@babel/plugin-transform-dynamic-import@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz" integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-explicit-resource-management@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz" integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -601,21 +609,21 @@ "@babel/plugin-transform-exponentiation-operator@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz" integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-export-namespace-from@^7.27.1": 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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz" integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-for-of@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz" integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -623,7 +631,7 @@ "@babel/plugin-transform-function-name@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz" integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== dependencies: "@babel/helper-compilation-targets" "^7.27.1" @@ -632,35 +640,35 @@ "@babel/plugin-transform-json-strings@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz" integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-literals@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz" integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-logical-assignment-operators@^7.27.1": 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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz" integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-member-expression-literals@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz" integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-modules-amd@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz" integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== dependencies: "@babel/helper-module-transforms" "^7.27.1" @@ -668,7 +676,7 @@ "@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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz" integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== dependencies: "@babel/helper-module-transforms" "^7.27.1" @@ -676,7 +684,7 @@ "@babel/plugin-transform-modules-systemjs@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz" integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== dependencies: "@babel/helper-module-transforms" "^7.27.1" @@ -686,7 +694,7 @@ "@babel/plugin-transform-modules-umd@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz" integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== dependencies: "@babel/helper-module-transforms" "^7.27.1" @@ -694,7 +702,7 @@ "@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": 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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz" integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.27.1" @@ -702,28 +710,28 @@ "@babel/plugin-transform-new-target@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz" integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": 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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz" integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-numeric-separator@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz" integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-object-rest-spread@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz#d23021857ffd7cd809f54d624299b8086402ed8d" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz" integrity sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA== dependencies: "@babel/helper-compilation-targets" "^7.27.2" @@ -734,7 +742,7 @@ "@babel/plugin-transform-object-super@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz" integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -742,14 +750,14 @@ "@babel/plugin-transform-optional-catch-binding@^7.27.1": 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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz" integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-optional-chaining@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz" integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -757,14 +765,14 @@ "@babel/plugin-transform-parameters@^7.27.7": version "7.27.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz" integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-private-methods@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz" integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== dependencies: "@babel/helper-create-class-features-plugin" "^7.27.1" @@ -772,7 +780,7 @@ "@babel/plugin-transform-private-property-in-object@^7.27.1": 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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz" integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== dependencies: "@babel/helper-annotate-as-pure" "^7.27.1" @@ -781,35 +789,35 @@ "@babel/plugin-transform-property-literals@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz" integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-react-constant-elements@^7.21.3": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz#6c6b50424e749a6e48afd14cf7b92f98cb9383f9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz" integrity sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-react-display-name@^7.27.1": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz#6f20a7295fea7df42eb42fed8f896813f5b934de" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz" integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== 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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz" integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q== dependencies: "@babel/plugin-transform-react-jsx" "^7.27.1" "@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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz" integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw== dependencies: "@babel/helper-annotate-as-pure" "^7.27.1" @@ -820,7 +828,7 @@ "@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" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz" integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA== dependencies: "@babel/helper-annotate-as-pure" "^7.27.1" @@ -828,14 +836,14 @@ "@babel/plugin-transform-regenerator@^7.28.0": version "7.28.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz#bde80603442ff4bb4e910bc8b35485295d556ab1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz" integrity sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-regexp-modifiers@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz" integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.27.1" @@ -843,14 +851,14 @@ "@babel/plugin-transform-reserved-words@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz" integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-runtime@^7.25.9": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz#462e79008cc7bdac03e4c5e1765b9de2bcd31c21" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz" integrity sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA== dependencies: "@babel/helper-module-imports" "^7.27.1" @@ -862,14 +870,14 @@ "@babel/plugin-transform-shorthand-properties@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz" integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-spread@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz" integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -877,28 +885,28 @@ "@babel/plugin-transform-sticky-regex@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz" integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-template-literals@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz" integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-typeof-symbol@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz" integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-typescript@^7.27.1": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz#796cbd249ab56c18168b49e3e1d341b72af04a6b" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz" integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" @@ -909,14 +917,14 @@ "@babel/plugin-transform-unicode-escapes@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz" integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-unicode-property-regex@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz" integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.27.1" @@ -924,7 +932,7 @@ "@babel/plugin-transform-unicode-regex@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz" integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.27.1" @@ -932,7 +940,7 @@ "@babel/plugin-transform-unicode-sets-regex@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz" integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.27.1" @@ -940,7 +948,7 @@ "@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.0.tgz#d23a6bc17b43227d11db77081a0779c706b5569c" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz" integrity sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg== dependencies: "@babel/compat-data" "^7.28.0" @@ -1016,7 +1024,7 @@ "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + 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== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -1025,7 +1033,7 @@ "@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.27.1.tgz#86ea0a5ca3984663f744be2fd26cb6747c3fd0ec" + resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz" integrity sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -1037,7 +1045,7 @@ "@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz" integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -1048,19 +1056,19 @@ "@babel/runtime-corejs3@^7.25.9": version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.28.2.tgz#1382be38259226003575d9597a57f1eb467de2e7" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.2.tgz" integrity sha512-FVFaVs2/dZgD3Y9ZD+AKNKjyGKzwu0C54laAXWUXgLcVXcCX6YZ6GhK2cp7FogSN2OA0Fu+QT8dP3FUdo9ShSQ== dependencies: core-js-pure "^3.43.0" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9": version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.2.tgz#2ae5a9d51cc583bd1f5673b3bb70d6d819682473" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz" integrity sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA== "@babel/template@^7.27.1", "@babel/template@^7.27.2": version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz" integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== dependencies: "@babel/code-frame" "^7.27.1" @@ -1069,7 +1077,7 @@ "@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0": version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz" integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== dependencies: "@babel/code-frame" "^7.27.1" @@ -1082,35 +1090,70 @@ "@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.0", "@babel/types@^7.28.2", "@babel/types@^7.4.4": version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz" integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" +"@braintree/sanitize-url@^7.1.1": + version "7.1.2" + resolved "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz" + integrity sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA== + +"@chevrotain/cst-dts-gen@12.0.0": + version "12.0.0" + resolved "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-12.0.0.tgz" + integrity sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg== + dependencies: + "@chevrotain/gast" "12.0.0" + "@chevrotain/types" "12.0.0" + +"@chevrotain/gast@12.0.0": + version "12.0.0" + resolved "https://registry.npmjs.org/@chevrotain/gast/-/gast-12.0.0.tgz" + integrity sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ== + dependencies: + "@chevrotain/types" "12.0.0" + +"@chevrotain/regexp-to-ast@12.0.0", "@chevrotain/regexp-to-ast@~12.0.0": + version "12.0.0" + resolved "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-12.0.0.tgz" + integrity sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA== + +"@chevrotain/types@12.0.0": + version "12.0.0" + resolved "https://registry.npmjs.org/@chevrotain/types/-/types-12.0.0.tgz" + integrity sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA== + +"@chevrotain/utils@12.0.0": + version "12.0.0" + resolved "https://registry.npmjs.org/@chevrotain/utils/-/utils-12.0.0.tgz" + integrity sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA== + "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@csstools/cascade-layer-name-parser@^2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz#43f962bebead0052a9fed1a2deeb11f85efcbc72" + resolved "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz" integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A== "@csstools/color-helpers@^5.0.2": version "5.0.2" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8" + resolved "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz" integrity sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA== "@csstools/css-calc@^2.1.4": version "2.1.4" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" + resolved "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz" integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== "@csstools/css-color-parser@^3.0.10": version "3.0.10" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz#79fc68864dd43c3b6782d2b3828bc0fa9d085c10" + resolved "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz" integrity sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg== dependencies: "@csstools/color-helpers" "^5.0.2" @@ -1118,22 +1161,22 @@ "@csstools/css-parser-algorithms@^3.0.5": version "3.0.5" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" + resolved "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz" integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== "@csstools/css-tokenizer@^3.0.4": version "3.0.4" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" + resolved "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz" integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== "@csstools/media-query-list-parser@^4.0.3": version "4.0.3" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz#7aec77bcb89c2da80ef207e73f474ef9e1b3cdf1" + resolved "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz" integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ== "@csstools/postcss-cascade-layers@^5.0.2": version "5.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz#dd2c70db3867b88975f2922da3bfbae7d7a2cae7" + resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz" integrity sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg== dependencies: "@csstools/selector-specificity" "^5.0.0" @@ -1141,7 +1184,7 @@ "@csstools/postcss-color-function@^4.0.10": version "4.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz#11ad43a66ef2cc794ab826a07df8b5fa9fb47a3a" + resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz" integrity sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -1152,7 +1195,7 @@ "@csstools/postcss-color-mix-function@^3.0.10": version "3.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz#8c9d0ccfae5c45a9870dd84807ea2995c7a3a514" + resolved "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz" integrity sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -1163,7 +1206,7 @@ "@csstools/postcss-color-mix-variadic-function-arguments@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz#0b29cb9b4630d7ed68549db265662d41554a17ed" + resolved "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz" integrity sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -1174,7 +1217,7 @@ "@csstools/postcss-content-alt-text@^2.0.6": version "2.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz#548862226eac54bab0ee5f1bf3a9981393ab204b" + resolved "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz" integrity sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ== dependencies: "@csstools/css-parser-algorithms" "^3.0.5" @@ -1184,7 +1227,7 @@ "@csstools/postcss-exponential-functions@^2.0.9": version "2.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz#fc03d1272888cb77e64cc1a7d8a33016e4f05c69" + resolved "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz" integrity sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw== dependencies: "@csstools/css-calc" "^2.1.4" @@ -1193,7 +1236,7 @@ "@csstools/postcss-font-format-keywords@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz#6730836eb0153ff4f3840416cc2322f129c086e6" + resolved "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz" integrity sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw== dependencies: "@csstools/utilities" "^2.0.0" @@ -1201,7 +1244,7 @@ "@csstools/postcss-gamut-mapping@^2.0.10": version "2.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz#f518d941231d721dbecf5b41e3c441885ff2f28b" + resolved "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz" integrity sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -1210,7 +1253,7 @@ "@csstools/postcss-gradients-interpolation-method@^5.0.10": version "5.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz#3146da352c31142a721fdba062ac3a6d11dbbec3" + resolved "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz" integrity sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -1221,7 +1264,7 @@ "@csstools/postcss-hwb-function@^4.0.10": version "4.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz#f93f3c457e6440ac37ef9b908feb5d901b417d50" + resolved "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz" integrity sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -1232,7 +1275,7 @@ "@csstools/postcss-ic-unit@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz#7561e09db65fac8304ceeab9dd3e5c6e43414587" + resolved "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz" integrity sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA== dependencies: "@csstools/postcss-progressive-custom-properties" "^4.1.0" @@ -1241,12 +1284,12 @@ "@csstools/postcss-initial@^2.0.1": version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz#c385bd9d8ad31ad159edd7992069e97ceea4d09a" + resolved "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz" integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg== "@csstools/postcss-is-pseudo-class@^5.0.3": version "5.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz#d34e850bcad4013c2ed7abe948bfa0448aa8eb74" + resolved "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz" integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ== dependencies: "@csstools/selector-specificity" "^5.0.0" @@ -1254,7 +1297,7 @@ "@csstools/postcss-light-dark-function@^2.0.9": version "2.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz#9fb080188907539734a9d5311d2a1cb82531ef38" + resolved "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz" integrity sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ== dependencies: "@csstools/css-parser-algorithms" "^3.0.5" @@ -1264,29 +1307,29 @@ "@csstools/postcss-logical-float-and-clear@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz#62617564182cf86ab5d4e7485433ad91e4c58571" + resolved "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz" integrity sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ== "@csstools/postcss-logical-overflow@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz#c6de7c5f04e3d4233731a847f6c62819bcbcfa1d" + resolved "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz" integrity sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA== "@csstools/postcss-logical-overscroll-behavior@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz#43c03eaecdf34055ef53bfab691db6dc97a53d37" + resolved "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz" integrity sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w== "@csstools/postcss-logical-resize@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz#4df0eeb1a61d7bd85395e56a5cce350b5dbfdca6" + resolved "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz" integrity sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-logical-viewport-units@^3.0.4": version "3.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz#016d98a8b7b5f969e58eb8413447eb801add16fc" + resolved "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz" integrity sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ== dependencies: "@csstools/css-tokenizer" "^3.0.4" @@ -1294,7 +1337,7 @@ "@csstools/postcss-media-minmax@^2.0.9": version "2.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz#184252d5b93155ae526689328af6bdf3fc113987" + resolved "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz" integrity sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig== dependencies: "@csstools/css-calc" "^2.1.4" @@ -1304,7 +1347,7 @@ "@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.5": version "3.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz#f485c31ec13d6b0fb5c528a3474334a40eff5f11" + resolved "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz" integrity sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg== dependencies: "@csstools/css-parser-algorithms" "^3.0.5" @@ -1313,7 +1356,7 @@ "@csstools/postcss-nested-calc@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz#754e10edc6958d664c11cde917f44ba144141c62" + resolved "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz" integrity sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A== dependencies: "@csstools/utilities" "^2.0.0" @@ -1321,14 +1364,14 @@ "@csstools/postcss-normalize-display-values@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" + resolved "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz" integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-oklab-function@^4.0.10": version "4.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz#d4c23c51dd0be45e6dedde22432d7d0003710780" + resolved "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz" integrity sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -1339,14 +1382,14 @@ "@csstools/postcss-progressive-custom-properties@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz#70c8d41b577f4023633b7e3791604e0b7f3775bc" + resolved "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz" integrity sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-random-function@^2.0.1": version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e" + resolved "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz" integrity sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w== dependencies: "@csstools/css-calc" "^2.1.4" @@ -1355,7 +1398,7 @@ "@csstools/postcss-relative-color-syntax@^3.0.10": version "3.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz#daa840583969461e1e06b12e9c591e52a790ec86" + resolved "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz" integrity sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -1366,14 +1409,14 @@ "@csstools/postcss-scope-pseudo-class@^4.0.1": version "4.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz#9fe60e9d6d91d58fb5fc6c768a40f6e47e89a235" + resolved "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz" integrity sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q== dependencies: postcss-selector-parser "^7.0.0" "@csstools/postcss-sign-functions@^1.1.4": version "1.1.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz#a9ac56954014ae4c513475b3f1b3e3424a1e0c12" + resolved "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz" integrity sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg== dependencies: "@csstools/css-calc" "^2.1.4" @@ -1382,7 +1425,7 @@ "@csstools/postcss-stepped-value-functions@^4.0.9": version "4.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz#36036f1a0e5e5ee2308e72f3c9cb433567c387b9" + resolved "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz" integrity sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA== dependencies: "@csstools/css-calc" "^2.1.4" @@ -1391,7 +1434,7 @@ "@csstools/postcss-text-decoration-shorthand@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz#a3bcf80492e6dda36477538ab8e8943908c9f80a" + resolved "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz" integrity sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA== dependencies: "@csstools/color-helpers" "^5.0.2" @@ -1399,7 +1442,7 @@ "@csstools/postcss-trigonometric-functions@^4.0.9": version "4.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz#3f94ed2e319b57f2c59720b64e4d0a8a6fb8c3b2" + resolved "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz" integrity sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A== dependencies: "@csstools/css-calc" "^2.1.4" @@ -1408,37 +1451,37 @@ "@csstools/postcss-unset-value@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba" + resolved "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz" integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== "@csstools/selector-resolve-nested@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7" + resolved "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz" integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== "@csstools/selector-specificity@^5.0.0": version "5.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" + resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz" integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== "@csstools/utilities@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60" + resolved "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz" integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== "@discoveryjs/json-ext@0.5.7": version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@docsearch/css@3.9.0": version "3.9.0" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.9.0.tgz#3bc29c96bf024350d73b0cfb7c2a7b71bf251cd5" + resolved "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz" integrity sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA== "@docsearch/react@^3.9.0": version "3.9.0" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.9.0.tgz#d0842b700c3ee26696786f3c8ae9f10c1a3f0db3" + resolved "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz" integrity sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ== dependencies: "@algolia/autocomplete-core" "1.17.9" @@ -1448,7 +1491,7 @@ "@docusaurus/babel@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.8.1.tgz#db329ac047184214e08e2dbc809832c696c18506" + resolved "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz" integrity sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw== dependencies: "@babel/core" "^7.25.9" @@ -1469,7 +1512,7 @@ "@docusaurus/bundler@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.8.1.tgz#e2b11d615f09a6e470774bb36441b8d06736b94c" + resolved "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.1.tgz" integrity sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA== dependencies: "@babel/core" "^7.25.9" @@ -1499,7 +1542,7 @@ "@docusaurus/core@3.8.1", "@docusaurus/core@^3.8.1", "@docusaurus/core@~3.8.0": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.8.1.tgz#c22e47c16a22cb7d245306c64bc54083838ff3db" + resolved "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.1.tgz" integrity sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA== dependencies: "@docusaurus/babel" "3.8.1" @@ -1547,7 +1590,7 @@ "@docusaurus/cssnano-preset@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz#bd55026251a6ab8e2194839a2042458ef9880c44" + resolved "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz" integrity sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug== dependencies: cssnano-preset-advanced "^6.1.2" @@ -1557,7 +1600,7 @@ "@docusaurus/faster@^3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/faster/-/faster-3.8.1.tgz#4db2d426f2caa754b12fa4c1264c82ab16618685" + resolved "https://registry.npmjs.org/@docusaurus/faster/-/faster-3.8.1.tgz" integrity sha512-XYrj3qnTm+o2d5ih5drCq9s63GJoM8vZ26WbLG5FZhURsNxTSXgHJcx11Qo7nWPUStCQkuqk1HvItzscCUnd4A== dependencies: "@docusaurus/types" "3.8.1" @@ -1572,7 +1615,7 @@ "@docusaurus/logger@3.8.1", "@docusaurus/logger@~3.8.0": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.8.1.tgz#45321b2e2e14695d0dbd8b4104ea7b0fbaa98700" + resolved "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.1.tgz" integrity sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww== dependencies: chalk "^4.1.2" @@ -1580,7 +1623,7 @@ "@docusaurus/mdx-loader@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz#74309b3614bbcef1d55fb13e6cc339b7fb000b5f" + resolved "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz" integrity sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w== dependencies: "@docusaurus/logger" "3.8.1" @@ -1610,7 +1653,7 @@ "@docusaurus/module-type-aliases@3.8.1", "@docusaurus/module-type-aliases@^3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz#454de577bd7f50b5eae16db0f76b49ca5e4e281a" + resolved "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz" integrity sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg== dependencies: "@docusaurus/types" "3.8.1" @@ -1623,7 +1666,7 @@ "@docusaurus/plugin-content-blog@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz#88d842b562b04cf59df900d9f6984b086f821525" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz" integrity sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw== dependencies: "@docusaurus/core" "3.8.1" @@ -1647,7 +1690,7 @@ "@docusaurus/plugin-content-docs@3.8.1", "@docusaurus/plugin-content-docs@~3.8.0": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz#40686a206abb6373bee5638de100a2c312f112a4" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz" integrity sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA== dependencies: "@docusaurus/core" "3.8.1" @@ -1671,7 +1714,7 @@ "@docusaurus/plugin-content-pages@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz#41b684dbd15390b7bb6a627f78bf81b6324511ac" + resolved "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz" integrity sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w== dependencies: "@docusaurus/core" "3.8.1" @@ -1685,7 +1728,7 @@ "@docusaurus/plugin-css-cascade-layers@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz#cb414b4a82aa60fc64ef2a435ad0105e142a6c71" + resolved "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz" integrity sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw== dependencies: "@docusaurus/core" "3.8.1" @@ -1696,7 +1739,7 @@ "@docusaurus/plugin-debug@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz#45b107e46b627caaae66995f53197ace78af3491" + resolved "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz" integrity sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw== dependencies: "@docusaurus/core" "3.8.1" @@ -1708,7 +1751,7 @@ "@docusaurus/plugin-google-analytics@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz#64a302e62fe5cb6e007367c964feeef7b056764a" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz" integrity sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q== dependencies: "@docusaurus/core" "3.8.1" @@ -1718,7 +1761,7 @@ "@docusaurus/plugin-google-gtag@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz#8c76f8a1d96448f2f0f7b10e6bde451c40672b95" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz" integrity sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg== dependencies: "@docusaurus/core" "3.8.1" @@ -1729,7 +1772,7 @@ "@docusaurus/plugin-google-tag-manager@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz#88241ffd06369f4a4d5fb982ff3ac2777561ae37" + resolved "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz" integrity sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw== dependencies: "@docusaurus/core" "3.8.1" @@ -1739,7 +1782,7 @@ "@docusaurus/plugin-sitemap@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz#3aebd39186dc30e53023f1aab44625bc0bdac892" + resolved "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz" integrity sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw== dependencies: "@docusaurus/core" "3.8.1" @@ -1754,7 +1797,7 @@ "@docusaurus/plugin-svgr@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz#6f340be8eae418a2cce540d8ece096ffd9c9b6ab" + resolved "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz" integrity sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw== dependencies: "@docusaurus/core" "3.8.1" @@ -1768,7 +1811,7 @@ "@docusaurus/preset-classic@^3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz#bb79fd12f3211363720c569a526c7e24d3aa966b" + resolved "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz" integrity sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ== dependencies: "@docusaurus/core" "3.8.1" @@ -1789,7 +1832,7 @@ "@docusaurus/theme-classic@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz#1e45c66d89ded359225fcd29bf3258d9205765c1" + resolved "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz" integrity sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw== dependencies: "@docusaurus/core" "3.8.1" @@ -1821,7 +1864,7 @@ "@docusaurus/theme-common@3.8.1", "@docusaurus/theme-common@~3.8.0": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.8.1.tgz#17c23316fbe3ee3f7e707c7298cb59a0fff38b4b" + resolved "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz" integrity sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw== dependencies: "@docusaurus/mdx-loader" "3.8.1" @@ -1837,9 +1880,22 @@ tslib "^2.6.0" utility-types "^3.10.0" +"@docusaurus/theme-mermaid@3.8.1": + version "3.8.1" + resolved "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.8.1.tgz" + integrity sha512-IWYqjyTPjkNnHsFFu9+4YkeXS7PD1xI3Bn2shOhBq+f95mgDfWInkpfBN4aYvx4fTT67Am6cPtohRdwh4Tidtg== + dependencies: + "@docusaurus/core" "3.8.1" + "@docusaurus/module-type-aliases" "3.8.1" + "@docusaurus/theme-common" "3.8.1" + "@docusaurus/types" "3.8.1" + "@docusaurus/utils-validation" "3.8.1" + mermaid ">=11.6.0" + tslib "^2.6.0" + "@docusaurus/theme-search-algolia@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz#3aa3d99c35cc2d4b709fcddd4df875a9b536e29b" + resolved "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz" integrity sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ== dependencies: "@docsearch/react" "^3.9.0" @@ -1861,7 +1917,7 @@ "@docusaurus/theme-translations@3.8.1", "@docusaurus/theme-translations@~3.8.0": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz#4b1d76973eb53861e167c7723485e059ba4ffd0a" + resolved "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz" integrity sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g== dependencies: fs-extra "^11.1.1" @@ -1869,7 +1925,7 @@ "@docusaurus/types@3.8.1", "@docusaurus/types@^3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.8.1.tgz#83ab66c345464e003b576a49f78897482061fc26" + resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz" integrity sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg== dependencies: "@mdx-js/mdx" "^3.0.0" @@ -1884,7 +1940,7 @@ "@docusaurus/utils-common@3.8.1": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.8.1.tgz#c369b8c3041afb7dcd595d4172beb1cc1015c85f" + resolved "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.1.tgz" integrity sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg== dependencies: "@docusaurus/types" "3.8.1" @@ -1892,7 +1948,7 @@ "@docusaurus/utils-validation@3.8.1", "@docusaurus/utils-validation@~3.8.0": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz#0499c0d151a4098a0963237057993282cfbd538e" + resolved "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz" integrity sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA== dependencies: "@docusaurus/logger" "3.8.1" @@ -1906,7 +1962,7 @@ "@docusaurus/utils@3.8.1", "@docusaurus/utils@~3.8.0": version "3.8.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.8.1.tgz#2ac1e734106e2f73dbd0f6a8824d525f9064e9f0" + resolved "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.1.tgz" integrity sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ== dependencies: "@docusaurus/logger" "3.8.1" @@ -1931,50 +1987,42 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@emnapi/core@^1.4.5": - version "1.4.5" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.5.tgz#bfbb0cbbbb9f96ec4e2c4fd917b7bbe5495ceccb" - integrity sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q== - dependencies: - "@emnapi/wasi-threads" "1.0.4" - tslib "^2.4.0" - -"@emnapi/runtime@^1.4.5": - version "1.4.5" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.5.tgz#c67710d0661070f38418b6474584f159de38aba9" - integrity sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz#703fc094d969e273b1b71c292523b2f792862bf4" - integrity sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g== - dependencies: - tslib "^2.4.0" - "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== "@hapi/topo@^5.1.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + resolved "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== dependencies: "@hapi/hoek" "^9.0.0" +"@iconify/types@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + +"@iconify/utils@^3.0.2": + version "3.1.0" + resolved "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.0.tgz" + integrity sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw== + dependencies: + "@antfu/install-pkg" "^1.1.0" + "@iconify/types" "^2.0.0" + mlly "^1.8.0" + "@jest/schemas@^29.6.3": version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + 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" "@jest/types@^29.6.3": version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: "@jest/schemas" "^29.6.3" @@ -1986,7 +2034,7 @@ "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.12" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz#2234ce26c62889f03db3d7fea43c1932ab3e927b" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz" integrity sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" @@ -1994,12 +2042,12 @@ "@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" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/source-map@^0.3.3": version "0.3.10" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.10.tgz#a35714446a2e84503ff9bfe66f1d1d4846f2075b" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz" integrity sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -2007,12 +2055,12 @@ "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.4" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz" integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": version "0.3.29" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz#a58d31eaadaf92c6695680b2e1d464a9b8fbf7fc" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz" integrity sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -2020,12 +2068,12 @@ "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== "@mdx-js/mdx@^3.0.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.1.0.tgz#10235cab8ad7d356c262e8c21c68df5850a97dc3" + resolved "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz" integrity sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw== dependencies: "@types/estree" "^1.0.0" @@ -2055,19 +2103,26 @@ "@mdx-js/react@^3.0.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed" + resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz" integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ== dependencies: "@types/mdx" "^2.0.0" +"@mermaid-js/parser@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.0.tgz" + integrity sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw== + dependencies: + langium "^4.0.0" + "@module-federation/error-codes@0.17.0": version "0.17.0" - resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.17.0.tgz#b13b76b6c6226165f9c2865ca8b089a351ebc844" + resolved "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.17.0.tgz" integrity sha512-+pZ12frhaDqh4Xs/MQj4Vu4CAjnJTiEb8Z6fqPfn/TLHh4YLWMOzpzxGuMFDHqXwMb3o8FRAUhNB0eX2ZmhwTA== "@module-federation/runtime-core@0.17.0": version "0.17.0" - resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.17.0.tgz#6f23fb5c595dd984ba6958afd7da16b9e34ec20f" + resolved "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.17.0.tgz" integrity sha512-MYwDDevYnBB9gXFfNOmJVIX5XZcbCHd0dral7gT7yVmlwOhbuGOLlm2dh2icwwdCYHA9AFDCfU9l1nJR4ex/ng== dependencies: "@module-federation/error-codes" "0.17.0" @@ -2075,7 +2130,7 @@ "@module-federation/runtime-tools@0.17.0": version "0.17.0" - resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.17.0.tgz#ff1e00c42887bb32f767c3e0e46ce0ad9e9b76f8" + resolved "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.17.0.tgz" integrity sha512-t4QcKfhmwOHedwByDKUlTQVw4+gPotySYPyNa8GFrBSr1F6wcGdGyOhzP+PdgpiJLIM03cB6V+IKGGHE28SfDQ== dependencies: "@module-federation/runtime" "0.17.0" @@ -2083,7 +2138,7 @@ "@module-federation/runtime@0.17.0": version "0.17.0" - resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.17.0.tgz#3408a155500ec9e4d516fd2d999e96b468859f34" + resolved "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.17.0.tgz" integrity sha512-eMtrtCSSV6neJpMmQ8WdFpYv93raSgsG5RiAPsKUuSCXfZ5D+yzvleZ+gPcEpFT9HokmloxAn0jep50/1upTQw== dependencies: "@module-federation/error-codes" "0.17.0" @@ -2092,29 +2147,27 @@ "@module-federation/sdk@0.17.0": version "0.17.0" - resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.17.0.tgz#07d5189afd22be9616a877e114907b03169ac95f" + resolved "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.17.0.tgz" integrity sha512-tjrNaYdDocHZsWu5iXlm83lwEK8A64r4PQB3/kY1cW1iOvggR2RESLAWPxRJXC2cLF8fg8LDKOBdgERZW1HPFA== "@module-federation/webpack-bundler-runtime@0.17.0": version "0.17.0" - resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.17.0.tgz#8d9cd997329baa805ba46a5f2130e77964d33992" + resolved "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.17.0.tgz" integrity sha512-o8XtXwqTDlqLgcALOfObcCbqXvUcSDHIEXrkcb4W+I8GJY7IqV0+x6rX4mJ3f59tca9qOF8zsZsOA6BU93Pvgw== dependencies: "@module-federation/runtime" "0.17.0" "@module-federation/sdk" "0.17.0" "@napi-rs/wasm-runtime@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.1.tgz#006125f38a06d34000b014864cdbd810b24afdd1" - integrity sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz#a46bbfedc29751b7170c5d23bc1d8ee8c7e3c1e1" + integrity sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow== dependencies: - "@emnapi/core" "^1.4.5" - "@emnapi/runtime" "^1.4.5" - "@tybys/wasm-util" "^0.10.0" + "@tybys/wasm-util" "^0.10.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + 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" @@ -2122,12 +2175,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + 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" @@ -2135,19 +2188,19 @@ "@pnpm/config.env-replace@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== "@pnpm/network.ca-file@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== dependencies: graceful-fs "4.2.10" "@pnpm/npm-conf@^2.1.0": version "2.3.1" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" + resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz" integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== dependencies: "@pnpm/config.env-replace" "^1.1.0" @@ -2156,12 +2209,12 @@ "@polka/url@^1.0.0-next.24": version "1.0.0-next.29" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1" + resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz" integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== "@rspack/binding-darwin-arm64@1.4.10": version "1.4.10" - resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.4.10.tgz#1ff9efeab64a5bd97df9d58e6a34a7bdf67108cd" + resolved "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.4.10.tgz" integrity sha512-PraYGuVSzvEwdoYC8T70qI/8j1QeUe2sysiWmjSdxUpxJsDfw35hK9TfxULeAJULlAUAiiXs03hdZk29DBc3ow== "@rspack/binding-darwin-x64@1.4.10": @@ -2213,7 +2266,7 @@ "@rspack/binding@1.4.10": version "1.4.10" - resolved "https://registry.yarnpkg.com/@rspack/binding/-/binding-1.4.10.tgz#919acf4705700b5f401a69c49f84be2af33f0386" + resolved "https://registry.npmjs.org/@rspack/binding/-/binding-1.4.10.tgz" integrity sha512-awiXN7qTTTLWFThbJFL+M4k1if4sb17xKA5TaHbbxs0qKSlpe3adwNrNHaNU2WOQz+PbuF++OMyd+4gUusKuVg== optionalDependencies: "@rspack/binding-darwin-arm64" "1.4.10" @@ -2229,7 +2282,7 @@ "@rspack/core@^1.3.15": version "1.4.10" - resolved "https://registry.yarnpkg.com/@rspack/core/-/core-1.4.10.tgz#ed7de0cb923ca60feff90bc8c5f60ac8779087af" + resolved "https://registry.npmjs.org/@rspack/core/-/core-1.4.10.tgz" integrity sha512-eK3H328pihiM1323OlaClKJ9WlqgGBZpcR5AqFoWsG0KD01tKCJOeZEgtCY6paRLrsQrEJwBrLntkG0fE7WNGg== dependencies: "@module-federation/runtime-tools" "0.17.0" @@ -2238,44 +2291,44 @@ "@rspack/lite-tapable@1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz#d4540a5d28bd6177164bc0ba0bee4bdec0458591" + resolved "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz" integrity sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w== "@sideway/address@^4.1.5": version "4.1.5" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz" integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== dependencies: "@hapi/hoek" "^9.0.0" "@sideway/formula@^3.0.1": version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== "@sideway/pinpoint@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== "@sinclair/typebox@^0.27.8": version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sindresorhus/is@^4.6.0": version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@sindresorhus/is@^5.2.0": version "5.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz" integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== "@slorber/remark-comment@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@slorber/remark-comment/-/remark-comment-1.0.0.tgz#2a020b3f4579c89dec0361673206c28d67e08f5a" + resolved "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz" integrity sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA== dependencies: micromark-factory-space "^1.0.0" @@ -2284,47 +2337,47 @@ "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz" integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== "@svgr/babel-plugin-remove-jsx-attribute@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz" integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== "@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz" integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== "@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz" integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== "@svgr/babel-plugin-svg-dynamic-title@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz" integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== "@svgr/babel-plugin-svg-em-dimensions@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz" integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== "@svgr/babel-plugin-transform-react-native-svg@8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz" integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== "@svgr/babel-plugin-transform-svg-component@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz" integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== "@svgr/babel-preset@8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz" integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== dependencies: "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" @@ -2338,7 +2391,7 @@ "@svgr/core@8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz" integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== dependencies: "@babel/core" "^7.21.3" @@ -2349,7 +2402,7 @@ "@svgr/hast-util-to-babel-ast@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz" integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== dependencies: "@babel/types" "^7.21.3" @@ -2357,7 +2410,7 @@ "@svgr/plugin-jsx@8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz" integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== dependencies: "@babel/core" "^7.21.3" @@ -2367,7 +2420,7 @@ "@svgr/plugin-svgo@8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" + resolved "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz" integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== dependencies: cosmiconfig "^8.1.3" @@ -2376,7 +2429,7 @@ "@svgr/webpack@^8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2" + resolved "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz" integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== dependencies: "@babel/core" "^7.21.3" @@ -2390,7 +2443,7 @@ "@swc/core-darwin-arm64@1.13.3": version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.3.tgz#aaab6af81f255bdc9d3bf1d8d38457236cab1a02" + resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.3.tgz" integrity sha512-ux0Ws4pSpBTqbDS9GlVP354MekB1DwYlbxXU3VhnDr4GBcCOimpocx62x7cFJkSpEBF8bmX8+/TTCGKh4PbyXw== "@swc/core-darwin-x64@1.13.3": @@ -2440,7 +2493,7 @@ "@swc/core@^1.7.39": version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.3.tgz#7a8668d96a28b3431acc3b9652f2d3ff2b6e5531" + resolved "https://registry.npmjs.org/@swc/core/-/core-1.13.3.tgz" integrity sha512-ZaDETVWnm6FE0fc+c2UE8MHYVS3Fe91o5vkmGfgwGXFbxYvAjKSqxM/j4cRc9T7VZNSJjriXq58XkfCp3Y6f+w== dependencies: "@swc/counter" "^0.1.3" @@ -2459,12 +2512,12 @@ "@swc/counter@^0.1.3": version "0.1.3" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== "@swc/html-darwin-arm64@1.13.3": version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/html-darwin-arm64/-/html-darwin-arm64-1.13.3.tgz#7d3950a6f2f98586509c5092a899223ecfb56bd8" + resolved "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.13.3.tgz" integrity sha512-GYlnVL4Fyjwj1Xgzyhe9DW9fDLGzrDuse947fiWgxleTOFl5gYTwKIIRD5w0UIzEUYRXcKX0PgEzxzSYHDgKwQ== "@swc/html-darwin-x64@1.13.3": @@ -2514,7 +2567,7 @@ "@swc/html@^1.7.39": version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/html/-/html-1.13.3.tgz#ef1447850fa877d8698f1251d42adee9debd4d04" + resolved "https://registry.npmjs.org/@swc/html/-/html-1.13.3.tgz" integrity sha512-NLIM1vYKSb/bsWN74BtACLqywoWz1r5l+sMZwMDtC26Ap+xMXtU44LiQQMuenTjYZ6SVL6ovQNLVG5UliKRN1g== dependencies: "@swc/counter" "^0.1.3" @@ -2532,33 +2585,33 @@ "@swc/types@^0.1.23": version "0.1.23" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.23.tgz#7eabf88b9cfd929253859c562ae95982ee04b4e8" + resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz" integrity sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw== dependencies: "@swc/counter" "^0.1.3" "@szmarczak/http-timer@^5.0.1": version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: defer-to-connect "^2.0.1" "@trysound/sax@0.2.0": version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== -"@tybys/wasm-util@^0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.0.tgz#2fd3cd754b94b378734ce17058d0507c45c88369" - integrity sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ== +"@tybys/wasm-util@^0.10.1": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.2.tgz#12b3a1b33db1f9cad4ddff1f604ab7dd00bf464e" + integrity sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg== dependencies: tslib "^2.4.0" "@types/body-parser@*": version "1.19.6" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz" integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" @@ -2566,14 +2619,14 @@ "@types/bonjour@^3.5.9": version "3.5.13" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz" integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz" integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== dependencies: "@types/express-serve-static-core" "*" @@ -2581,21 +2634,231 @@ "@types/connect@*": version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" +"@types/d3-array@*": + version "3.2.2" + resolved "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz" + integrity sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw== + +"@types/d3-axis@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz" + integrity sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-brush@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz" + integrity sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-chord@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz" + integrity sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg== + +"@types/d3-color@*": + version "3.1.3" + resolved "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz" + integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== + +"@types/d3-contour@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz" + integrity sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg== + dependencies: + "@types/d3-array" "*" + "@types/geojson" "*" + +"@types/d3-delaunay@*": + version "6.0.4" + resolved "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz" + integrity sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw== + +"@types/d3-dispatch@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz" + integrity sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA== + +"@types/d3-drag@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz" + integrity sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-dsv@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz" + integrity sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g== + +"@types/d3-ease@*": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz" + integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== + +"@types/d3-fetch@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz" + integrity sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-force@*": + version "3.0.10" + resolved "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz" + integrity sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw== + +"@types/d3-format@*": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz" + integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g== + +"@types/d3-geo@*": + version "3.1.0" + resolved "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz" + integrity sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ== + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@*": + version "3.1.7" + resolved "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz" + integrity sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg== + +"@types/d3-interpolate@*": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz" + integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "3.1.1" + resolved "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz" + integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg== + +"@types/d3-polygon@*": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz" + integrity sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA== + +"@types/d3-quadtree@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz" + integrity sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg== + +"@types/d3-random@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz" + integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ== + +"@types/d3-scale-chromatic@*": + version "3.1.0" + resolved "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz" + integrity sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ== + +"@types/d3-scale@*": + version "4.0.9" + resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz" + integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw== + dependencies: + "@types/d3-time" "*" + +"@types/d3-selection@*": + version "3.0.11" + resolved "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz" + integrity sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w== + +"@types/d3-shape@*": + version "3.1.8" + resolved "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz" + integrity sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time-format@*": + version "4.0.3" + resolved "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz" + integrity sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg== + +"@types/d3-time@*": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz" + integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g== + +"@types/d3-timer@*": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz" + integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== + +"@types/d3-transition@*": + version "3.0.9" + resolved "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz" + integrity sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-zoom@*": + version "3.0.8" + resolved "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz" + integrity sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw== + dependencies: + "@types/d3-interpolate" "*" + "@types/d3-selection" "*" + +"@types/d3@^7.4.3": + version "7.4.3" + resolved "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz" + integrity sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww== + dependencies: + "@types/d3-array" "*" + "@types/d3-axis" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-color" "*" + "@types/d3-contour" "*" + "@types/d3-delaunay" "*" + "@types/d3-dispatch" "*" + "@types/d3-drag" "*" + "@types/d3-dsv" "*" + "@types/d3-ease" "*" + "@types/d3-fetch" "*" + "@types/d3-force" "*" + "@types/d3-format" "*" + "@types/d3-geo" "*" + "@types/d3-hierarchy" "*" + "@types/d3-interpolate" "*" + "@types/d3-path" "*" + "@types/d3-polygon" "*" + "@types/d3-quadtree" "*" + "@types/d3-random" "*" + "@types/d3-scale" "*" + "@types/d3-scale-chromatic" "*" + "@types/d3-selection" "*" + "@types/d3-shape" "*" + "@types/d3-time" "*" + "@types/d3-time-format" "*" + "@types/d3-timer" "*" + "@types/d3-transition" "*" + "@types/d3-zoom" "*" + "@types/debug@^4.0.0": version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" "@types/eslint-scope@^3.7.7": version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" @@ -2603,7 +2866,7 @@ "@types/eslint@*": version "9.6.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz" integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" @@ -2611,19 +2874,19 @@ "@types/estree-jsx@^1.0.0": version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz" integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== dependencies: "@types/estree" "*" "@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.8": version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": version "5.0.7" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz" integrity sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ== dependencies: "@types/node" "*" @@ -2633,7 +2896,7 @@ "@types/express-serve-static-core@^4.17.33": version "4.19.6" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz" integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" @@ -2643,7 +2906,7 @@ "@types/express@*": version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956" + resolved "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz" integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw== dependencies: "@types/body-parser" "*" @@ -2652,7 +2915,7 @@ "@types/express@^4.17.13": version "4.17.23" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz" integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== dependencies: "@types/body-parser" "*" @@ -2660,128 +2923,138 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/geojson@*": + version "7946.0.16" + resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz" + integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== + "@types/gtag.js@^0.0.12": version "0.0.12" - resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.12.tgz#095122edca896689bdfcdd73b057e23064d23572" + resolved "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz" integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg== "@types/hast@^3.0.0": version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz" integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== dependencies: "@types/unist" "*" "@types/history@^4.7.11": version "4.7.11" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + resolved "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz" integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== "@types/html-minifier-terser@^6.0.0": version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-cache-semantics@^4.0.2": version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/http-errors@*": version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz" integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/http-proxy@^1.17.8": version "1.17.16" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.16.tgz#dee360707b35b3cc85afcde89ffeebff7d7f9240" + resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz" integrity sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w== dependencies: "@types/node" "*" "@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" + 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== "@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" + 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" "*" "@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" + 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" "*" "@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/mdast@^4.0.0", "@types/mdast@^4.0.2": version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz" integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== dependencies: "@types/unist" "*" "@types/mdx@^2.0.0": version "2.0.13" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" + resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz" integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== "@types/mime@^1": version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/ms@*": version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node-forge@^1.3.0": version "1.3.13" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.13.tgz#1797af20f7eccaf5f37b4d1739923bb0519d95b6" + resolved "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz" integrity sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww== dependencies: "@types/node" "*" "@types/node@*": version "24.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.1.0.tgz#0993f7dc31ab5cc402d112315b463e383d68a49c" + resolved "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz" integrity sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w== dependencies: undici-types "~7.8.0" "@types/node@^17.0.5": version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/prismjs@^1.26.0": version "1.26.5" - resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.5.tgz#72499abbb4c4ec9982446509d2f14fb8483869d6" + resolved "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz" integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== +"@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== + "@types/qs@*": version "6.14.0" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz" integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== "@types/range-parser@*": version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-router-config@*", "@types/react-router-config@^5.0.7": version "5.0.11" - resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.11.tgz#2761a23acc7905a66a94419ee40294a65aaa483a" + resolved "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz" integrity sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw== dependencies: "@types/history" "^4.7.11" @@ -2790,7 +3063,7 @@ "@types/react-router-dom@*": version "5.3.3" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + resolved "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz" integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== dependencies: "@types/history" "^4.7.11" @@ -2799,34 +3072,35 @@ "@types/react-router@*", "@types/react-router@^5.1.0": version "5.1.20" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + resolved "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz" integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== dependencies: "@types/history" "^4.7.11" "@types/react" "*" "@types/react@*": - version "19.1.9" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.9.tgz#f42b24f35474566a39b5c3a98e4d0c425b79a849" - integrity sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA== + version "18.3.28" + resolved "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz" + integrity sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw== dependencies: - csstype "^3.0.2" + "@types/prop-types" "*" + csstype "^3.2.2" "@types/retry@0.12.0": version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/sax@^1.2.1": version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.7.tgz#ba5fe7df9aa9c89b6dff7688a19023dd2963091d" + resolved "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz" integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== dependencies: "@types/node" "*" "@types/send@*": version "0.17.5" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz" integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== dependencies: "@types/mime" "^1" @@ -2834,14 +3108,14 @@ "@types/serve-index@^1.9.1": version "1.9.4" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz" integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": version "1.15.8" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz" integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== dependencies: "@types/http-errors" "*" @@ -2850,48 +3124,61 @@ "@types/sockjs@^0.3.33": version "0.3.36" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz" integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + "@types/unist@*", "@types/unist@^3.0.0": version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz" integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== "@types/unist@^2.0.0": version "2.0.11" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz" integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== "@types/ws@^8.5.5": version "8.18.1" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz" integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" "@types/yargs-parser@*": version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" 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" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz" integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" "@ungap/structured-clone@^1.0.0": version "1.3.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== +"@upsetjs/venn.js@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz" + integrity sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw== + optionalDependencies: + d3-selection "^3.0.0" + d3-transition "^3.0.1" + "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz" integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: "@webassemblyjs/helper-numbers" "1.13.2" @@ -2899,22 +3186,22 @@ "@webassemblyjs/floating-point-hex-parser@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz" integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== "@webassemblyjs/helper-api-error@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz" integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== "@webassemblyjs/helper-buffer@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz" integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== "@webassemblyjs/helper-numbers@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz" integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.13.2" @@ -2923,12 +3210,12 @@ "@webassemblyjs/helper-wasm-bytecode@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz" integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== "@webassemblyjs/helper-wasm-section@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz" integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2938,26 +3225,26 @@ "@webassemblyjs/ieee754@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz" integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz" integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz" integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== "@webassemblyjs/wasm-edit@^1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz" integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2971,7 +3258,7 @@ "@webassemblyjs/wasm-gen@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz" integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2982,7 +3269,7 @@ "@webassemblyjs/wasm-opt@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz" integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2992,7 +3279,7 @@ "@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz" integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3004,7 +3291,7 @@ "@webassemblyjs/wast-printer@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz" integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3012,17 +3299,17 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== accepts@~1.3.4, accepts@~1.3.8: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + 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" @@ -3030,34 +3317,39 @@ accepts@~1.3.4, accepts@~1.3.8: acorn-import-phases@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + resolved "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz" integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== acorn-jsx@^5.0.0: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.0: version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== dependencies: acorn "^8.11.0" acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.15.0: version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + address@^1.0.1: version "1.2.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -3065,26 +3357,26 @@ aggregate-error@^3.0.0: ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv-keywords@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" ajv@^6.12.5: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -3094,7 +3386,7 @@ ajv@^6.12.5: ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + 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" @@ -3104,14 +3396,14 @@ ajv@^8.0.0, ajv@^8.9.0: algoliasearch-helper@^3.13.3, algoliasearch-helper@^3.22.6: version "3.26.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz#d6e283396a9fc5bf944f365dc3b712570314363f" + resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz" integrity sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw== dependencies: "@algolia/events" "^4.0.1" algoliasearch@^5.14.2, algoliasearch@^5.17.1: version "5.35.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.35.0.tgz#ce12d1d287d6f4a80b9998568f806c92dabba566" + resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.35.0.tgz" integrity sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg== dependencies: "@algolia/abtesting" "1.1.0" @@ -3131,48 +3423,48 @@ algoliasearch@^5.14.2, algoliasearch@^5.17.1: ansi-align@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: string-width "^4.1.0" ansi-escapes@^4.3.2: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + 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" ansi-html-community@^0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 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" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== 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" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -3180,44 +3472,44 @@ anymatch@~3.1.2: arg@^5.0.0: version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" 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" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" 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" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== astring@^1.8.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef" + resolved "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz" integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== autoprefixer@^10.4.19, autoprefixer@^10.4.21: version "10.4.21" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz" integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== dependencies: browserslist "^4.24.4" @@ -3229,7 +3521,7 @@ autoprefixer@^10.4.19, autoprefixer@^10.4.21: axios@^1.6.0, axios@^1.8.4: version "1.11.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.11.0.tgz#c2ec219e35e414c025b2095e8b8280278478fdb6" + resolved "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz" integrity sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA== dependencies: follow-redirects "^1.15.6" @@ -3238,7 +3530,7 @@ axios@^1.6.0, axios@^1.8.4: babel-loader@^9.2.1: version "9.2.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz" integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== dependencies: find-cache-dir "^4.0.0" @@ -3246,14 +3538,14 @@ babel-loader@^9.2.1: babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" babel-plugin-polyfill-corejs2@^0.4.14: version "0.4.14" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz" integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== dependencies: "@babel/compat-data" "^7.27.7" @@ -3262,7 +3554,7 @@ babel-plugin-polyfill-corejs2@^0.4.14: babel-plugin-polyfill-corejs3@^0.13.0: version "0.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz" integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== dependencies: "@babel/helper-define-polyfill-provider" "^0.6.5" @@ -3270,39 +3562,39 @@ babel-plugin-polyfill-corejs3@^0.13.0: babel-plugin-polyfill-regenerator@^0.6.5: version "0.6.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz" integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== dependencies: "@babel/helper-define-polyfill-provider" "^0.6.5" bail@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz" integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== batch@0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== big.js@^5.2.2: version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== body-parser@1.20.3: version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" @@ -3320,7 +3612,7 @@ body-parser@1.20.3: bonjour-service@^1.0.11: version "1.3.0" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" + resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz" integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== dependencies: fast-deep-equal "^3.1.3" @@ -3328,12 +3620,12 @@ bonjour-service@^1.0.11: boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== boxen@^6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + resolved "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz" integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== dependencies: ansi-align "^3.0.1" @@ -3347,7 +3639,7 @@ boxen@^6.2.1: boxen@^7.0.0: version "7.1.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" + resolved "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz" integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== dependencies: ansi-align "^3.0.1" @@ -3361,7 +3653,7 @@ boxen@^7.0.0: brace-expansion@^1.1.7: version "1.1.12" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + 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" @@ -3369,14 +3661,14 @@ brace-expansion@^1.1.7: braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.2, browserslist@^4.24.4, browserslist@^4.25.0, browserslist@^4.25.1: version "4.25.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz" integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw== dependencies: caniuse-lite "^1.0.30001726" @@ -3386,27 +3678,27 @@ browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4 buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== bytes@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cacheable-lookup@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz" integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== cacheable-request@^10.2.8: version "10.2.14" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz" integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== dependencies: "@types/http-cache-semantics" "^4.0.2" @@ -3419,7 +3711,7 @@ cacheable-request@^10.2.8: call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + 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" @@ -3427,7 +3719,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- call-bind@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" @@ -3437,7 +3729,7 @@ call-bind@^1.0.8: call-bound@^1.0.2, call-bound@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -3445,12 +3737,12 @@ call-bound@^1.0.2, call-bound@^1.0.3: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -3458,17 +3750,17 @@ camel-case@^4.1.2: camelcase@^6.2.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== camelcase@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== caniuse-api@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== dependencies: browserslist "^4.0.0" @@ -3477,18 +3769,18 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001726: - version "1.0.30001731" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz#277c07416ea4613ec564e5b0ffb47e7b60f32e2f" - integrity sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg== + version "1.0.30001791" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz" + integrity sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ== ccount@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -3496,37 +3788,37 @@ chalk@^4.0.0, chalk@^4.1.2: chalk@^5.0.1, chalk@^5.2.0: version "5.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz" integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== char-regex@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== character-entities-html4@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz" integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== character-entities-legacy@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz" integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== character-entities@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== character-reference-invalid@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== cheerio-select@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== dependencies: boolbase "^1.0.0" @@ -3538,7 +3830,7 @@ cheerio-select@^2.1.0: cheerio@1.0.0-rc.12: version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== dependencies: cheerio-select "^2.1.0" @@ -3549,9 +3841,27 @@ cheerio@1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" +chevrotain-allstar@~0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.4.1.tgz" + integrity sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA== + dependencies: + lodash-es "^4.17.21" + +chevrotain@~12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/chevrotain/-/chevrotain-12.0.0.tgz" + integrity sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ== + dependencies: + "@chevrotain/cst-dts-gen" "12.0.0" + "@chevrotain/gast" "12.0.0" + "@chevrotain/regexp-to-ast" "12.0.0" + "@chevrotain/types" "12.0.0" + "@chevrotain/utils" "12.0.0" + chokidar@^3.5.3: version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -3566,34 +3876,34 @@ chokidar@^3.5.3: chrome-trace-event@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^3.2.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== clean-css@^5.2.2, clean-css@^5.3.3, clean-css@~5.3.2: version "5.3.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz" integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== dependencies: source-map "~0.6.0" clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-boxes@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== cli-table3@^0.6.3: version "0.6.5" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz" integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== dependencies: string-width "^4.2.0" @@ -3602,7 +3912,7 @@ cli-table3@^0.6.3: clone-deep@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + 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" @@ -3611,93 +3921,93 @@ clone-deep@^4.0.1: clsx@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== collapse-white-space@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca" + resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz" integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + 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" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.3: version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colorette@^2.0.10: version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combine-promises@^1.1.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.2.0.tgz#5f2e68451862acf85761ded4d9e2af7769c2ca6a" + resolved "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz" integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" comma-separated-tokens@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== +commander@7, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commander@^10.0.0: version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^2.20.0: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -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== - commander@^8.3.0: version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== common-path-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== compressible@~2.0.18: version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.8.1" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" + resolved "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz" integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== dependencies: bytes "3.1.2" @@ -3710,12 +4020,17 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + config-chain@^1.1.11: version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" @@ -3723,7 +4038,7 @@ config-chain@^1.1.11: configstore@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" + resolved "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz" integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== dependencies: dot-prop "^6.0.1" @@ -3734,54 +4049,54 @@ configstore@^6.0.0: connect-history-api-fallback@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consola@^3.2.3: version "3.4.2" - resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" + resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz" integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== content-disposition@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== 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" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.7.1: version "0.7.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== copy-text-to-clipboard@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b" + resolved "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz" integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q== copy-webpack-plugin@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== dependencies: fast-glob "^3.2.11" @@ -3793,29 +4108,43 @@ copy-webpack-plugin@^11.0.0: core-js-compat@^3.43.0: version "3.44.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.44.0.tgz#62b9165b97e4cbdb8bca16b14818e67428b4a0f8" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz" integrity sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA== dependencies: browserslist "^4.25.1" core-js-pure@^3.43.0: version "3.44.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.44.0.tgz#6e9d6c128c8b967c5eac4f181c2b654d85c28090" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.44.0.tgz" integrity sha512-gvMQAGB4dfVUxpYD0k3Fq8J+n5bB6Ytl15lqlZrOIXFzxOhtPaObfkQGHtMRdyjIf7z2IeNULwi1jEwyS+ltKQ== core-js@^3.31.1: version "3.44.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.44.0.tgz#db4fd4fa07933c1d6898c8b112a1119a9336e959" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz" integrity sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cose-base@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz" + integrity sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg== + dependencies: + layout-base "^1.0.0" + +cose-base@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz" + integrity sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g== + dependencies: + layout-base "^2.0.0" + cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: import-fresh "^3.3.0" @@ -3825,7 +4154,7 @@ cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: cross-spawn@^7.0.3: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -3834,26 +4163,26 @@ cross-spawn@^7.0.3: crypto-random-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== dependencies: type-fest "^1.0.1" css-blank-pseudo@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz#32020bff20a209a53ad71b8675852b49e8d57e46" + resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz" integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag== dependencies: postcss-selector-parser "^7.0.0" css-declaration-sorter@^7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz" integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== css-has-pseudo@^7.0.2: version "7.0.2" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz#fb42e8de7371f2896961e1f6308f13c2c7019b72" + resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz" integrity sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ== dependencies: "@csstools/selector-specificity" "^5.0.0" @@ -3862,7 +4191,7 @@ css-has-pseudo@^7.0.2: css-loader@^6.11.0: version "6.11.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz" integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== dependencies: icss-utils "^5.1.0" @@ -3876,7 +4205,7 @@ css-loader@^6.11.0: css-minimizer-webpack-plugin@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" + resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz" integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== dependencies: "@jridgewell/trace-mapping" "^0.3.18" @@ -3888,12 +4217,12 @@ css-minimizer-webpack-plugin@^5.0.1: css-prefers-color-scheme@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz#ba001b99b8105b8896ca26fc38309ddb2278bd3c" + resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz" integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ== css-select@^4.1.3: version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" @@ -3904,7 +4233,7 @@ css-select@^4.1.3: css-select@^5.1.0: version "5.2.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz" integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== dependencies: boolbase "^1.0.0" @@ -3915,7 +4244,7 @@ css-select@^5.1.0: css-tree@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz" integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== dependencies: mdn-data "2.0.30" @@ -3923,7 +4252,7 @@ css-tree@^2.3.1: css-tree@~2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz" integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== dependencies: mdn-data "2.0.28" @@ -3931,22 +4260,22 @@ css-tree@~2.2.0: css-what@^6.0.1, css-what@^6.1.0: version "6.2.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz" integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== cssdb@^8.3.0: version "8.3.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.3.1.tgz#0ac96395b7092ffee14563e948cf43c2019b051e" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-8.3.1.tgz" integrity sha512-XnDRQMXucLueX92yDe0LPKupXetWoFOgawr4O4X41l5TltgK2NVbJJVDnnOywDYfW1sTJ28AcXGKOqdRKwCcmQ== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssnano-preset-advanced@^6.1.2: version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz#82b090872b8f98c471f681d541c735acf8b94d3f" + resolved "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz" integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ== dependencies: autoprefixer "^10.4.19" @@ -3959,7 +4288,7 @@ cssnano-preset-advanced@^6.1.2: cssnano-preset-default@^6.1.2: version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz" integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== dependencies: browserslist "^4.23.0" @@ -3995,12 +4324,12 @@ cssnano-preset-default@^6.1.2: cssnano-utils@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" + resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz" integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== cssnano@^6.0.1, cssnano@^6.1.2: version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz" integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== dependencies: cssnano-preset-default "^6.1.2" @@ -4008,74 +4337,377 @@ cssnano@^6.0.1, cssnano@^6.1.2: csso@^5.0.5: version "5.0.5" - resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + resolved "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz" integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== dependencies: css-tree "~2.2.0" -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== +csstype@^3.2.2: + version "3.2.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + +cytoscape-cose-bilkent@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz" + integrity sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ== + dependencies: + cose-base "^1.0.0" + +cytoscape-fcose@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz" + integrity sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ== + dependencies: + cose-base "^2.2.0" + +cytoscape@^3.33.1: + version "3.33.2" + resolved "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.2.tgz" + integrity sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw== + +"d3-array@1 - 2": + version "2.12.1" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz" + integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ== + dependencies: + internmap "^1.0.0" + +"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: + version "3.2.4" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== + dependencies: + internmap "1 - 2" + +d3-axis@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz" + integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== + +d3-brush@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz" + integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "3" + d3-transition "3" + +d3-chord@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz" + integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g== + dependencies: + d3-path "1 - 3" + +"d3-color@1 - 3", d3-color@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz" + integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== + +d3-contour@4: + version "4.0.2" + resolved "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz" + integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA== + dependencies: + d3-array "^3.2.0" + +d3-delaunay@6: + version "6.0.4" + resolved "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz" + integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== + dependencies: + delaunator "5" + +"d3-dispatch@1 - 3", d3-dispatch@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz" + integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== + +"d3-drag@2 - 3", d3-drag@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz" + integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== + dependencies: + d3-dispatch "1 - 3" + d3-selection "3" + +"d3-dsv@1 - 3", d3-dsv@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== + dependencies: + commander "7" + iconv-lite "0.6" + rw "1" + +"d3-ease@1 - 3", d3-ease@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz" + integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== + +d3-fetch@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz" + integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== + dependencies: + d3-dsv "1 - 3" + +d3-force@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz" + integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== + dependencies: + d3-dispatch "1 - 3" + d3-quadtree "1 - 3" + d3-timer "1 - 3" + +"d3-format@1 - 3", d3-format@3: + version "3.1.2" + resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz" + integrity sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg== + +d3-geo@3: + version "3.1.1" + resolved "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz" + integrity sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q== + dependencies: + d3-array "2.5.0 - 3" + +d3-hierarchy@3: + version "3.1.2" + resolved "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz" + integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== + +"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz" + integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== + dependencies: + d3-color "1 - 3" + +d3-path@1: + version "1.0.9" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + +d3-polygon@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz" + integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== + +"d3-quadtree@1 - 3", d3-quadtree@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz" + integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== + +d3-random@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz" + integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== + +d3-sankey@^0.12.3: + version "0.12.3" + resolved "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz" + integrity sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ== + dependencies: + d3-array "1 - 2" + d3-shape "^1.2.0" + +d3-scale-chromatic@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz" + integrity sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ== + dependencies: + d3-color "1 - 3" + d3-interpolate "1 - 3" + +d3-scale@4: + version "4.0.2" + resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz" + integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== + dependencies: + d3-array "2.10.0 - 3" + d3-format "1 - 3" + d3-interpolate "1.2.0 - 3" + d3-time "2.1.1 - 3" + d3-time-format "2 - 4" + +"d3-selection@2 - 3", d3-selection@3, d3-selection@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz" + integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== + +d3-shape@3: + version "3.2.0" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" + +d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + +"d3-time-format@2 - 4", d3-time-format@4: + version "4.1.0" + resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz" + integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== + dependencies: + d3-time "1 - 3" + +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz" + integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== + dependencies: + d3-array "2 - 3" + +"d3-timer@1 - 3", d3-timer@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== + +"d3-transition@2 - 3", d3-transition@3, d3-transition@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz" + integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== + dependencies: + d3-color "1 - 3" + d3-dispatch "1 - 3" + d3-ease "1 - 3" + d3-interpolate "1 - 3" + d3-timer "1 - 3" + +d3-zoom@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz" + integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "2 - 3" + d3-transition "2 - 3" + +d3@^7.9.0: + version "7.9.0" + resolved "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz" + integrity sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA== + dependencies: + d3-array "3" + d3-axis "3" + d3-brush "3" + d3-chord "3" + d3-color "3" + d3-contour "4" + d3-delaunay "6" + d3-dispatch "3" + d3-drag "3" + d3-dsv "3" + d3-ease "3" + d3-fetch "3" + d3-force "3" + d3-format "3" + d3-geo "3" + d3-hierarchy "3" + d3-interpolate "3" + d3-path "3" + d3-polygon "3" + d3-quadtree "3" + d3-random "3" + d3-scale "4" + d3-scale-chromatic "3" + d3-selection "3" + d3-shape "3" + d3-time "3" + d3-time-format "4" + d3-timer "3" + d3-transition "3" + d3-zoom "3" + +dagre-d3-es@7.0.14: + version "7.0.14" + resolved "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz" + integrity sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg== + dependencies: + d3 "^7.9.0" + lodash-es "^4.17.21" + +dayjs@^1.11.19: + version "1.11.20" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz" + integrity sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ== debounce@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== debug@2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" decode-named-character-reference@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" + resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz" integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== dependencies: character-entities "^2.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" 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" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-gateway@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: execa "^5.0.0" defer-to-connect@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -4084,56 +4716,63 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: 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" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delaunator@5: + version "5.1.0" + resolved "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz" + integrity sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ== + dependencies: + robust-predicates "^3.0.2" + delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== dequal@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz" integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== detect-node@^2.0.4: version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== detect-port@^1.5.1: version "1.6.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67" + resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz" integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== dependencies: address "^1.0.1" @@ -4141,28 +4780,28 @@ detect-port@^1.5.1: devlop@^1.0.0, devlop@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz" integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== dependencies: dequal "^2.0.0" dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dns-packet@^5.2.2: version "5.6.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" docusaurus-theme-search-typesense@^0.25.0: version "0.25.0" - resolved "https://registry.yarnpkg.com/docusaurus-theme-search-typesense/-/docusaurus-theme-search-typesense-0.25.0.tgz#bcac8a34d95c8bdf03ff46a1e2272405b97d9be2" + resolved "https://registry.npmjs.org/docusaurus-theme-search-typesense/-/docusaurus-theme-search-typesense-0.25.0.tgz" integrity sha512-1+yJcQ+5faPZNKNH9wzk5ixrOhEeCY08Z/cPEBvv4W1AZMYK9jQnzHpFnUbVElRTbA4KrOpg6TD1ProLECuqrA== dependencies: "@docusaurus/core" "~3.8.0" @@ -4184,14 +4823,14 @@ docusaurus-theme-search-typesense@^0.25.0: dom-converter@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" @@ -4200,7 +4839,7 @@ dom-serializer@^1.0.1: dom-serializer@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== dependencies: domelementtype "^2.3.0" @@ -4209,26 +4848,33 @@ dom-serializer@^2.0.0: domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" +dompurify@^3.3.1: + version "3.4.1" + resolved "https://registry.npmjs.org/dompurify/-/dompurify-3.4.1.tgz" + integrity sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw== + optionalDependencies: + "@types/trusted-types" "^2.0.7" + domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -4237,7 +4883,7 @@ domutils@^2.5.2, domutils@^2.8.0: domutils@^3.0.1: version "3.2.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz" integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== dependencies: dom-serializer "^2.0.0" @@ -4246,7 +4892,7 @@ domutils@^3.0.1: dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" @@ -4254,14 +4900,14 @@ dot-case@^3.0.4: dot-prop@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== dependencies: is-obj "^2.0.0" dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + 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" @@ -4270,62 +4916,62 @@ dunder-proto@^1.0.1: duplexer@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" 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" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.5.173: version "1.5.192" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.192.tgz#6dfc57a41846a57b18f9c0121821a6df1e165cc1" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.192.tgz" integrity sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 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" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== emojilib@^2.4.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" + resolved "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz" integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== emojis-list@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== emoticon@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e" + resolved "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz" integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" 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" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== enhanced-resolve@^5.17.2: version "5.18.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz#7903c5b32ffd4b2143eeb4b92472bd68effd5464" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz" integrity sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ== dependencies: graceful-fs "^4.2.4" @@ -4333,51 +4979,51 @@ enhanced-resolve@^5.17.2: entities@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== entities@^4.2.0, entities@^4.4.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== entities@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + resolved "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz" integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + 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" es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^1.2.1: version "1.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz" integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + 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" es-set-tostringtag@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + 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" @@ -4387,7 +5033,7 @@ es-set-tostringtag@^2.1.0: esast-util-from-estree@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad" + resolved "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz" integrity sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ== dependencies: "@types/estree-jsx" "^1.0.0" @@ -4397,7 +5043,7 @@ esast-util-from-estree@^2.0.0: esast-util-from-js@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz#5147bec34cc9da44accf52f87f239a40ac3e8225" + resolved "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz" integrity sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw== dependencies: "@types/estree-jsx" "^1.0.0" @@ -4407,37 +5053,37 @@ esast-util-from-js@^2.0.0: escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-goat@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" + resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz" integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" 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" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 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" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== eslint-scope@5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -4445,36 +5091,36 @@ eslint-scope@5.1.1: esprima@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-util-attach-comments@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d" + resolved "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz" integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== dependencies: "@types/estree" "^1.0.0" estree-util-build-jsx@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1" + resolved "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz" integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== dependencies: "@types/estree-jsx" "^1.0.0" @@ -4484,12 +5130,12 @@ estree-util-build-jsx@^3.0.0: estree-util-is-identifier-name@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + resolved "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz" integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== estree-util-scope@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/estree-util-scope/-/estree-util-scope-1.0.0.tgz#9cbdfc77f5cb51e3d9ed4ad9c4adbff22d43e585" + resolved "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz" integrity sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ== dependencies: "@types/estree" "^1.0.0" @@ -4497,7 +5143,7 @@ estree-util-scope@^1.0.0: estree-util-to-js@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17" + resolved "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz" integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== dependencies: "@types/estree-jsx" "^1.0.0" @@ -4506,14 +5152,14 @@ estree-util-to-js@^2.0.0: estree-util-value-to-estree@^3.0.1: version "3.4.0" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz#827122e40c3a756d3c4cf5d5d296fa06026a1a4f" + resolved "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz" integrity sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ== dependencies: "@types/estree" "^1.0.0" estree-util-visit@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" + resolved "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz" integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== dependencies: "@types/estree-jsx" "^1.0.0" @@ -4521,29 +5167,29 @@ estree-util-visit@^2.0.0: estree-walker@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== dependencies: "@types/estree" "^1.0.0" esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== eta@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" + resolved "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz" integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eval@^0.1.8: version "0.1.8" - resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + resolved "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz" integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== dependencies: "@types/node" "*" @@ -4551,17 +5197,17 @@ eval@^0.1.8: eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.2.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== execa@5.1.1, execa@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -4576,7 +5222,7 @@ execa@5.1.1, execa@^5.0.0: express@^4.17.3: version "4.21.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" @@ -4613,24 +5259,24 @@ express@^4.17.3: extend-shallow@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 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" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -4641,52 +5287,52 @@ fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 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" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz" integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== fastq@^1.6.0: version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" fault@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + resolved "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz" integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== dependencies: format "^0.2.0" faye-websocket@^0.11.3: version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" feed@^4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + resolved "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz" integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== dependencies: xml-js "^1.6.11" figures@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-loader@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== dependencies: loader-utils "^2.0.0" @@ -4694,14 +5340,14 @@ file-loader@^6.2.0: fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + 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" finalhandler@1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" @@ -4714,7 +5360,7 @@ finalhandler@1.3.1: find-cache-dir@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz" integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== dependencies: common-path-prefix "^3.0.0" @@ -4722,7 +5368,7 @@ find-cache-dir@^4.0.0: find-up@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== dependencies: locate-path "^7.1.0" @@ -4730,22 +5376,22 @@ find-up@^6.3.0: flat@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== follow-redirects@^1.0.0, follow-redirects@^1.15.6: version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== form-data-encoder@^2.1.2: version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== form-data@^4.0.4: version "4.0.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz" integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== dependencies: asynckit "^0.4.0" @@ -4756,27 +5402,27 @@ form-data@^4.0.4: format@^0.2.0: version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fraction.js@^4.3.7: version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-extra@^11.1.1, fs-extra@^11.2.0: version "11.3.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz" integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: graceful-fs "^4.2.0" @@ -4785,32 +5431,32 @@ fs-extra@^11.1.1, fs-extra@^11.2.0: fs-monkey@^1.0.4: version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.1.0.tgz#632aa15a20e71828ed56b24303363fb1414e5997" + resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz" integrity sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" 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" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" 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" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + 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" @@ -4826,12 +5472,12 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@ get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -4839,36 +5485,36 @@ get-proto@^1.0.1: get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== github-slugger@^1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz" integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.1: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + 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" glob-to-regexp@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -4880,14 +5526,14 @@ glob@^7.1.3: global-dirs@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== dependencies: ini "2.0.0" globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -4899,7 +5545,7 @@ globby@^11.1.0: globby@^13.1.1: version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: dir-glob "^3.0.1" @@ -4910,12 +5556,12 @@ globby@^13.1.1: gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== got@^12.1.0: version "12.6.1" - resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" + resolved "https://registry.npmjs.org/got/-/got-12.6.1.tgz" integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== dependencies: "@sindresorhus/is" "^5.2.0" @@ -4932,17 +5578,17 @@ got@^12.1.0: graceful-fs@4.2.10: version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== gray-matter@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== dependencies: js-yaml "^3.13.1" @@ -4952,55 +5598,60 @@ gray-matter@^4.0.3: gzip-size@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== dependencies: duplexer "^0.1.2" +hachure-fill@^0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz" + integrity sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg== + handle-thing@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" has-yarn@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" + resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz" integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== hasown@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" hast-util-from-parse5@^8.0.0: version "8.0.3" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz#830a35022fff28c3fea3697a98c2f4cc6b835a2e" + resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz" integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== dependencies: "@types/hast" "^3.0.0" @@ -5014,14 +5665,14 @@ hast-util-from-parse5@^8.0.0: hast-util-parse-selector@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" + resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz" integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== dependencies: "@types/hast" "^3.0.0" hast-util-raw@^9.0.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e" + resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz" integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== dependencies: "@types/hast" "^3.0.0" @@ -5040,7 +5691,7 @@ hast-util-raw@^9.0.0: hast-util-to-estree@^3.0.0: version "3.1.3" - resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz#e654c1c9374645135695cc0ab9f70b8fcaf733d7" + resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz" integrity sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w== dependencies: "@types/estree" "^1.0.0" @@ -5062,7 +5713,7 @@ hast-util-to-estree@^3.0.0: hast-util-to-jsx-runtime@^2.0.0: version "2.3.6" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz" integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== dependencies: "@types/estree" "^1.0.0" @@ -5083,7 +5734,7 @@ hast-util-to-jsx-runtime@^2.0.0: hast-util-to-parse5@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" + resolved "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz" integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== dependencies: "@types/hast" "^3.0.0" @@ -5096,14 +5747,14 @@ hast-util-to-parse5@^8.0.0: hast-util-whitespace@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz" integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== dependencies: "@types/hast" "^3.0.0" hastscript@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" + resolved "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz" integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== dependencies: "@types/hast" "^3.0.0" @@ -5114,12 +5765,12 @@ hastscript@^9.0.0: he@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== history@^4.9.0: version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz" integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== dependencies: "@babel/runtime" "^7.1.2" @@ -5131,14 +5782,14 @@ history@^4.9.0: hoist-non-react-statics@^3.1.0: version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" hpack.js@^2.1.6: version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" @@ -5148,17 +5799,17 @@ hpack.js@^2.1.6: html-entities@^2.3.2: version "2.6.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz" integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== html-escaper@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-minifier-terser@^6.0.2: version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== dependencies: camel-case "^4.1.2" @@ -5171,7 +5822,7 @@ html-minifier-terser@^6.0.2: html-minifier-terser@^7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" + resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz" integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== dependencies: camel-case "^4.1.2" @@ -5184,17 +5835,17 @@ html-minifier-terser@^7.2.0: html-tags@^3.3.1: version "3.3.1" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== html-void-elements@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz" integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== html-webpack-plugin@^5.6.0: version "5.6.3" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685" + resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz" integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== dependencies: "@types/html-minifier-terser" "^6.0.0" @@ -5205,7 +5856,7 @@ html-webpack-plugin@^5.6.0: htmlparser2@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" @@ -5215,7 +5866,7 @@ htmlparser2@^6.1.0: htmlparser2@^8.0.1: version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz" integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== dependencies: domelementtype "^2.3.0" @@ -5225,17 +5876,17 @@ htmlparser2@^8.0.1: http-cache-semantics@^4.1.1: version "4.2.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz" integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== http-deceiver@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -5246,7 +5897,7 @@ http-errors@2.0.0: http-errors@~1.6.2: version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" @@ -5256,12 +5907,12 @@ http-errors@~1.6.2: http-parser-js@>=0.5.1: version "0.5.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.10.tgz#b3277bd6d7ed5588e20ea73bf724fcbe44609075" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz" integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA== http-proxy-middleware@^2.0.3: version "2.0.9" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz" integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== dependencies: "@types/http-proxy" "^1.17.8" @@ -5272,7 +5923,7 @@ http-proxy-middleware@^2.0.3: http-proxy@^1.18.1: version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" @@ -5281,7 +5932,7 @@ http-proxy@^1.18.1: http2-wrapper@^2.1.10: version "2.2.1" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz" integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== dependencies: quick-lru "^5.1.1" @@ -5289,34 +5940,41 @@ http2-wrapper@^2.1.10: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@0.6: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ignore@^5.2.0, ignore@^5.2.4: version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== image-size@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.2.tgz#84a7b43704db5736f364bf0d1b029821299b4bdc" + resolved "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz" integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w== import-fresh@^3.3.0: version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" @@ -5324,27 +5982,27 @@ import-fresh@^3.3.0: import-lazy@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infima@0.2.0-alpha.45: version "0.2.0-alpha.45" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466" + resolved "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz" integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -5352,54 +6010,64 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== ini@^1.3.4, ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inline-style-parser@0.2.4: version "0.2.4" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" + resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz" integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== + +internmap@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz" + integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== + invariant@^2.2.4: version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz" integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== is-alphabetical@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== is-alphanumerical@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz" integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== dependencies: is-alphabetical "^2.0.0" @@ -5407,70 +6075,70 @@ is-alphanumerical@^2.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" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + 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" is-ci@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: ci-info "^3.2.0" 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" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" is-decimal@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== 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" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 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" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-hexadecimal@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz" integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== is-installed-globally@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== dependencies: global-dirs "^3.0.0" @@ -5478,96 +6146,96 @@ is-installed-globally@^0.4.0: is-npm@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" + resolved "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz" integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-inside@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== is-plain-obj@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== 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" + 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" is-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-typedarray@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" is-yarn-global@^0.4.0: version "0.4.1" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb" + resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz" integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== isarray@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== jest-util@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + 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" @@ -5579,7 +6247,7 @@ jest-util@^29.7.0: jest-worker@^27.4.5: version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" @@ -5588,7 +6256,7 @@ jest-worker@^27.4.5: jest-worker@^29.4.3: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" @@ -5598,12 +6266,12 @@ jest-worker@^29.4.3: jiti@^1.20.0: version "1.21.7" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz" integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== joi@^17.9.2: version "17.13.3" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" + resolved "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz" integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== dependencies: "@hapi/hoek" "^9.3.0" @@ -5614,12 +6282,12 @@ joi@^17.9.2: "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" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 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" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -5627,95 +6295,129 @@ js-yaml@^3.13.1: js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsesc@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== jsesc@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz" integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 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" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json5@^2.1.2, json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + 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" +katex@^0.16.25: + version "0.16.45" + resolved "https://registry.npmjs.org/katex/-/katex-0.16.45.tgz" + integrity sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA== + dependencies: + commander "^8.3.0" + keyv@^4.5.3: version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" +khroma@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz" + integrity sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw== + kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" 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" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +langium@^4.0.0: + version "4.2.2" + resolved "https://registry.npmjs.org/langium/-/langium-4.2.2.tgz" + integrity sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ== + dependencies: + "@chevrotain/regexp-to-ast" "~12.0.0" + chevrotain "~12.0.0" + chevrotain-allstar "~0.4.1" + vscode-languageserver "~9.0.1" + vscode-languageserver-textdocument "~1.0.11" + vscode-uri "~3.1.0" + latest-version@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" + resolved "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz" integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== dependencies: package-json "^8.1.0" launch-editor@^2.6.0: version "2.11.0" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.11.0.tgz#1ec15b3ed249b04763453661a9785428b38d5b33" + resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.0.tgz" integrity sha512-R/PIF14L6e2eHkhvQPu7jDRCr0msfCYCxbYiLgkkAGi0dVPWuM+RrsPu0a5dpuNe0KWGL3jpAkOlv53xGfPheQ== dependencies: picocolors "^1.1.1" shell-quote "^1.8.3" +layout-base@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz" + integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg== + +layout-base@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz" + integrity sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg== + leven@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== lightningcss-darwin-arm64@1.30.1: version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz#3d47ce5e221b9567c703950edf2529ca4a3700ae" + resolved "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz" integrity sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ== lightningcss-darwin-x64@1.30.1: @@ -5765,7 +6467,7 @@ lightningcss-win32-x64-msvc@1.30.1: lightningcss@^1.27.0: version "1.30.1" - resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.1.tgz#78e979c2d595bfcb90d2a8c0eb632fe6c5bfed5d" + resolved "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz" integrity sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg== dependencies: detect-libc "^2.0.3" @@ -5783,22 +6485,22 @@ lightningcss@^1.27.0: lilconfig@^3.1.1: version "3.1.3" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== 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" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== loader-runner@^4.2.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" @@ -5807,92 +6509,102 @@ loader-utils@^2.0.0: locate-path@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: p-locate "^6.0.0" +lodash-es@^4.17.21, lodash-es@^4.17.23: + version "4.18.1" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz" + integrity sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A== + lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.memoize@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.uniq@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loglevel@^1.8.1: version "1.9.2" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz" integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg== longest-streak@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz" integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + 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" lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lowercase-keys@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" markdown-extensions@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4" + resolved "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz" integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== markdown-table@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz" integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== dependencies: repeat-string "^1.0.0" markdown-table@^3.0.0: version "3.0.4" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" + resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz" integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== +marked@^16.3.0: + version "16.4.2" + resolved "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz" + integrity sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA== + math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mdast-util-directive@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz#f3656f4aab6ae3767d3c72cfab5e8055572ccba1" + resolved "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz" integrity sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q== dependencies: "@types/mdast" "^4.0.0" @@ -5907,7 +6619,7 @@ mdast-util-directive@^3.0.0: mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" + resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz" integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== dependencies: "@types/mdast" "^4.0.0" @@ -5917,7 +6629,7 @@ mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: mdast-util-from-markdown@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz" integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== dependencies: "@types/mdast" "^4.0.0" @@ -5935,7 +6647,7 @@ mdast-util-from-markdown@^2.0.0: mdast-util-frontmatter@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8" + resolved "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz" integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== dependencies: "@types/mdast" "^4.0.0" @@ -5947,7 +6659,7 @@ mdast-util-frontmatter@^2.0.0: mdast-util-gfm-autolink-literal@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" + resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz" integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== dependencies: "@types/mdast" "^4.0.0" @@ -5958,7 +6670,7 @@ mdast-util-gfm-autolink-literal@^2.0.0: mdast-util-gfm-footnote@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" + resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz" integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== dependencies: "@types/mdast" "^4.0.0" @@ -5969,7 +6681,7 @@ mdast-util-gfm-footnote@^2.0.0: mdast-util-gfm-strikethrough@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + resolved "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz" integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== dependencies: "@types/mdast" "^4.0.0" @@ -5978,7 +6690,7 @@ mdast-util-gfm-strikethrough@^2.0.0: mdast-util-gfm-table@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + resolved "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz" integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== dependencies: "@types/mdast" "^4.0.0" @@ -5989,7 +6701,7 @@ mdast-util-gfm-table@^2.0.0: mdast-util-gfm-task-list-item@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + resolved "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz" integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== dependencies: "@types/mdast" "^4.0.0" @@ -5999,7 +6711,7 @@ mdast-util-gfm-task-list-item@^2.0.0: mdast-util-gfm@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" + resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz" integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== dependencies: mdast-util-from-markdown "^2.0.0" @@ -6012,7 +6724,7 @@ mdast-util-gfm@^3.0.0: mdast-util-mdx-expression@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" + resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz" integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== dependencies: "@types/estree-jsx" "^1.0.0" @@ -6024,7 +6736,7 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-mdx-jsx@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz" integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== dependencies: "@types/estree-jsx" "^1.0.0" @@ -6042,7 +6754,7 @@ mdast-util-mdx-jsx@^3.0.0: mdast-util-mdx@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" + resolved "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz" integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== dependencies: mdast-util-from-markdown "^2.0.0" @@ -6053,7 +6765,7 @@ mdast-util-mdx@^3.0.0: mdast-util-mdxjs-esm@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + resolved "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz" integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== dependencies: "@types/estree-jsx" "^1.0.0" @@ -6065,7 +6777,7 @@ mdast-util-mdxjs-esm@^2.0.0: mdast-util-phrasing@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz" integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== dependencies: "@types/mdast" "^4.0.0" @@ -6073,7 +6785,7 @@ mdast-util-phrasing@^4.0.0: mdast-util-to-hast@^13.0.0: version "13.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz" integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== dependencies: "@types/hast" "^3.0.0" @@ -6088,7 +6800,7 @@ mdast-util-to-hast@^13.0.0: mdast-util-to-markdown@^2.0.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" + resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz" integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== dependencies: "@types/mdast" "^4.0.0" @@ -6103,56 +6815,83 @@ mdast-util-to-markdown@^2.0.0: mdast-util-to-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz" integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== dependencies: "@types/mdast" "^4.0.0" mdn-data@2.0.28: version "2.0.28" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz" integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== mdn-data@2.0.30: version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.4.3: version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + resolved "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz" integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: fs-monkey "^1.0.4" merge-descriptors@1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +mermaid@>=11.6.0: + version "11.14.0" + resolved "https://registry.npmjs.org/mermaid/-/mermaid-11.14.0.tgz" + integrity sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g== + dependencies: + "@braintree/sanitize-url" "^7.1.1" + "@iconify/utils" "^3.0.2" + "@mermaid-js/parser" "^1.1.0" + "@types/d3" "^7.4.3" + "@upsetjs/venn.js" "^2.0.0" + cytoscape "^3.33.1" + cytoscape-cose-bilkent "^4.1.0" + cytoscape-fcose "^2.2.0" + d3 "^7.9.0" + d3-sankey "^0.12.3" + dagre-d3-es "7.0.14" + dayjs "^1.11.19" + dompurify "^3.3.1" + katex "^0.16.25" + khroma "^2.1.0" + lodash-es "^4.17.23" + marked "^16.3.0" + roughjs "^4.6.6" + stylis "^4.3.6" + ts-dedent "^2.2.0" + uuid "^11.1.0" + methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromark-core-commonmark@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz" integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== dependencies: decode-named-character-reference "^1.0.0" @@ -6174,7 +6913,7 @@ micromark-core-commonmark@^2.0.0: micromark-extension-directive@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz#2eb61985d1995a7c1ff7621676a4f32af29409e8" + resolved "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz" integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA== dependencies: devlop "^1.0.0" @@ -6187,7 +6926,7 @@ micromark-extension-directive@^3.0.0: micromark-extension-frontmatter@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a" + resolved "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz" integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== dependencies: fault "^2.0.0" @@ -6197,7 +6936,7 @@ micromark-extension-frontmatter@^2.0.0: micromark-extension-gfm-autolink-literal@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz" integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== dependencies: micromark-util-character "^2.0.0" @@ -6207,7 +6946,7 @@ micromark-extension-gfm-autolink-literal@^2.0.0: micromark-extension-gfm-footnote@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz" integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== dependencies: devlop "^1.0.0" @@ -6221,7 +6960,7 @@ micromark-extension-gfm-footnote@^2.0.0: micromark-extension-gfm-strikethrough@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz" integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== dependencies: devlop "^1.0.0" @@ -6233,7 +6972,7 @@ micromark-extension-gfm-strikethrough@^2.0.0: micromark-extension-gfm-table@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" + resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz" integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== dependencies: devlop "^1.0.0" @@ -6244,14 +6983,14 @@ micromark-extension-gfm-table@^2.0.0: micromark-extension-gfm-tagfilter@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + resolved "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz" integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== dependencies: micromark-util-types "^2.0.0" micromark-extension-gfm-task-list-item@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz" integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== dependencies: devlop "^1.0.0" @@ -6262,7 +7001,7 @@ micromark-extension-gfm-task-list-item@^2.0.0: micromark-extension-gfm@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + resolved "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz" integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== dependencies: micromark-extension-gfm-autolink-literal "^2.0.0" @@ -6276,7 +7015,7 @@ micromark-extension-gfm@^3.0.0: micromark-extension-mdx-expression@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz#43d058d999532fb3041195a3c3c05c46fa84543b" + resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz" integrity sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q== dependencies: "@types/estree" "^1.0.0" @@ -6290,7 +7029,7 @@ micromark-extension-mdx-expression@^3.0.0: micromark-extension-mdx-jsx@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz#ffc98bdb649798902fa9fc5689f67f9c1c902044" + resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz" integrity sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ== dependencies: "@types/estree" "^1.0.0" @@ -6306,14 +7045,14 @@ micromark-extension-mdx-jsx@^3.0.0: micromark-extension-mdx-md@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d" + resolved "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz" integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== dependencies: micromark-util-types "^2.0.0" micromark-extension-mdxjs-esm@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a" + resolved "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz" integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== dependencies: "@types/estree" "^1.0.0" @@ -6328,7 +7067,7 @@ micromark-extension-mdxjs-esm@^3.0.0: micromark-extension-mdxjs@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18" + resolved "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz" integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== dependencies: acorn "^8.0.0" @@ -6342,7 +7081,7 @@ micromark-extension-mdxjs@^3.0.0: micromark-factory-destination@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz" integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== dependencies: micromark-util-character "^2.0.0" @@ -6351,7 +7090,7 @@ micromark-factory-destination@^2.0.0: micromark-factory-label@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz" integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== dependencies: devlop "^1.0.0" @@ -6361,7 +7100,7 @@ micromark-factory-label@^2.0.0: micromark-factory-mdx-expression@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz#bb09988610589c07d1c1e4425285895041b3dfa9" + resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz" integrity sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ== dependencies: "@types/estree" "^1.0.0" @@ -6376,7 +7115,7 @@ micromark-factory-mdx-expression@^2.0.0: micromark-factory-space@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz" integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== dependencies: micromark-util-character "^1.0.0" @@ -6384,7 +7123,7 @@ micromark-factory-space@^1.0.0: micromark-factory-space@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz" integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== dependencies: micromark-util-character "^2.0.0" @@ -6392,7 +7131,7 @@ micromark-factory-space@^2.0.0: micromark-factory-title@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz" integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== dependencies: micromark-factory-space "^2.0.0" @@ -6402,7 +7141,7 @@ micromark-factory-title@^2.0.0: micromark-factory-whitespace@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz" integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== dependencies: micromark-factory-space "^2.0.0" @@ -6412,7 +7151,7 @@ micromark-factory-whitespace@^2.0.0: micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz" integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== dependencies: micromark-util-symbol "^1.0.0" @@ -6420,7 +7159,7 @@ micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: micromark-util-character@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz" integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== dependencies: micromark-util-symbol "^2.0.0" @@ -6428,14 +7167,14 @@ micromark-util-character@^2.0.0: micromark-util-chunked@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz" integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== dependencies: micromark-util-symbol "^2.0.0" micromark-util-classify-character@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz" integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== dependencies: micromark-util-character "^2.0.0" @@ -6444,7 +7183,7 @@ micromark-util-classify-character@^2.0.0: micromark-util-combine-extensions@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz" integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== dependencies: micromark-util-chunked "^2.0.0" @@ -6452,14 +7191,14 @@ micromark-util-combine-extensions@^2.0.0: micromark-util-decode-numeric-character-reference@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz" integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== dependencies: micromark-util-symbol "^2.0.0" micromark-util-decode-string@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz" integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== dependencies: decode-named-character-reference "^1.0.0" @@ -6469,12 +7208,12 @@ micromark-util-decode-string@^2.0.0: micromark-util-encode@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz" integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== micromark-util-events-to-acorn@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz#e7a8a6b55a47e5a06c720d5a1c4abae8c37c98f3" + resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz" integrity sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg== dependencies: "@types/estree" "^1.0.0" @@ -6487,26 +7226,26 @@ micromark-util-events-to-acorn@^2.0.0: micromark-util-html-tag-name@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz" integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== micromark-util-normalize-identifier@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz" integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== dependencies: micromark-util-symbol "^2.0.0" micromark-util-resolve-all@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz" integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== dependencies: micromark-util-types "^2.0.0" micromark-util-sanitize-uri@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz" integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== dependencies: micromark-util-character "^2.0.0" @@ -6515,7 +7254,7 @@ micromark-util-sanitize-uri@^2.0.0: micromark-util-subtokenize@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz" integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== dependencies: devlop "^1.0.0" @@ -6525,27 +7264,27 @@ micromark-util-subtokenize@^2.0.0: micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz" integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== micromark-util-symbol@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz" integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== micromark-util-types@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz" integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== micromark-util-types@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz" integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== micromark@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz" integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== dependencies: "@types/debug" "^4.0.0" @@ -6568,7 +7307,7 @@ micromark@^4.0.0: micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" @@ -6576,56 +7315,56 @@ micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" 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" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== mime-db@~1.33.0: version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== mime-types@2.1.18: version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== dependencies: mime-db "~1.33.0" mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + 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" mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== mimic-response@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz" integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== mini-css-extract-plugin@^2.9.2: version "2.9.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz#966031b468917a5446f4c24a80854b2947503c5b" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz" integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w== dependencies: schema-utils "^4.0.0" @@ -6633,39 +7372,49 @@ mini-css-extract-plugin@^2.9.2: minimalistic-assert@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimatch@3.1.2, minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.0: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +mlly@^1.7.4, mlly@^1.8.0: + version "1.8.2" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz" + integrity sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA== + dependencies: + acorn "^8.16.0" + pathe "^2.0.3" + pkg-types "^1.3.1" + ufo "^1.6.3" + mrmime@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" + resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz" integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.3, ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multicast-dns@^7.2.5: version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: dns-packet "^5.2.2" @@ -6673,27 +7422,27 @@ multicast-dns@^7.2.5: nanoid@^3.3.11: version "3.3.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" 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" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" 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" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz" integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== no-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" @@ -6701,7 +7450,7 @@ no-case@^3.0.4: node-emoji@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz" integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== dependencies: "@sindresorhus/is" "^4.6.0" @@ -6711,51 +7460,51 @@ node-emoji@^2.1.0: node-forge@^1: version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-releases@^2.0.19: version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^8.0.0: version "8.0.2" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.2.tgz#3b343a42f837e4dae2b01917c04e8de3782e9170" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.2.tgz" integrity sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + 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" nprogress@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + resolved "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz" integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" null-loader@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" + resolved "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz" integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== dependencies: loader-utils "^2.0.0" @@ -6763,22 +7512,22 @@ null-loader@^4.0.1: object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.3: version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.0: version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz" integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: call-bind "^1.0.8" @@ -6790,38 +7539,38 @@ object.assign@^4.1.0: obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + 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" on-headers@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz" integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" open@^8.0.9, open@^8.4.0: version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + 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" @@ -6830,43 +7579,43 @@ open@^8.0.9, open@^8.4.0: opener@^1.5.2: version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== p-cancelable@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: yocto-queue "^1.0.0" p-locate@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: p-limit "^4.0.0" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + 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" p-queue@^6.6.2: version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: eventemitter3 "^4.0.4" @@ -6874,7 +7623,7 @@ p-queue@^6.6.2: p-retry@^4.5.0: version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: "@types/retry" "0.12.0" @@ -6882,14 +7631,14 @@ p-retry@^4.5.0: p-timeout@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" package-json@^8.1.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" + resolved "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz" integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== dependencies: got "^12.1.0" @@ -6897,9 +7646,14 @@ package-json@^8.1.0: registry-url "^6.0.0" semver "^7.3.7" +package-manager-detector@^1.3.0: + version "1.6.0" + resolved "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz" + integrity sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA== + param-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -6907,14 +7661,14 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-entities@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" + resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz" integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== dependencies: "@types/unist" "^2.0.0" @@ -6927,7 +7681,7 @@ parse-entities@^4.0.0: parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -6937,12 +7691,12 @@ parse-json@^5.2.0: parse-numeric-range@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + resolved "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz" integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== parse5-htmlparser2-tree-adapter@^7.0.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz" integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== dependencies: domhandler "^5.0.3" @@ -6950,98 +7704,130 @@ parse5-htmlparser2-tree-adapter@^7.0.0: parse5@^7.0.0: version "7.3.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz" integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== dependencies: entities "^6.0.0" parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" tslib "^2.0.3" +path-data-parser@0.1.0, path-data-parser@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz" + integrity sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w== + path-exists@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== 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" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.12: version "0.1.12" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== path-to-regexp@3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz" integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== path-to-regexp@^1.7.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz" integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== dependencies: isarray "0.0.1" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^2.0.1, pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pkg-dir@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz" integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== dependencies: find-up "^6.3.0" +pkg-types@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz" + integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + dependencies: + confbox "^0.1.8" + mlly "^1.7.4" + pathe "^2.0.1" + +points-on-curve@0.2.0, points-on-curve@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz" + integrity sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A== + +points-on-path@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz" + integrity sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g== + dependencies: + path-data-parser "0.1.0" + points-on-curve "0.2.0" + postcss-attribute-case-insensitive@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" + resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz" integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw== dependencies: postcss-selector-parser "^7.0.0" postcss-calc@^9.0.1: version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz" integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== dependencies: postcss-selector-parser "^6.0.11" @@ -7049,14 +7835,14 @@ postcss-calc@^9.0.1: postcss-clamp@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + resolved "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz" integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== dependencies: postcss-value-parser "^4.2.0" postcss-color-functional-notation@^7.0.10: version "7.0.10" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz#f1e9c3e4371889dcdfeabfa8515464fd8338cedc" + resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz" integrity sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -7067,7 +7853,7 @@ postcss-color-functional-notation@^7.0.10: postcss-color-hex-alpha@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz#5dd3eba1f8facb4ea306cba6e3f7712e876b0c76" + resolved "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz" integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w== dependencies: "@csstools/utilities" "^2.0.0" @@ -7075,7 +7861,7 @@ postcss-color-hex-alpha@^10.0.0: postcss-color-rebeccapurple@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz#5ada28406ac47e0796dff4056b0a9d5a6ecead98" + resolved "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz" integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ== dependencies: "@csstools/utilities" "^2.0.0" @@ -7083,7 +7869,7 @@ postcss-color-rebeccapurple@^10.0.0: postcss-colormin@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz" integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== dependencies: browserslist "^4.23.0" @@ -7093,7 +7879,7 @@ postcss-colormin@^6.1.0: postcss-convert-values@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz" integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== dependencies: browserslist "^4.23.0" @@ -7101,7 +7887,7 @@ postcss-convert-values@^6.1.0: postcss-custom-media@^11.0.6: version "11.0.6" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz#6b450e5bfa209efb736830066682e6567bd04967" + resolved "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz" integrity sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw== dependencies: "@csstools/cascade-layer-name-parser" "^2.0.5" @@ -7111,7 +7897,7 @@ postcss-custom-media@^11.0.6: postcss-custom-properties@^14.0.6: version "14.0.6" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz#1af73a650bf115ba052cf915287c9982825fc90e" + resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz" integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ== dependencies: "@csstools/cascade-layer-name-parser" "^2.0.5" @@ -7122,7 +7908,7 @@ postcss-custom-properties@^14.0.6: postcss-custom-selectors@^8.0.5: version "8.0.5" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz#9448ed37a12271d7ab6cb364b6f76a46a4a323e8" + resolved "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz" integrity sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg== dependencies: "@csstools/cascade-layer-name-parser" "^2.0.5" @@ -7132,41 +7918,41 @@ postcss-custom-selectors@^8.0.5: postcss-dir-pseudo-class@^9.0.1: version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz#80d9e842c9ae9d29f6bf5fd3cf9972891d6cc0ca" + resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz" integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA== dependencies: postcss-selector-parser "^7.0.0" postcss-discard-comments@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz" integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== postcss-discard-duplicates@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz" integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== postcss-discard-empty@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz" integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== postcss-discard-overridden@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz" integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== postcss-discard-unused@^6.0.5: version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz#c1b0e8c032c6054c3fbd22aaddba5b248136f338" + resolved "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz" integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA== dependencies: postcss-selector-parser "^6.0.16" postcss-double-position-gradients@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz#185f8eab2db9cf4e34be69b5706c905895bb52ae" + resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz" integrity sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q== dependencies: "@csstools/postcss-progressive-custom-properties" "^4.1.0" @@ -7175,31 +7961,31 @@ postcss-double-position-gradients@^6.0.2: postcss-focus-visible@^10.0.1: version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz#1f7904904368a2d1180b220595d77b6f8a957868" + resolved "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz" integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA== dependencies: postcss-selector-parser "^7.0.0" postcss-focus-within@^9.0.1: version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz#ac01ce80d3f2e8b2b3eac4ff84f8e15cd0057bc7" + resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz" integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw== dependencies: postcss-selector-parser "^7.0.0" postcss-font-variant@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz" integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== postcss-gap-properties@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz#d5ff0bdf923c06686499ed2b12e125fe64054fed" + resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz" integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw== postcss-image-set-function@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz#538e94e16716be47f9df0573b56bbaca86e1da53" + resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz" integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA== dependencies: "@csstools/utilities" "^2.0.0" @@ -7207,7 +7993,7 @@ postcss-image-set-function@^7.0.0: postcss-lab-function@^7.0.10: version "7.0.10" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz#0537bd7245b935fc133298c8896bcbd160540cae" + resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz" integrity sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ== dependencies: "@csstools/css-color-parser" "^3.0.10" @@ -7218,7 +8004,7 @@ postcss-lab-function@^7.0.10: postcss-loader@^7.3.4: version "7.3.4" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz" integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== dependencies: cosmiconfig "^8.3.5" @@ -7227,14 +8013,14 @@ postcss-loader@^7.3.4: postcss-logical@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.1.0.tgz#4092b16b49e3ecda70c4d8945257da403d167228" + resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz" integrity sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA== dependencies: postcss-value-parser "^4.2.0" postcss-merge-idents@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz#7b9c31c7bc823c94bec50f297f04e3c2b838ea65" + resolved "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz" integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g== dependencies: cssnano-utils "^4.0.2" @@ -7242,7 +8028,7 @@ postcss-merge-idents@^6.0.3: postcss-merge-longhand@^6.0.5: version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz" integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== dependencies: postcss-value-parser "^4.2.0" @@ -7250,7 +8036,7 @@ postcss-merge-longhand@^6.0.5: postcss-merge-rules@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz" integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== dependencies: browserslist "^4.23.0" @@ -7260,14 +8046,14 @@ postcss-merge-rules@^6.1.1: postcss-minify-font-values@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz" integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== dependencies: postcss-value-parser "^4.2.0" postcss-minify-gradients@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz" integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== dependencies: colord "^2.9.3" @@ -7276,7 +8062,7 @@ postcss-minify-gradients@^6.0.3: postcss-minify-params@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz" integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== dependencies: browserslist "^4.23.0" @@ -7285,19 +8071,19 @@ postcss-minify-params@^6.1.0: postcss-minify-selectors@^6.0.4: version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz" integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== dependencies: postcss-selector-parser "^6.0.16" postcss-modules-extract-imports@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz" integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== postcss-modules-local-by-default@^4.0.5: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz" integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== dependencies: icss-utils "^5.0.0" @@ -7306,21 +8092,21 @@ postcss-modules-local-by-default@^4.0.5: postcss-modules-scope@^3.2.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz" integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== dependencies: postcss-selector-parser "^7.0.0" postcss-modules-values@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: icss-utils "^5.0.0" postcss-nesting@^13.0.2: version "13.0.2" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e" + resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz" integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== dependencies: "@csstools/selector-resolve-nested" "^3.1.0" @@ -7329,47 +8115,47 @@ postcss-nesting@^13.0.2: postcss-normalize-charset@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz" integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== postcss-normalize-display-values@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz" integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-positions@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz" integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-repeat-style@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz" integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-string@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz" integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-timing-functions@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz" integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-unicode@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz" integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== dependencies: browserslist "^4.23.0" @@ -7377,26 +8163,26 @@ postcss-normalize-unicode@^6.1.0: postcss-normalize-url@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz" integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-whitespace@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz" integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== dependencies: postcss-value-parser "^4.2.0" postcss-opacity-percentage@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz#0b0db5ed5db5670e067044b8030b89c216e1eb0a" + resolved "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz" integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ== postcss-ordered-values@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz" integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== dependencies: cssnano-utils "^4.0.2" @@ -7404,26 +8190,26 @@ postcss-ordered-values@^6.0.2: postcss-overflow-shorthand@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz#f5252b4a2ee16c68cd8a9029edb5370c4a9808af" + resolved "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz" integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q== dependencies: postcss-value-parser "^4.2.0" postcss-page-break@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz" integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== postcss-place@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-10.0.0.tgz#ba36ee4786ca401377ced17a39d9050ed772e5a9" + resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz" integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw== dependencies: postcss-value-parser "^4.2.0" postcss-preset-env@^10.2.1: version "10.2.4" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.2.4.tgz#17d386b5a86b136dfbca89b52ef03a95ad9e32fa" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.4.tgz" integrity sha512-q+lXgqmTMdB0Ty+EQ31SuodhdfZetUlwCA/F0zRcd/XdxjzI+Rl2JhZNz5US2n/7t9ePsvuhCnEN4Bmu86zXlA== dependencies: "@csstools/postcss-cascade-layers" "^5.0.2" @@ -7493,21 +8279,21 @@ postcss-preset-env@^10.2.1: postcss-pseudo-class-any-link@^10.0.1: version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz#06455431171bf44b84d79ebaeee9fd1c05946544" + resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz" integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q== dependencies: postcss-selector-parser "^7.0.0" postcss-reduce-idents@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz#b0d9c84316d2a547714ebab523ec7d13704cd486" + resolved "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz" integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA== dependencies: postcss-value-parser "^4.2.0" postcss-reduce-initial@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz" integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== dependencies: browserslist "^4.23.0" @@ -7515,26 +8301,26 @@ postcss-reduce-initial@^6.1.0: postcss-reduce-transforms@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz" integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== dependencies: postcss-value-parser "^4.2.0" postcss-replace-overflow-wrap@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + resolved "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz" integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== postcss-selector-not@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz#f2df9c6ac9f95e9fe4416ca41a957eda16130172" + resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz" integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA== dependencies: postcss-selector-parser "^7.0.0" postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + 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" @@ -7542,7 +8328,7 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: postcss-selector-parser@^7.0.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz" integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== dependencies: cssesc "^3.0.0" @@ -7550,14 +8336,14 @@ postcss-selector-parser@^7.0.0: postcss-sort-media-queries@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz#4556b3f982ef27d3bac526b99b6c0d3359a6cf97" + resolved "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz" integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA== dependencies: sort-css-media-queries "2.2.0" postcss-svgo@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz" integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== dependencies: postcss-value-parser "^4.2.0" @@ -7565,24 +8351,24 @@ postcss-svgo@^6.0.3: postcss-unique-selectors@^6.0.4: version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz" integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== dependencies: postcss-selector-parser "^6.0.16" postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss-zindex@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1" + resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz" integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.5.4: version "8.5.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz" integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== dependencies: nanoid "^3.3.11" @@ -7591,7 +8377,7 @@ postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.5.4: pretty-error@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== dependencies: lodash "^4.17.20" @@ -7599,12 +8385,12 @@ pretty-error@^4.0.0: pretty-time@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + resolved "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== prism-react-renderer@^2.3.0, prism-react-renderer@^2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz#ac63b7f78e56c8f2b5e76e823a976d5ede77e35f" + resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz" integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig== dependencies: "@types/prismjs" "^1.26.0" @@ -7612,17 +8398,17 @@ prism-react-renderer@^2.3.0, prism-react-renderer@^2.4.1: prismjs@^1.29.0: version "1.30.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" + resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz" integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== prompts@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" @@ -7630,7 +8416,7 @@ prompts@^2.4.2: prop-types@^15.6.2, prop-types@^15.7.2: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -7639,22 +8425,22 @@ prop-types@^15.6.2, prop-types@^15.7.2: property-information@^6.0.0: version "6.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + resolved "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz" integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== property-information@^7.0.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + resolved "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz" integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -7662,58 +8448,58 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== punycode@^2.1.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pupa@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" + resolved "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz" integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== dependencies: escape-goat "^4.0.0" qs@6.13.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2: version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -7723,7 +8509,7 @@ raw-body@2.5.2: rc@1.2.8: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -7733,19 +8519,19 @@ rc@1.2.8: react-dom@^19.0.0: version "19.1.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.1.tgz#2daa9ff7f3ae384aeb30e76d5ee38c046dc89893" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz" integrity sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw== dependencies: scheduler "^0.26.0" react-fast-compare@^3.2.0: version "3.2.2" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz" integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== "react-helmet-async@npm:@slorber/react-helmet-async@1.3.0": version "1.3.0" - resolved "https://registry.yarnpkg.com/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz#11fbc6094605cf60aa04a28c17e0aab894b4ecff" + resolved "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz" integrity sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A== dependencies: "@babel/runtime" "^7.12.5" @@ -7756,38 +8542,38 @@ react-fast-compare@^3.2.0: react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-json-view-lite@^2.3.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz#0d06696a06aaf4a74e890302b76cf8cddcc45d60" + resolved "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz" integrity sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA== react-loadable-ssr-addon-v5-slorber@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + resolved "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz" integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== dependencies: "@babel/runtime" "^7.10.3" "react-loadable@npm:@docusaurus/react-loadable@6.0.0": version "6.0.0" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4" + resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz" integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== dependencies: "@types/react" "*" react-router-config@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + resolved "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz" integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== dependencies: "@babel/runtime" "^7.1.2" react-router-dom@^5.3.4: version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz" integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== dependencies: "@babel/runtime" "^7.12.13" @@ -7800,7 +8586,7 @@ react-router-dom@^5.3.4: react-router@5.3.4, react-router@^5.3.4: version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== dependencies: "@babel/runtime" "^7.12.13" @@ -7815,12 +8601,12 @@ react-router@5.3.4, react-router@^5.3.4: react@^19.0.0: version "19.1.1" - resolved "https://registry.yarnpkg.com/react/-/react-19.1.1.tgz#06d9149ec5e083a67f9a1e39ce97b06a03b644af" + resolved "https://registry.npmjs.org/react/-/react-19.1.1.tgz" integrity sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ== readable-stream@^2.0.1: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -7833,7 +8619,7 @@ readable-stream@^2.0.1: readable-stream@^3.0.6: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -7842,14 +8628,14 @@ readable-stream@^3.0.6: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" recma-build-jsx@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz#c02f29e047e103d2fab2054954e1761b8ea253c4" + resolved "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz" integrity sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== dependencies: "@types/estree" "^1.0.0" @@ -7858,7 +8644,7 @@ recma-build-jsx@^1.0.0: recma-jsx@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/recma-jsx/-/recma-jsx-1.0.1.tgz#58e718f45e2102ed0bf2fa994f05b70d76801a1a" + resolved "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz" integrity sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w== dependencies: acorn-jsx "^5.0.0" @@ -7869,7 +8655,7 @@ recma-jsx@^1.0.0: recma-parse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-parse/-/recma-parse-1.0.0.tgz#c351e161bb0ab47d86b92a98a9d891f9b6814b52" + resolved "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz" integrity sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ== dependencies: "@types/estree" "^1.0.0" @@ -7879,7 +8665,7 @@ recma-parse@^1.0.0: recma-stringify@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-stringify/-/recma-stringify-1.0.0.tgz#54632030631e0c7546136ff9ef8fde8e7b44f130" + resolved "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz" integrity sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g== dependencies: "@types/estree" "^1.0.0" @@ -7889,19 +8675,19 @@ recma-stringify@^1.0.0: 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" + 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" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regexpu-core@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz" integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: regenerate "^1.4.2" @@ -7913,33 +8699,33 @@ regexpu-core@^6.2.0: registry-auth-token@^5.0.1: version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz" integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== dependencies: "@pnpm/npm-conf" "^2.1.0" registry-url@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" + resolved "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz" integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== dependencies: rc "1.2.8" regjsgen@^0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz" 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" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz" integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: jsesc "~3.0.2" rehype-raw@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" + resolved "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz" integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== dependencies: "@types/hast" "^3.0.0" @@ -7948,7 +8734,7 @@ rehype-raw@^7.0.0: rehype-recma@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/rehype-recma/-/rehype-recma-1.0.0.tgz#d68ef6344d05916bd96e25400c6261775411aa76" + resolved "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz" integrity sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw== dependencies: "@types/estree" "^1.0.0" @@ -7957,12 +8743,12 @@ rehype-recma@^1.0.0: relateurl@^0.2.7: version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remark-directive@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.1.tgz#689ba332f156cfe1118e849164cc81f157a3ef0a" + resolved "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz" integrity sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A== dependencies: "@types/mdast" "^4.0.0" @@ -7972,7 +8758,7 @@ remark-directive@^3.0.0: remark-emoji@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-4.0.1.tgz#671bfda668047689e26b2078c7356540da299f04" + resolved "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz" integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg== dependencies: "@types/mdast" "^4.0.2" @@ -7983,7 +8769,7 @@ remark-emoji@^4.0.0: remark-frontmatter@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2" + resolved "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz" integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== dependencies: "@types/mdast" "^4.0.0" @@ -7993,7 +8779,7 @@ remark-frontmatter@^5.0.0: remark-gfm@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" + resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz" integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== dependencies: "@types/mdast" "^4.0.0" @@ -8005,7 +8791,7 @@ remark-gfm@^4.0.0: remark-mdx@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.0.tgz#f979be729ecb35318fa48e2135c1169607a78343" + resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz" integrity sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA== dependencies: mdast-util-mdx "^3.0.0" @@ -8013,7 +8799,7 @@ remark-mdx@^3.0.0: remark-parse@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz" integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== dependencies: "@types/mdast" "^4.0.0" @@ -8023,7 +8809,7 @@ remark-parse@^11.0.0: remark-rehype@^11.0.0: version "11.1.2" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37" + resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz" integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== dependencies: "@types/hast" "^3.0.0" @@ -8034,7 +8820,7 @@ remark-rehype@^11.0.0: remark-stringify@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz" integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== dependencies: "@types/mdast" "^4.0.0" @@ -8043,7 +8829,7 @@ remark-stringify@^11.0.0: renderkid@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== dependencies: css-select "^4.1.3" @@ -8054,42 +8840,42 @@ renderkid@^3.0.0: repeat-string@^1.0.0: version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== 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" + 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== "require-like@>= 0.1.1": version "0.1.2" - resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + resolved "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-alpn@^1.2.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-pathname@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve@^1.22.10: version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + 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" @@ -8098,31 +8884,46 @@ resolve@^1.22.10: responselike@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + resolved "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz" integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== dependencies: lowercase-keys "^3.0.0" retry@^0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" +robust-predicates@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz" + integrity sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA== + +roughjs@^4.6.6: + version "4.6.6" + resolved "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz" + integrity sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ== + dependencies: + hachure-fill "^0.5.2" + path-data-parser "^0.1.0" + points-on-curve "^0.2.0" + points-on-path "^0.2.1" + rtlcss@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.3.0.tgz#f8efd4d5b64f640ec4af8fa25b65bacd9e07cc97" + resolved "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz" integrity sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig== dependencies: escalade "^3.1.1" @@ -8132,44 +8933,49 @@ rtlcss@^4.1.0: run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" +rw@1: + version "1.3.3" + resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sax@^1.2.4: version "1.4.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + resolved "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz" integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== scheduler@^0.26.0: version "0.26.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz" integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== schema-dts@^1.1.2: version "1.1.5" - resolved "https://registry.yarnpkg.com/schema-dts/-/schema-dts-1.1.5.tgz#9237725d305bac3469f02b292a035107595dc324" + resolved "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz" integrity sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg== schema-utils@^3.0.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" @@ -8178,7 +8984,7 @@ schema-utils@^3.0.0: schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.3.0, schema-utils@^4.3.2: version "4.3.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz" integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== dependencies: "@types/json-schema" "^7.0.9" @@ -8188,7 +8994,7 @@ schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.3.0, schema-utils@^4.3 section-matter@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== dependencies: extend-shallow "^2.0.1" @@ -8196,12 +9002,12 @@ section-matter@^1.0.0: select-hose@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^2.1.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz" integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: "@types/node-forge" "^1.3.0" @@ -8209,24 +9015,24 @@ selfsigned@^2.1.1: semver-diff@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" + resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz" integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== dependencies: semver "^7.3.5" semver@^6.3.1: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== send@0.19.0: version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" @@ -8245,14 +9051,14 @@ send@0.19.0: serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" serve-handler@^6.1.6: version "6.1.6" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.6.tgz#50803c1d3e947cd4a341d617f8209b22bd76cfa1" + resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz" integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== dependencies: bytes "3.0.0" @@ -8265,7 +9071,7 @@ serve-handler@^6.1.6: serve-index@^1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" @@ -8278,7 +9084,7 @@ serve-index@^1.9.1: serve-static@1.16.2: version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: encodeurl "~2.0.0" @@ -8288,7 +9094,7 @@ serve-static@1.16.2: set-function-length@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -8300,46 +9106,46 @@ set-function-length@^1.2.2: setprototypeof@1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" 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" + 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" shallowequal@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + 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" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.8.3: version "1.8.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz" integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== side-channel-list@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: es-errors "^1.3.0" @@ -8347,7 +9153,7 @@ side-channel-list@^1.0.0: side-channel-map@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: call-bound "^1.0.2" @@ -8357,7 +9163,7 @@ side-channel-map@^1.0.1: side-channel-weakmap@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: call-bound "^1.0.2" @@ -8368,7 +9174,7 @@ side-channel-weakmap@^1.0.2: side-channel@^1.0.6: version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: es-errors "^1.3.0" @@ -8379,12 +9185,12 @@ side-channel@^1.0.6: signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sirv@^2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + resolved "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz" integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: "@polka/url" "^1.0.0-next.24" @@ -8393,12 +9199,12 @@ sirv@^2.0.3: sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== sitemap@^7.1.1: version "7.1.2" - resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.2.tgz#6ce1deb43f6f177c68bc59cf93632f54e3ae6b72" + resolved "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz" integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw== dependencies: "@types/node" "^17.0.5" @@ -8408,24 +9214,24 @@ sitemap@^7.1.1: skin-tone@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" + resolved "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz" integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== dependencies: unicode-emoji-modifier-base "^1.0.0" slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slash@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== snake-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: dot-case "^3.0.4" @@ -8433,7 +9239,7 @@ snake-case@^3.0.4: sockjs@^0.3.24: version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" @@ -8442,17 +9248,17 @@ sockjs@^0.3.24: sort-css-media-queries@2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c" + resolved "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz" integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA== source-map-js@^1.0.1, 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" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + 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" @@ -8460,22 +9266,22 @@ source-map-support@~0.5.20: source-map@^0.6.0, source-map@~0.6.0: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.0: version "0.7.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz" integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== space-separated-tokens@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== spdy-transport@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: debug "^4.1.0" @@ -8487,7 +9293,7 @@ spdy-transport@^3.0.0: spdy@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" @@ -8498,32 +9304,32 @@ spdy@^4.0.2: sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== srcset@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" + resolved "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz" integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== "statuses@>= 1.4.0 < 2": version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== std-env@^3.7.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz" integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + 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" @@ -8532,7 +9338,7 @@ string-width@^4.1.0, string-width@^4.2.0: 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" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -8541,21 +9347,21 @@ string-width@^5.0.1, string-width@^5.1.2: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" stringify-entities@^4.0.0: version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== dependencies: character-entities-html4 "^2.0.0" @@ -8563,7 +9369,7 @@ stringify-entities@^4.0.0: stringify-object@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== dependencies: get-own-enumerable-property-symbols "^3.0.0" @@ -8572,87 +9378,92 @@ stringify-object@^3.3.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" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 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" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom-string@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + resolved "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 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" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-to-js@^1.0.0: version "1.1.17" - resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.17.tgz#488b1558a8c1fd05352943f088cc3ce376813d83" + resolved "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz" integrity sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA== dependencies: style-to-object "1.0.9" style-to-object@1.0.9: version "1.0.9" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.9.tgz#35c65b713f4a6dba22d3d0c61435f965423653f0" + resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz" integrity sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw== dependencies: inline-style-parser "0.2.4" stylehacks@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz" integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== dependencies: browserslist "^4.23.0" postcss-selector-parser "^6.0.16" +stylis@^4.3.6: + version "4.4.0" + resolved "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz" + integrity sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA== + supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + 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" supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.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" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-parser@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== svgo@^3.0.2, svgo@^3.2.0: version "3.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + resolved "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz" integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== dependencies: "@trysound/sax" "0.2.0" @@ -8665,19 +9476,19 @@ svgo@^3.0.2, svgo@^3.2.0: swc-loader@^0.2.6: version "0.2.6" - resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.6.tgz#bf0cba8eeff34bb19620ead81d1277fefaec6bc8" + resolved "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.6.tgz" integrity sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg== dependencies: "@swc/counter" "^0.1.3" tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.2" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz" integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.9: version "5.3.14" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz" integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== dependencies: "@jridgewell/trace-mapping" "^0.3.25" @@ -8688,7 +9499,7 @@ terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.9: terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: version "5.43.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.43.1.tgz#88387f4f9794ff1a29e7ad61fb2932e25b4fdb6d" + resolved "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz" integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg== dependencies: "@jridgewell/source-map" "^0.3.3" @@ -8698,74 +9509,84 @@ terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: thunky@^1.0.2: version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== tiny-invariant@^1.0.2: version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== tiny-warning@^1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinyexec@^1.0.1: + version "1.1.1" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz" + integrity sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg== + tinypool@^1.0.2: version "1.1.1" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" + resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz" integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== 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" + 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" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== totalist@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== trim-lines@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz" integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== trough@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== +ts-dedent@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz" + integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== + tslib@^2.0.3, tslib@^2.4.0, tslib@^2.6.0, tslib@^2.6.2: version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^1.0.1: version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== type-fest@^2.13.0, type-fest@^2.5.0: version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -8773,19 +9594,19 @@ type-is@~1.6.18: typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" typesense-docsearch-css@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/typesense-docsearch-css/-/typesense-docsearch-css-0.4.1.tgz#457d4ad2d63021c7cc6e12081c378c0367a891c0" + resolved "https://registry.npmjs.org/typesense-docsearch-css/-/typesense-docsearch-css-0.4.1.tgz" integrity sha512-mN8K18pfIpCrhzsMAJBzoS7l/YDcC4P3f9vsScenUceXmC8n3FCPldmF10dKDJmK3Lr7aAScQt70jCA5126y2w== typesense-docsearch-react@^3.4.1: version "3.4.1" - resolved "https://registry.yarnpkg.com/typesense-docsearch-react/-/typesense-docsearch-react-3.4.1.tgz#754d52472bb9b19a91d213f575d7cc06a58a0878" + resolved "https://registry.npmjs.org/typesense-docsearch-react/-/typesense-docsearch-react-3.4.1.tgz" integrity sha512-d0PQym/B/p5oP+hfdFEOH6goiKa1JLR63bikZSDGq1+jT2FtuwNrdMGVBZZMNFUsXVsJRA8ULHJpsREmfSJmVw== dependencies: "@algolia/autocomplete-core" "1.8.2" @@ -8796,14 +9617,14 @@ typesense-docsearch-react@^3.4.1: typesense-instantsearch-adapter@^2.7.1, typesense-instantsearch-adapter@^2.9.0-5: version "2.9.0" - resolved "https://registry.yarnpkg.com/typesense-instantsearch-adapter/-/typesense-instantsearch-adapter-2.9.0.tgz#ce6b71f004b47eb88f112db74138d7c6932b088a" + resolved "https://registry.npmjs.org/typesense-instantsearch-adapter/-/typesense-instantsearch-adapter-2.9.0.tgz" integrity sha512-ZSgpi9T/S70Zs2eYIv0VmD0o4+VfBN9jz97Rhbf9Bj+gpUAbjmm46XAobEE2TGs2Wo04hpzCrXifXNJecalC/w== dependencies: typesense "^2.1.0-1" typesense@^1.7.2: version "1.8.2" - resolved "https://registry.yarnpkg.com/typesense/-/typesense-1.8.2.tgz#16341fdd4edab02b33facc14e1d27a6d58dbe0e5" + resolved "https://registry.npmjs.org/typesense/-/typesense-1.8.2.tgz" integrity sha512-aBpePjA99Qvo+OP2pJwMpvga4Jrm1Y2oV5NsrWXBxlqUDNEUCPZBIksPv2Hq0jxQxHhLLyJVbjXjByXsvpCDVA== dependencies: axios "^1.6.0" @@ -8811,31 +9632,36 @@ typesense@^1.7.2: typesense@^2.1.0-1: version "2.1.0-13" - resolved "https://registry.yarnpkg.com/typesense/-/typesense-2.1.0-13.tgz#99ec63c55e8a96cac5d6719de4dca96f5a3cd173" + resolved "https://registry.npmjs.org/typesense/-/typesense-2.1.0-13.tgz" integrity sha512-J7Y+gqIAyPejjAfyQ5rqeAGRuRM6CTZw7VSgSq9F5esWnCAMSFI62GW9gpaG8QtbY00ELdx7nFq96TY2ezHS8Q== dependencies: axios "^1.8.4" loglevel "^1.8.1" tslib "^2.6.2" +ufo@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz" + integrity sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q== + undici-types@~7.8.0: version "7.8.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz" integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== 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" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz" integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-emoji-modifier-base@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" + resolved "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz" integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== 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" + 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" @@ -8843,17 +9669,17 @@ unicode-match-property-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" + 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== 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" + 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== unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: version "11.0.5" - resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + resolved "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz" integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== dependencies: "@types/unist" "^3.0.0" @@ -8866,42 +9692,42 @@ unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: unique-string@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: crypto-random-string "^4.0.0" unist-util-is@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz" integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== dependencies: "@types/unist" "^3.0.0" unist-util-position-from-estree@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200" + resolved "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz" integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== dependencies: "@types/unist" "^3.0.0" unist-util-position@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz" integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== dependencies: "@types/unist" "^3.0.0" unist-util-stringify-position@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz" integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== dependencies: "@types/unist" "^3.0.0" unist-util-visit-parents@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz" integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== dependencies: "@types/unist" "^3.0.0" @@ -8909,7 +9735,7 @@ unist-util-visit-parents@^6.0.0: unist-util-visit@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz" integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== dependencies: "@types/unist" "^3.0.0" @@ -8918,17 +9744,17 @@ unist-util-visit@^5.0.0: universalify@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" 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" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz" integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" @@ -8936,7 +9762,7 @@ update-browserslist-db@^1.1.3: update-notifier@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" + resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz" integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== dependencies: boxen "^7.0.0" @@ -8956,14 +9782,14 @@ update-notifier@^6.0.2: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-loader@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + resolved "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz" integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== dependencies: loader-utils "^2.0.0" @@ -8972,42 +9798,47 @@ url-loader@^4.1.1: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utila@~0.4: version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utility-types@^3.10.0: version "3.11.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c" + resolved "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz" integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== + uuid@^8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== value-equal@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vfile-location@^5.0.0: version "5.0.3" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" + resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz" integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== dependencies: "@types/unist" "^3.0.0" @@ -9015,7 +9846,7 @@ vfile-location@^5.0.0: vfile-message@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz" integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== dependencies: "@types/unist" "^3.0.0" @@ -9023,15 +9854,50 @@ vfile-message@^4.0.0: vfile@^6.0.0, vfile@^6.0.1: version "6.0.3" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz" integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== dependencies: "@types/unist" "^3.0.0" vfile-message "^4.0.0" +vscode-jsonrpc@8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz" + integrity sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA== + +vscode-languageserver-protocol@3.17.5: + version "3.17.5" + resolved "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz" + integrity sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg== + dependencies: + vscode-jsonrpc "8.2.0" + vscode-languageserver-types "3.17.5" + +vscode-languageserver-textdocument@~1.0.11: + version "1.0.12" + resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz" + integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA== + +vscode-languageserver-types@3.17.5: + version "3.17.5" + resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz" + integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== + +vscode-languageserver@~9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz" + integrity sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g== + dependencies: + vscode-languageserver-protocol "3.17.5" + +vscode-uri@~3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz" + integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== + watchpack@^2.4.1: version "2.4.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz" integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== dependencies: glob-to-regexp "^0.4.1" @@ -9039,19 +9905,19 @@ watchpack@^2.4.1: wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" web-namespaces@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz" integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== webpack-bundle-analyzer@^4.10.2: version "4.10.2" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" + resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz" integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== dependencies: "@discoveryjs/json-ext" "0.5.7" @@ -9069,7 +9935,7 @@ webpack-bundle-analyzer@^4.10.2: webpack-dev-middleware@^5.3.4: version "5.3.4" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz" integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== dependencies: colorette "^2.0.10" @@ -9080,7 +9946,7 @@ webpack-dev-middleware@^5.3.4: webpack-dev-server@^4.15.2: version "4.15.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz" integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== dependencies: "@types/bonjour" "^3.5.9" @@ -9116,7 +9982,7 @@ webpack-dev-server@^4.15.2: webpack-merge@^5.9.0: version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz" integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: clone-deep "^4.0.1" @@ -9125,7 +9991,7 @@ webpack-merge@^5.9.0: webpack-merge@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz" integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== dependencies: clone-deep "^4.0.1" @@ -9134,12 +10000,12 @@ webpack-merge@^6.0.1: webpack-sources@^3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz" integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@^5.88.1, webpack@^5.95.0: version "5.101.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.101.0.tgz#4b81407ffad9857f81ff03f872e3369b9198cc9d" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz" integrity sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ== dependencies: "@types/eslint-scope" "^3.7.7" @@ -9170,7 +10036,7 @@ webpack@^5.88.1, webpack@^5.95.0: webpackbar@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-6.0.1.tgz#5ef57d3bf7ced8b19025477bc7496ea9d502076b" + resolved "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz" integrity sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q== dependencies: ansi-escapes "^4.3.2" @@ -9184,7 +10050,7 @@ webpackbar@^6.0.1: websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" @@ -9193,31 +10059,31 @@ websocket-driver@>=0.5.1, websocket-driver@^0.7.4: websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" widest-line@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz" integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== dependencies: string-width "^5.0.1" wildcard@^2.0.0, wildcard@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + 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" @@ -9226,7 +10092,7 @@ wrap-ansi@^7.0.0: wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -9235,12 +10101,12 @@ wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" @@ -9250,37 +10116,37 @@ write-file-atomic@^3.0.3: ws@^7.3.1: version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.13.0: version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz" integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" + resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== xml-js@^1.6.11: version "1.6.11" - resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + resolved "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz" integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== dependencies: sax "^1.2.4" yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yocto-queue@^1.0.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.1.tgz#36d7c4739f775b3cbc28e6136e21aa057adec418" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz" integrity sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg== zwitch@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==