From b79a5ce89d56627cefcc8a083a26395a48cafb8c Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Thu, 30 Nov 2023 12:39:03 -0500 Subject: [PATCH] Revert "Revert "Nialexsan/v3 mobile section"" --- docs/architecture/index.mdx | 2 + docs/architecture/node-ops/_category_.yml | 2 + .../node-ops}/index.md | 66 +- .../node-ops/nodes/_category_.yml | 1 + .../node-ops}/nodes/access-api-rate-limits.md | 2 +- .../node-ops}/nodes/access-api.md | 2 +- .../node-ops}/nodes/archive-access-api.md | 0 .../nodes/archive-api-rate-limits.md | 2 +- .../node-ops/nodes}/node-operation/FAQ.md | 19 +- .../node-operation/Flownodesdiagram.png | Bin .../node-operation/Selected_FlowPort.png | Bin .../nodes}/node-operation/Staked_FlowPort.png | Bin .../node-operation/Unstaked_FlowPort.png | Bin .../nodes/node-operation/_category_.yml | 2 + .../node-operation/access-node-setup.md | 91 +- .../byzantine-node-attack-response.md} | 1 + .../node-operation/choose_access_flowport.png | Bin .../db-encryption-existing-operator.md} | 3 +- .../node-operation/epoch-startup-order.png | Bin 0 -> 96574 bytes .../node-operation/flow-architecture.png | Bin .../node-operation/guides/_category_.yml | 2 + .../guides/genesis-bootstrap.md} | 8 +- .../node-operation/guides/spork-practice.md} | 4 +- .../node-operation/guides/starting-nodes.md} | 6 +- .../node-ops/nodes}/node-operation/hcu.md | 2 +- .../machine-existing-operator.md} | 9 +- .../nodes/node-operation/monitoring-nodes.md} | 1 + .../nodes/node-operation/node-bootstrap.md} | 19 +- .../nodes/node-operation/node-migration.md} | 25 +- .../nodes/node-operation/node-providers.md | 27 + .../node-operation/node-provisioning.md} | 5 +- .../nodes/node-operation/node-roles.md} | 3 +- .../nodes/node-operation/node-setup.md} | 25 +- .../node_details_permissionless_an.png | Bin .../nodes/node-operation/observer-node.md} | 11 +- .../nodes}/node-operation/observer.png | Bin .../nodes/node-operation/past-sporks.md} | 1 + .../nodes/node-operation}/slashing.md | 3 +- .../node-ops/nodes/node-operation/spork.md} | 11 +- ...action_register_node_permissionless_an.png | Bin .../nodes/node-operation/upcoming-sporks.md} | 1 + .../staking/02-epoch-terminology.md} | 2 +- .../staking/03-schedule.md} | 14 +- .../staking/04-epoch-preparation.md} | 2 +- .../staking/04-stake-slashing.md | 0 .../staking/05-epoch-scripts-events.md | 10 +- .../staking/06-technical-overview.md} | 10 +- .../staking/07-staking-scripts-events.md | 26 +- .../staking/08-staking-rewards.md | 6 +- .../staking/09-qc-dkg.md} | 24 +- .../staking/10-qc-dkg-scripts-events.md | 18 +- .../staking/11-machine-account.md} | 6 +- .../staking/12-faq.md | 2 +- .../staking/13-staking-options.md} | 4 +- .../staking/14-staking-collection.md} | 52 +- .../staking/15-staking-guide.md} | 30 +- .../staking/epoch-phase-diagram.png | Bin .../staking/epoch-service-event-diagram.png | Bin .../staking/index.md | 10 +- docs/build/basics/accounts.md | 2 +- docs/build/basics/blocks.md | 2 +- docs/build/basics/collections.md | 2 +- docs/build/basics/fees.md | 2 +- docs/build/basics/flow-token.md | 6 +- docs/build/basics/scripts.md | 2 +- docs/build/basics/transactions.md | 2 +- docs/build/best-practices/_category_.yml | 2 +- docs/build/best-practices/anti-patterns.md | 2 + docs/build/best-practices/design-patterns.md | 2 + docs/build/building-vs-other-chains.md | 6 +- docs/build/guides/flow-app-quickstart.md | 2 +- docs/build/{ => guides}/mobile/_category_.yml | 2 +- .../{ => guides}/mobile/ios-quickstart.md | 2 +- docs/build/{ => guides}/mobile/overview.md | 0 .../mobile/react-native-quickstart.md | 32 +- .../mobile/resources/collection.png | Bin .../{ => guides}/mobile/resources/connect.png | Bin .../mobile/resources/initialize.png | Bin .../mobile/resources/monster_maker_logo.png | Bin .../mobile/resources/xcode_setup.png | Bin .../build/guides/smart-contracts/deploying.md | 4 +- .../core-contracts/03-flow-token.md | 2 +- .../06-staking-contract-reference.md | 4 +- .../core-contracts/11-staking-collection.md | 2 +- docs/references/index.md | 2 +- .../node-operation/_category_.json | 4 - .../node-operation/guides/_category_.json | 3 - .../run-and-secure/nodes/faq/developers.md | 4 +- .../run-and-secure/nodes/faq/operators.md | 6 +- .../run-and-secure/nodes/flow-port/index.md | 12 +- .../nodes/flow-port/staking-guide.md | 10 +- docs/references/run-and-secure/nodes/index.md | 131 -- .../run-and-secure/staking/_category_.yml | 1 - docs/tools/clients/fcl-js/api.md | 2 +- docs/tools/clients/fcl-js/sdk-guidelines.mdx | 2 +- docs/tutorials/DappArchitectures.md | 4 +- docusaurus.config.js | 16 +- sidebars.js | 42 +- src/data/pages/home.tsx | 2 +- vercel.json | 15 +- yarn.lock | 1729 ++++++++--------- 101 files changed, 1295 insertions(+), 1342 deletions(-) create mode 100644 docs/architecture/node-ops/_category_.yml rename docs/{references/run-and-secure/node-operation => architecture/node-ops}/index.md (80%) create mode 100644 docs/architecture/node-ops/nodes/_category_.yml rename docs/{references/run-and-secure => architecture/node-ops}/nodes/access-api-rate-limits.md (97%) rename docs/{references/run-and-secure => architecture/node-ops}/nodes/access-api.md (99%) rename docs/{references/run-and-secure => architecture/node-ops}/nodes/archive-access-api.md (100%) rename docs/{references/run-and-secure => architecture/node-ops}/nodes/archive-api-rate-limits.md (91%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/FAQ.md (73%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/Flownodesdiagram.png (100%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/Selected_FlowPort.png (100%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/Staked_FlowPort.png (100%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/Unstaked_FlowPort.png (100%) create mode 100644 docs/architecture/node-ops/nodes/node-operation/_category_.yml rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/access-node-setup.md (79%) rename docs/{references/run-and-secure/node-operation/byzantine-node-attack-response.mdx => architecture/node-ops/nodes/node-operation/byzantine-node-attack-response.md} (99%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/choose_access_flowport.png (100%) rename docs/{references/run-and-secure/node-operation/db-encryption-existing-operator.mdx => architecture/node-ops/nodes/node-operation/db-encryption-existing-operator.md} (95%) create mode 100644 docs/architecture/node-ops/nodes/node-operation/epoch-startup-order.png rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/flow-architecture.png (100%) create mode 100644 docs/architecture/node-ops/nodes/node-operation/guides/_category_.yml rename docs/{references/run-and-secure/node-operation/guides/genesis-bootstrap.mdx => architecture/node-ops/nodes/node-operation/guides/genesis-bootstrap.md} (96%) rename docs/{references/run-and-secure/node-operation/guides/spork-practice.mdx => architecture/node-ops/nodes/node-operation/guides/spork-practice.md} (98%) rename docs/{references/run-and-secure/node-operation/guides/starting-nodes.mdx => architecture/node-ops/nodes/node-operation/guides/starting-nodes.md} (95%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/hcu.md (95%) rename docs/{references/run-and-secure/node-operation/machine-existing-operator.mdx => architecture/node-ops/nodes/node-operation/machine-existing-operator.md} (93%) rename docs/{references/run-and-secure/node-operation/monitoring-nodes.mdx => architecture/node-ops/nodes/node-operation/monitoring-nodes.md} (99%) rename docs/{references/run-and-secure/node-operation/node-bootstrap.mdx => architecture/node-ops/nodes/node-operation/node-bootstrap.md} (96%) rename docs/{references/run-and-secure/node-operation/node-migration.mdx => architecture/node-ops/nodes/node-operation/node-migration.md} (85%) create mode 100644 docs/architecture/node-ops/nodes/node-operation/node-providers.md rename docs/{references/run-and-secure/node-operation/node-provisioning.mdx => architecture/node-ops/nodes/node-operation/node-provisioning.md} (98%) rename docs/{references/run-and-secure/node-operation/node-roles.mdx => architecture/node-ops/nodes/node-operation/node-roles.md} (99%) rename docs/{references/run-and-secure/node-operation/node-setup.mdx => architecture/node-ops/nodes/node-operation/node-setup.md} (95%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/node_details_permissionless_an.png (100%) rename docs/{references/run-and-secure/node-operation/observer-node.mdx => architecture/node-ops/nodes/node-operation/observer-node.md} (96%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/observer.png (100%) rename docs/{references/run-and-secure/node-operation/past-sporks.mdx => architecture/node-ops/nodes/node-operation/past-sporks.md} (99%) rename docs/{references/run-and-secure/nodes => architecture/node-ops/nodes/node-operation}/slashing.md (99%) rename docs/{references/run-and-secure/node-operation/spork.mdx => architecture/node-ops/nodes/node-operation/spork.md} (92%) rename docs/{references/run-and-secure => architecture/node-ops/nodes}/node-operation/transaction_register_node_permissionless_an.png (100%) rename docs/{references/run-and-secure/node-operation/upcoming-sporks.mdx => architecture/node-ops/nodes/node-operation/upcoming-sporks.md} (99%) rename docs/{references/run-and-secure/staking/02-epoch-terminology.mdx => architecture/staking/02-epoch-terminology.md} (99%) rename docs/{references/run-and-secure/staking/03-schedule.mdx => architecture/staking/03-schedule.md} (93%) rename docs/{references/run-and-secure/staking/04-epoch-preparation.mdx => architecture/staking/04-epoch-preparation.md} (99%) rename docs/{references/run-and-secure => architecture}/staking/04-stake-slashing.md (100%) rename docs/{references/run-and-secure => architecture}/staking/05-epoch-scripts-events.md (93%) rename docs/{references/run-and-secure/staking/06-technical-overview.mdx => architecture/staking/06-technical-overview.md} (98%) rename docs/{references/run-and-secure => architecture}/staking/07-staking-scripts-events.md (93%) rename docs/{references/run-and-secure => architecture}/staking/08-staking-rewards.md (97%) rename docs/{references/run-and-secure/staking/09-qc-dkg.mdx => architecture/staking/09-qc-dkg.md} (84%) rename docs/{references/run-and-secure => architecture}/staking/10-qc-dkg-scripts-events.md (64%) rename docs/{references/run-and-secure/staking/11-machine-account.mdx => architecture/staking/11-machine-account.md} (92%) rename docs/{references/run-and-secure => architecture}/staking/12-faq.md (98%) rename docs/{references/run-and-secure/staking/13-staking-options.mdx => architecture/staking/13-staking-options.md} (96%) rename docs/{references/run-and-secure/staking/14-staking-collection.mdx => architecture/staking/14-staking-collection.md} (91%) rename docs/{references/run-and-secure/staking/15-staking-guide.mdx => architecture/staking/15-staking-guide.md} (88%) rename docs/{references/run-and-secure => architecture}/staking/epoch-phase-diagram.png (100%) rename docs/{references/run-and-secure => architecture}/staking/epoch-service-event-diagram.png (100%) rename docs/{references/run-and-secure => architecture}/staking/index.md (94%) rename docs/build/{ => guides}/mobile/_category_.yml (87%) rename docs/build/{ => guides}/mobile/ios-quickstart.md (99%) rename docs/build/{ => guides}/mobile/overview.md (100%) rename docs/build/{ => guides}/mobile/react-native-quickstart.md (94%) rename docs/build/{ => guides}/mobile/resources/collection.png (100%) rename docs/build/{ => guides}/mobile/resources/connect.png (100%) rename docs/build/{ => guides}/mobile/resources/initialize.png (100%) rename docs/build/{ => guides}/mobile/resources/monster_maker_logo.png (100%) rename docs/build/{ => guides}/mobile/resources/xcode_setup.png (100%) delete mode 100644 docs/references/run-and-secure/node-operation/_category_.json delete mode 100644 docs/references/run-and-secure/node-operation/guides/_category_.json delete mode 100644 docs/references/run-and-secure/nodes/index.md delete mode 100644 docs/references/run-and-secure/staking/_category_.yml diff --git a/docs/architecture/index.mdx b/docs/architecture/index.mdx index 89b1a6f181..c5f1ff210f 100644 --- a/docs/architecture/index.mdx +++ b/docs/architecture/index.mdx @@ -6,4 +6,6 @@ import DocCardList from '@theme/DocCardList'; import { useDocsSidebar, isSamePath } from '@docusaurus/theme-common/internal'; import { useLocation } from '@docusaurus/router'; +# Architecture + !isSamePath(item.href, useLocation().pathname))}/> diff --git a/docs/architecture/node-ops/_category_.yml b/docs/architecture/node-ops/_category_.yml new file mode 100644 index 0000000000..314a0a8450 --- /dev/null +++ b/docs/architecture/node-ops/_category_.yml @@ -0,0 +1,2 @@ +position: 2 +label: Node Ops \ No newline at end of file diff --git a/docs/references/run-and-secure/node-operation/index.md b/docs/architecture/node-ops/index.md similarity index 80% rename from docs/references/run-and-secure/node-operation/index.md rename to docs/architecture/node-ops/index.md index 606f99ac20..6824e83227 100644 --- a/docs/references/run-and-secure/node-operation/index.md +++ b/docs/architecture/node-ops/index.md @@ -22,11 +22,11 @@ Flow multirole architecture makes it more scalable and provides several node typ --- -The different types of nodes are described [here](./node-roles.mdx). As node operator, you can choose to run any of the different types of node that best fits your needs. +The different types of nodes are described [here](./nodes/node-operation/node-roles.md). As node operator, you can choose to run any of the different types of node that best fits your needs. The nodes are classified as follows, -![Flownodesdiagram.png](Flownodesdiagram.png) +![Flownodesdiagram.png](nodes/node-operation/Flownodesdiagram.png) ## Light node a.k.a. Observer node @@ -37,11 +37,11 @@ In addition to supporting dapps, an observer node can also be run by access node The observer node is not staked but still provides the same API as the access node. - -
- To run a light node, follow this [guide](./observer-node.mdx) -
-
+:::info + +To run a light node, follow this [guide](./nodes/node-operation/observer-node.md) + +::: ## Archive node @@ -68,37 +68,33 @@ In a nutshell, Full Nodes are staked network participants that drive network pro --- If you want local access to the protocol state data (blocks, collections, transactions) and do not want to use one of the community access nodes you can run an access node. -Dapp developers, chain explorers, chain analytics etc. who want exclusive access to chain data and not be subject to the rate-limits on the community access node can choose to run an access node. +Dapp developers, chain explorers, chain analytics and others who want exclusive access to chain data and not be subject to the rate-limits on the community access node can choose to run an access node. An access node is minimally staked for network security. The central goal for Access Nodes is to provide RPC functionality to its node operator. In comparison, contributing to protocol progress (e.g. routing transactions to collector clusters, relaying blocks to the unstaked peer-to-peer network, etc.) should only take up a marginal fraction an Access Node's computational resources. Furthermore, Access Node operators can freely rate-limit the amount of resources their Access Node dedicates to supporting the broader ecosystem. Therefore, Access Nodes do not receive staking rewards. - -
- Launch an access node using QuickNode - - https://www.quicknode.com/chains/flow - -
-
- - - -
- To run a self-hosted access node, follow this [guide](./access-node-setup.md) -
-
- - -
-Alternately, instead of running an access node, you can use the [Flow community](../../../references/run-and-secure/nodes/access-api.md) access nodes or the ones run by any of the other node operators. -
-
+:::info + +Launch an access node using QuickNode + +[https://www.quicknode.com/chains/flow](https://www.quicknode.com/chains/flow) + +::: + + +:::info + +To run a self-hosted access node, follow this [guide](./nodes/node-operation/access-node-setup.md) + +::: + +:::tip + +Alternately, instead of running an access node, you can use the [Flow community](./nodes/access-api.md) access nodes or the ones run by any of the other node operators. + +::: ### Validator node @@ -124,8 +120,8 @@ Before proceeding, ensure you have the stake required for your new node and that To set up a new staked node after it has been authorized by the Flow governance working group, you will need to complete the following steps: -1. [Provision](./node-setup.mdx) the machine on which your node will run. +1. [Provision](./nodes/node-operation/node-setup.md) the machine on which your node will run. -2. [Generate and register](./node-bootstrap.mdx) your node identity. +2. [Generate and register](./nodes/node-operation/node-bootstrap.md) your node identity. -3. [Start](./node-bootstrap.mdx#step-3---start-your-flow-node) your node! +3. [Start](./nodes/node-operation/node-bootstrap.md#step-3---start-your-flow-node) your node! diff --git a/docs/architecture/node-ops/nodes/_category_.yml b/docs/architecture/node-ops/nodes/_category_.yml new file mode 100644 index 0000000000..e5c30c5a64 --- /dev/null +++ b/docs/architecture/node-ops/nodes/_category_.yml @@ -0,0 +1 @@ +label: Flow Nodes \ No newline at end of file diff --git a/docs/references/run-and-secure/nodes/access-api-rate-limits.md b/docs/architecture/node-ops/nodes/access-api-rate-limits.md similarity index 97% rename from docs/references/run-and-secure/nodes/access-api-rate-limits.md rename to docs/architecture/node-ops/nodes/access-api-rate-limits.md index 46889ca4c6..9f3d2a95d8 100644 --- a/docs/references/run-and-secure/nodes/access-api-rate-limits.md +++ b/docs/architecture/node-ops/nodes/access-api-rate-limits.md @@ -15,7 +15,7 @@ Please note, these limits only apply to the public (community) access nodes. The public access nodes are hosted by [QuickNode](https://www.quicknode.com/chains/flow). -> If you require higher limits, you can either run your own Access node (see this [guide](../node-operation/access-node-setup.md)) or use [QuickNode](https://www.quicknode.com/chains/flow) to run a fully-managed access node. +> If you require higher limits, you can either run your own Access node (see this [guide](./node-operation/access-node-setup.md)) or use [QuickNode](https://www.quicknode.com/chains/flow) to run a fully-managed access node. | gRPC API | Total requests per second per client IP | diff --git a/docs/references/run-and-secure/nodes/access-api.md b/docs/architecture/node-ops/nodes/access-api.md similarity index 99% rename from docs/references/run-and-secure/nodes/access-api.md rename to docs/architecture/node-ops/nodes/access-api.md index bdb43c3909..0200e7bd67 100644 --- a/docs/references/run-and-secure/nodes/access-api.md +++ b/docs/architecture/node-ops/nodes/access-api.md @@ -21,7 +21,7 @@ The Access Nodes hosted by DapperLabs are accessible at: | Testnet | `access.devnet.nodes.onflow.org:9000` | `testnet.onflow.org` | `testnet.onflow.org` | #### Mainnet -##### We are still in the process of aggregating the past chain data but mainnet 5 to mainnet 1 spork data can be retrieved from the Access nodes mentioned [here](../node-operation/spork.mdx#mainnet) +##### We are still in the process of aggregating the past chain data but mainnet 5 to mainnet 1 spork data can be retrieved from the Access nodes mentioned [here](./node-operation/spork.md#mainnet) Production network where the Flow blockchain is running. Funds are at risk. diff --git a/docs/references/run-and-secure/nodes/archive-access-api.md b/docs/architecture/node-ops/nodes/archive-access-api.md similarity index 100% rename from docs/references/run-and-secure/nodes/archive-access-api.md rename to docs/architecture/node-ops/nodes/archive-access-api.md diff --git a/docs/references/run-and-secure/nodes/archive-api-rate-limits.md b/docs/architecture/node-ops/nodes/archive-api-rate-limits.md similarity index 91% rename from docs/references/run-and-secure/nodes/archive-api-rate-limits.md rename to docs/architecture/node-ops/nodes/archive-api-rate-limits.md index 6db655c1c1..8921957566 100644 --- a/docs/references/run-and-secure/nodes/archive-api-rate-limits.md +++ b/docs/architecture/node-ops/nodes/archive-api-rate-limits.md @@ -11,7 +11,7 @@ Following are the current rate limits for the [Archive Node gRPC API](./archive- Once the limit has reached, the client will receive an RPC error `ResourceExhausted` in the gRPC response. Please note, these limits only apply to the archive nodes hosted by Dapper Labs. Archive nodes run by other node operators will have different rate limits. -Also, all the gRPC endpoints listed below start with `flow.access.AccessAPI` due to the Archive Access API having the same gRPC protobuf definitions as the original Access API from our [Access Nodes](../node-operation/node-roles.mdx#access). For information on rate limitting of the Access API for Flow's Access Nodes please visit [this page](./access-api-rate-limits.md). +Also, all the gRPC endpoints listed below start with `flow.access.AccessAPI` due to the Archive Access API having the same gRPC protobuf definitions as the original Access API from our [Access Nodes](./node-operation/node-roles.md#access). For information on rate limitting of the Access API for Flow's Access Nodes please visit [this page](./access-api-rate-limits.md). ##### Mainnet diff --git a/docs/references/run-and-secure/node-operation/FAQ.md b/docs/architecture/node-ops/nodes/node-operation/FAQ.md similarity index 73% rename from docs/references/run-and-secure/node-operation/FAQ.md rename to docs/architecture/node-ops/nodes/node-operation/FAQ.md index 5a4338d753..8278ca2506 100644 --- a/docs/references/run-and-secure/node-operation/FAQ.md +++ b/docs/architecture/node-ops/nodes/node-operation/FAQ.md @@ -1,12 +1,13 @@ --- title: Operator FAQ +sidebar_position: 1 --- # Operator FAQ ### Can anybody run a node? What is the approval process? -Anyone can run an [observer node](./observer-node.mdx). +Anyone can run an [observer node](./observer-node.md). Very soon, Access nodes too will be permissionless and anyone will be able to run one. @@ -18,29 +19,29 @@ In the long-term, anyone can run a node validator on Flow. ### How do I generate keys? -Please follow the instructions provided here: [Generate Your Node Keys](./node-bootstrap.mdx#generating-your-node-id) +Please follow the instructions provided here: [Generate Your Node Keys](./node-bootstrap.md#generating-your-node-id) ### How do I check on the status of my node? -Please follow the instructions provided here: [Monitoring nodes](./monitoring-nodes.mdx) +Please follow the instructions provided here: [Monitoring nodes](./monitoring-nodes.md) ### Can I bootstrap and run a node at any time? Flow allows nodes to join/leave the network each time a new epoch begins (roughly once per week). -See [Staking & Epochs](../staking/index.md#epochs) for general information and [Node Setup](./node-bootstrap.mdx#timing) for a guide to running a new node. +See [Staking & Epochs](../../../staking/index.md#epochs) for general information and [Node Setup](./node-bootstrap.md#timing) for a guide to running a new node. ### Would it hurt the network to have a node that constantly spins up and down? All staked nodes except access nodes, have to be online at all time. A staked node, other than an access node, which is not online can cause severe degradation of network performance and will be subjected to slashing of rewards. -A way to prevent this is to check your equipment meets Flow's [recommended requirements](./node-setup.mdx#hardware-requirements), periodically checking for updates and announcements in Discord but also using a node monitoring system for when your node does go offline. +A way to prevent this is to check your equipment meets Flow's [recommended requirements](./node-setup.md#hardware-requirements), periodically checking for updates and announcements in Discord but also using a node monitoring system for when your node does go offline. ### Does Flow has a regular schedule for Sporks? -Yes, see [Upcoming Sporks](./upcoming-sporks.mdx) for the latest schedule. Currently, Flow has a Mainnet Spork and a Testnet Spork roughly every two months. +Yes, see [Upcoming Sporks](./upcoming-sporks.md) for the latest schedule. Currently, Flow has a Mainnet Spork and a Testnet Spork roughly every two months. ### How do I update the Node Software? -One of the reasons for a [spork](./spork.mdx) is to make sure all nodes update to the latest software version. Hence, you should have the latest software update as long as you are participating in each spork. +One of the reasons for a [spork](./spork.md) is to make sure all nodes update to the latest software version. Hence, you should have the latest software update as long as you are participating in each spork. However, if we do release any software update in between a Spork (e.g. an emergency patch) we will announce it on Discord. ### Is there any way to know if a node is currently online? @@ -50,11 +51,11 @@ To verify if a node is online, please [setup metrics](./FAQ.md#how-do-i-check-on ### Can I migrate a node to a new machine? Yes, as long as you retain the `boostrap` information which includes the node staking key, networking key, IP address and port from the old node to the new. -More on this [here](./node-migration.mdx) +More on this [here](./node-migration.md) ### Where can I find how many nodes are currently running Flow? -If you are running a node, then you most definitely have this information on your node in the file `/public-root-information/node-infos.pub.json`. If you are not running a node, you can find this information by using a Cadence script to query the [Staking Smart Contract](../../../references/core-contracts/06-staking-contract-reference.md) (or check [Flowdiver](https://flowdiver.io/staking/overview)) +If you are running a node, then you most definitely have this information on your node in the file `/public-root-information/node-infos.pub.json`. If you are not running a node, you can find this information by using a Cadence script to query the [Staking Smart Contract](../../../../references/core-contracts/06-staking-contract-reference.md) (or check [Flowdiver](https://flowdiver.io/staking/overview)) ### Why do I need to update my node's ulimit? diff --git a/docs/references/run-and-secure/node-operation/Flownodesdiagram.png b/docs/architecture/node-ops/nodes/node-operation/Flownodesdiagram.png similarity index 100% rename from docs/references/run-and-secure/node-operation/Flownodesdiagram.png rename to docs/architecture/node-ops/nodes/node-operation/Flownodesdiagram.png diff --git a/docs/references/run-and-secure/node-operation/Selected_FlowPort.png b/docs/architecture/node-ops/nodes/node-operation/Selected_FlowPort.png similarity index 100% rename from docs/references/run-and-secure/node-operation/Selected_FlowPort.png rename to docs/architecture/node-ops/nodes/node-operation/Selected_FlowPort.png diff --git a/docs/references/run-and-secure/node-operation/Staked_FlowPort.png b/docs/architecture/node-ops/nodes/node-operation/Staked_FlowPort.png similarity index 100% rename from docs/references/run-and-secure/node-operation/Staked_FlowPort.png rename to docs/architecture/node-ops/nodes/node-operation/Staked_FlowPort.png diff --git a/docs/references/run-and-secure/node-operation/Unstaked_FlowPort.png b/docs/architecture/node-ops/nodes/node-operation/Unstaked_FlowPort.png similarity index 100% rename from docs/references/run-and-secure/node-operation/Unstaked_FlowPort.png rename to docs/architecture/node-ops/nodes/node-operation/Unstaked_FlowPort.png diff --git a/docs/architecture/node-ops/nodes/node-operation/_category_.yml b/docs/architecture/node-ops/nodes/node-operation/_category_.yml new file mode 100644 index 0000000000..3f8d4cc980 --- /dev/null +++ b/docs/architecture/node-ops/nodes/node-operation/_category_.yml @@ -0,0 +1,2 @@ +label: Node Operation +position: 5 \ No newline at end of file diff --git a/docs/references/run-and-secure/node-operation/access-node-setup.md b/docs/architecture/node-ops/nodes/node-operation/access-node-setup.md similarity index 79% rename from docs/references/run-and-secure/node-operation/access-node-setup.md rename to docs/architecture/node-ops/nodes/node-operation/access-node-setup.md index 4cb37baf6b..52c58f9875 100644 --- a/docs/references/run-and-secure/node-operation/access-node-setup.md +++ b/docs/architecture/node-ops/nodes/node-operation/access-node-setup.md @@ -1,9 +1,10 @@ --- title: Setting Up a Flow Access Node sidebar_label: Access Node Setup +sidebar_position: 2 --- -This guide is for running a permissonless Access node on Flow. If you are planning to run a different type of staked node then see [node bootstrap](./node-bootstrap.mdx). +This guide is for running a permissonless Access node on Flow. If you are planning to run a different type of staked node then see [node bootstrap](./node-bootstrap.md). Permissionless Access nodes allow any operator to run a Flow Access node. Unlike the other staked nodes, a permissionless access node does not have to be approved by the service account before it can join the network, hence the term "permissionless". The goal is to make all node types permissionless and this is the first step towards achieving that goal. @@ -15,13 +16,12 @@ Node operators can also run their own permissionless access node and provide acc Chain analytics, audit and exploration applications can run such an access node and do not have to rely on third parties for the state of the network. - ## Timing New nodes are able to join the network each time a new epoch begins. An epoch is a period of time (approximately one week) when the node operators in the network are constant. At epoch boundaries, newly staked node operators are able to join the network and existing node operators which have unstaked may exit the network. -You can read more about epochs [here](../staking/03-schedule.mdx). +You can read more about epochs [here](../../../staking/03-schedule.md). In order to join the network at epoch N+1, the access node **must** be registered with at least 100 FLOW staked prior to the end of epoch N's Staking Auction Phase. @@ -29,34 +29,19 @@ In order to join the network at epoch N+1, the access node **must** be registere Currently on mainnet, the staking auction starts every Wednesday at around 20:00 UTC and ends on the next Wednesday at around 12:00 UTC. Since this deadline may shift slightly from epoch to epoch, we recommend the node be staked by _Wednesday, 8:00 UTC_ to be able to join the network in the next epoch. -Confirmation of a new node's inclusion in epoch N+1 is included in the [`EpochSetup` event](../staking/05-epoch-scripts-events.md#epochsetup). - - -![Flow Epoch Schedule](https://storage.googleapis.com/flow-resources/documentation-assets/epoch-startup-order.png) - -## Limitations -This is a preliminary implementation of the full permissionless node operation feature and there will be exactly **five** slots in total that will be opened for access nodes. -If there are more than five staked candidate access nodes at the end of the staking phase of the current epoch which ends on Wednesday, 15th Feb, five of those will be selected by an on-chain random selection process and no other permissionless ANs can join until others unstake in a future epoch. - -More slots will be opened in the future. - -Support for unlimited access nodes requires staking auctions to be implemented, which is still an upgrade planned for the future. - -To summarize, +Confirmation of a new node's inclusion in epoch N+1 is included in the [`EpochSetup` event](../../../staking/05-epoch-scripts-events.md#epochsetup). -| **Date** | **Time** | **Epoch** | **Epoch Phase** | | -|:----------:|:---------:|:---------:|:----------------------:|:---------------------------------------------------:| -| 02/08/2023 | 20:00 UTC | 63 | Staking auction starts | Stake your access nodes | -| 02/15/2023 | 08:00 UTC | 63 | Staking auction ends | No more access nodes can be staked for epoch 64 | -| 02/15/2023 | 20:00 UTC | 64 | Epoch n+1 starts | 5 randomly chosen access nodes can join the network | - -> Please ensure that you have staked the access node by **15th Feb, 2023 Wednesday 08:00 UTC** if you wish to run the node in the next epoch. +![Flow Epoch Schedule](./epoch-startup-order.png) ## How to run a Permissionless Access node? -> Note: To run an access node you will need to provision a machine or virtual machine to run your node software. Please follow the [node-provisioning](./node-provisioning.mdx) guide for it. +:::note + +To run an access node you will need to provision a machine or virtual machine to run your node software. Please follow the [node-provisioning](./node-provisioning.md) guide for it. You can provision the machine before or after your node has been chosen. +::: + At a high level, to run a permissionless Access node, you will have to do the following steps: 1. Generate the node identity (private and public keys, node ID etc.). 2. Stake the node with 100 FLOW by the end of the staking phase of the current epoch (see [timing](#timing)) by providing the node information generated in step 1. @@ -120,11 +105,23 @@ $tree ./bootstrap/ 3 directories, 4 files ``` -> ⚠️ _Use a fully qualified domain name for the network address. Please also include the port number in the network address e.g. `flowaccess.mycompany.com:3569`_ +:::warning + +_Use a fully qualified domain name for the network address. Please also include the port number in the network address e.g. `flowaccess.mycompany.com:3569`_ + +::: + +:::warning + +_Do not include in `http://` in the network address._ -> ⚠️ _Do not include in `http://` in the network address._ +::: -> If you would like to stake multiple access nodes, please ensure you generate a unique identity for each node. +:::tip + +If you would like to stake multiple access nodes, please ensure you generate a unique identity for each node. + +::: Your node identity has now been generated. Your node ID can be found in the file `./bootstrap/public-root-information/node-id`. @@ -133,14 +130,18 @@ $cat ./bootstrap/public-root-information/node-id e737ec6efbd26ef43bf676911cdc5a11ba15fc6562d05413e6589fccdd6c06d5 ``` -> All your private keys should be in the `bootstrap` folder created earlier. Please take a back up of the entire folder. +:::info + +All your private keys should be in the `bootstrap` folder created earlier. Please take a back up of the entire folder. + +::: ## Step 2 - Stake the node You need to now register the node on chain by staking the node via [Flow Port](https://port.onflow.org/). -[Here](../nodes/flow-port/staking-guide.md) is a guide on how to use Flow port if you are not familiar with it. -If you are staking via a custody provider or would like to directly submit a staking transaction instead follow this [guide](../staking/index.md#how-do-i-stake). +[Here](../../../../references/run-and-secure/nodes/flow-port/staking-guide.md) is a guide on how to use Flow port if you are not familiar with it. +If you are staking via a custody provider or would like to directly submit a staking transaction instead follow this [guide](../../../staking/index.md#how-do-i-stake). Fund you Flow account with at least 100.01 FLOW tokens, which covers the required stake plus the storage deposit. @@ -180,7 +181,11 @@ Submit the Transaction. On Wednesday at around 12:00 UTC, the staking auction for the current epoch will end and five nodes from candidate list of nodes will be chosen at random by the staking contract to be part of the next epoch. ->Note: If all 5 slots have been taken from the previous epoch, then no new access nodes will be chosen (see #limitations) +:::note + +If all 5 slots have been taken from the previous epoch, then no new access nodes will be chosen (see #limitations) + +::: There are several ways to verify whether your node was chosen as explained below. @@ -232,13 +237,13 @@ Account staking info: ### Epoch setup event -Alternatively, if you can monitor events, look for [the epoch setup event](../staking/05-epoch-scripts-events.md#epochsetup) that gets emitted by the epoch contract. That event is emitted at the end of epoch N's staking auction and contains a list of node IDs that are confirmed for the next epoch. +Alternatively, if you can monitor events, look for [the epoch setup event](../../../staking/05-epoch-scripts-events.md#epochsetup) that gets emitted by the epoch contract. That event is emitted at the end of epoch N's staking auction and contains a list of node IDs that are confirmed for the next epoch. ## Step 4 - Start your node If your node was selected as part of Step 3, you can now start your node. -First you'll need to provision a machine or virtual machine to run your node software. Please see follow the [node-provisioning](./node-provisioning.mdx) guide for it. +First you'll need to provision a machine or virtual machine to run your node software. Please see follow the [node-provisioning](./node-provisioning.md) guide for it. The access node can be run as a docker container with the following command by replacing `nodeid` with your node ID and adjusting the other parameters as per your setup. @@ -287,7 +292,7 @@ docker run --rm \ --loglevel=error ``` -For a more mature setup, it is recommended that you run the container using systemd as described [here](./node-setup.mdx#systemd) +For a more mature setup, it is recommended that you run the container using systemd as described [here](./node-setup.md#systemd) > 🚀 The access node should now be up and running, and you should be able to query the node using Flow CLI or curl, @@ -301,7 +306,7 @@ curl http://localhost/v1/blocks?height=sealed ## Monitoring and Metrics -The node publishes several Prometheus metrics. See [Monitoring Node Health](./monitoring-nodes.mdx) to setup node monitoring. +The node publishes several Prometheus metrics. See [Monitoring Node Health](./monitoring-nodes.md) to setup node monitoring. ### Node Status @@ -338,17 +343,3 @@ The list can be retrieved from the chain by executing the [get_candidate_nodes]( ```shell $ flow scripts execute ./transactions/idTableStaking/scripts/get_candidate_nodes.cdc -n mainnet ``` - -### How to check the availability of open access nodes slots for the next epoch? - -The limits for the open slots are defined in the staking contract and can be queried from the chain by executing the [get_slot_limits](https://github.com/onflow/flow-core-contracts/blob/master/transactions/idTableStaking/scripts/get_slot_limits.cdc) script. - -Node types are defined [here](https://github.com/onflow/flow-core-contracts/blob/5696ec5e3e6aa5fc10762cbfeb42b9c5c0b8ddbe/contracts/FlowIDTableStaking.cdc#L114-L119) - -```shell - -$ flow scripts execute ./transactions/idTableStaking/scripts/get_slot_limits.cdc --args-json '[{ "type":"UInt8", "value":"5"}]' -n mainnet -Result: 118 -``` - -Currently, there are 113 access nodes already part of the network. Hence, the total number of new nodes that can join are 118 - 113 = 5. diff --git a/docs/references/run-and-secure/node-operation/byzantine-node-attack-response.mdx b/docs/architecture/node-ops/nodes/node-operation/byzantine-node-attack-response.md similarity index 99% rename from docs/references/run-and-secure/node-operation/byzantine-node-attack-response.mdx rename to docs/architecture/node-ops/nodes/node-operation/byzantine-node-attack-response.md index 95995ee835..7d7f900ef7 100644 --- a/docs/references/run-and-secure/node-operation/byzantine-node-attack-response.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/byzantine-node-attack-response.md @@ -2,6 +2,7 @@ title: Byzantine node attack response sidebar_label: Byzantine attack response description: How to respond to a byzantine node attack on the network +sidebar_position: 3 --- Flow, like most blockchains, forms an open decentralized peer-to-peer network between all of the nodes diff --git a/docs/references/run-and-secure/node-operation/choose_access_flowport.png b/docs/architecture/node-ops/nodes/node-operation/choose_access_flowport.png similarity index 100% rename from docs/references/run-and-secure/node-operation/choose_access_flowport.png rename to docs/architecture/node-ops/nodes/node-operation/choose_access_flowport.png diff --git a/docs/references/run-and-secure/node-operation/db-encryption-existing-operator.mdx b/docs/architecture/node-ops/nodes/node-operation/db-encryption-existing-operator.md similarity index 95% rename from docs/references/run-and-secure/node-operation/db-encryption-existing-operator.mdx rename to docs/architecture/node-ops/nodes/node-operation/db-encryption-existing-operator.md index 0c200b2569..ac0532f23f 100644 --- a/docs/references/run-and-secure/node-operation/db-encryption-existing-operator.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/db-encryption-existing-operator.md @@ -2,6 +2,7 @@ title: Database Encryption for Existing Node Operators sidebar_label: Database Encryption for Existing Node Operators description: Instructions for existing Node Operators to follow to create a machine account for their collection or consensus nodes. +sidebar_position: 4 --- In Mainnet14, the DKG (distributed key generation) is turned on, requiring storage of @@ -21,7 +22,7 @@ guide demonstrates how to enable encryption for this database for existing opera have been significant changes to it. -Follow the instructions [here](./node-bootstrap.mdx#download-the-bootstrapping-kit) +Follow the instructions [here](./node-bootstrap.md#download-the-bootstrapping-kit) to download the latest version of the bootstrapping kit, then return to this page. ## Generate Database Encryption Key diff --git a/docs/architecture/node-ops/nodes/node-operation/epoch-startup-order.png b/docs/architecture/node-ops/nodes/node-operation/epoch-startup-order.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb6727ec0ee5337f6198f21dbe891a027a64d0b GIT binary patch literal 96574 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 z
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 literal 0 HcmV?d00001 diff --git a/docs/references/run-and-secure/node-operation/flow-architecture.png b/docs/architecture/node-ops/nodes/node-operation/flow-architecture.png similarity index 100% rename from docs/references/run-and-secure/node-operation/flow-architecture.png rename to docs/architecture/node-ops/nodes/node-operation/flow-architecture.png diff --git a/docs/architecture/node-ops/nodes/node-operation/guides/_category_.yml b/docs/architecture/node-ops/nodes/node-operation/guides/_category_.yml new file mode 100644 index 0000000000..691f0b14c6 --- /dev/null +++ b/docs/architecture/node-ops/nodes/node-operation/guides/_category_.yml @@ -0,0 +1,2 @@ +label: Node Operations Guide +position: 5 \ No newline at end of file diff --git a/docs/references/run-and-secure/node-operation/guides/genesis-bootstrap.mdx b/docs/architecture/node-ops/nodes/node-operation/guides/genesis-bootstrap.md similarity index 96% rename from docs/references/run-and-secure/node-operation/guides/genesis-bootstrap.mdx rename to docs/architecture/node-ops/nodes/node-operation/guides/genesis-bootstrap.md index c0769c039c..605114ad1e 100644 --- a/docs/references/run-and-secure/node-operation/guides/genesis-bootstrap.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/guides/genesis-bootstrap.md @@ -20,7 +20,7 @@ The Flow consensus algorithm depends on there always being a previous block, whi The bootstrapping process will be in 2 phases, with the Flow team signing the Genesis block between the two. - The bootstrapping process deals with a number of different keys. Make sure you understand their usage and terminology by reviewing the [Node Keys Guide](../node-bootstrap.mdx#generating-your-node-id). + The bootstrapping process deals with a number of different keys. Make sure you understand their usage and terminology by reviewing the [Node Keys Guide](../node-bootstrap.md#generating-your-node-id). ## Download the Bootstrapping Toolkit @@ -34,7 +34,7 @@ Both phases of the bootstrapping are automated with scripts. Pull a copy onto ea ## Generate Your Node Keys -Start the bootstrapping process by generating your Staking Key and Networking Key. Use your Node Address that you generated in [Setting Up a Node](../node-setup.mdx) in the `--address` flag, and the node role. +Start the bootstrapping process by generating your Staking Key and Networking Key. Use your Node Address that you generated in [Setting Up a Node](../node-setup.md) in the `--address` flag, and the node role. Your Node Address must be a publicly routable IPv4 address or valid DNS name that points to your node. This is how other nodes in the network will communicate with you. @@ -57,7 +57,7 @@ Start the bootstrapping process by generating your Staking Key and Networking Ke This command generates two keys, a Staking Key and a Network Key, and stores them both in a `.node-info` file. Both these keys are needed during runtime and must be present as a file to start your flow node. -For more details around all the keys that are needed to run nodes and their usage, see the [Node Keys](../node-bootstrap.mdx#generating-your-node-id) overview. +For more details around all the keys that are needed to run nodes and their usage, see the [Node Keys](../node-bootstrap.md#generating-your-node-id) overview. The bootstrapping process will create a file structure similar to the following @@ -112,7 +112,7 @@ Join the [Flow discord server](https://chat.onflow.org) if you haven't already a For the Genesis Block, your nodes will start pre-staked, which means no action on your part is needed to get your nodes staked. - For more details on staking check the guide on [Staking and Rewards](../../staking/08-staking-rewards.md). + For more details on staking check the guide on [Staking and Rewards](../../../../staking/08-staking-rewards.md). ## Receive Your Random Beacon Keys diff --git a/docs/references/run-and-secure/node-operation/guides/spork-practice.mdx b/docs/architecture/node-ops/nodes/node-operation/guides/spork-practice.md similarity index 98% rename from docs/references/run-and-secure/node-operation/guides/spork-practice.mdx rename to docs/architecture/node-ops/nodes/node-operation/guides/spork-practice.md index a1042b27b7..c5fb419f91 100644 --- a/docs/references/run-and-secure/node-operation/guides/spork-practice.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/guides/spork-practice.md @@ -6,7 +6,7 @@ title: Spork Practice The actual process of Sporking will mostly be covered by the Node Operators Quick Guide, and will not be covered here. -[Spork](../spork.mdx) +[Spork](../spork.md) Instead, we'll aim to give some instructions for those that want to Practice the process themselves, before joining the Mainnet Spork. @@ -42,7 +42,7 @@ And generate the bootstrapping folder required to start up your nodes. Once you have the bootstrapping folder, you'll be able to start up all the nodes that were included in the bootstrapping process. -[Node Setup Docker](../node-setup.mdx#docker) +[Node Setup Docker](../node-setup.md#docker) The startup command will look very similar to what is provided in the quick guide. One such example, assuming we named our bootstrap folder `bootstrap`: diff --git a/docs/references/run-and-secure/node-operation/guides/starting-nodes.mdx b/docs/architecture/node-ops/nodes/node-operation/guides/starting-nodes.md similarity index 95% rename from docs/references/run-and-secure/node-operation/guides/starting-nodes.mdx rename to docs/architecture/node-ops/nodes/node-operation/guides/starting-nodes.md index 16c2847f52..07f20adf9e 100644 --- a/docs/references/run-and-secure/node-operation/guides/starting-nodes.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/guides/starting-nodes.md @@ -6,16 +6,16 @@ Prior to starting up your nodes make sure you have the following items completed 1. Bootstrap process completed with the bootstrap directory handy (default: `/var/flow/bootstrap`) 2. Flow `data` directory created (default: `/var/flow/data`) -3. [node config](../node-bootstrap.mdx) ready +3. [node config](../node-bootstrap.md) ready 4. Firewall exposes TCP/3569, and if you are running `access` node also the GRPC port (default: TCP/9000) -For more details head back to [Setting up your node](../node-setup.mdx#prepare-your-node-to-start) +For more details head back to [Setting up your node](../node-setup.md#prepare-your-node-to-start) When you have all the above completed, you can start your Flow node via `systemd` or `docker`. ## systemd -Ensure that you downloaded the systemd unit file. If you haven't, follow the [Set your node to start](../node-setup.mdx#prepare-your-node-to-start) guide to get your unit file and enabled. +Ensure that you downloaded the systemd unit file. If you haven't, follow the [Set your node to start](../node-setup.md#prepare-your-node-to-start) guide to get your unit file and enabled. Once you have your Flow service enabled you can now start your service: `systemctl start flow` diff --git a/docs/references/run-and-secure/node-operation/hcu.md b/docs/architecture/node-ops/nodes/node-operation/hcu.md similarity index 95% rename from docs/references/run-and-secure/node-operation/hcu.md rename to docs/architecture/node-ops/nodes/node-operation/hcu.md index 380bae2cf9..08bc111895 100644 --- a/docs/references/run-and-secure/node-operation/hcu.md +++ b/docs/architecture/node-ops/nodes/node-operation/hcu.md @@ -10,7 +10,7 @@ feature implementations and security fixes. ## HCU versus Spork -A [spork](./spork.mdx) requires a coordinated network upgrade process where node operators upgrade their node software and +A [spork](./spork.md) requires a coordinated network upgrade process where node operators upgrade their node software and re-initialize with a consolidated representation of the previous spork's state. It is used to roll out changes which may be non-backward compatible with respect to the protocol and the execution state. Spork entails a network downtime as all nodes in the system are upgraded and brought back online. diff --git a/docs/references/run-and-secure/node-operation/machine-existing-operator.mdx b/docs/architecture/node-ops/nodes/node-operation/machine-existing-operator.md similarity index 93% rename from docs/references/run-and-secure/node-operation/machine-existing-operator.mdx rename to docs/architecture/node-ops/nodes/node-operation/machine-existing-operator.md index 2e20c2624a..f562eb3495 100644 --- a/docs/references/run-and-secure/node-operation/machine-existing-operator.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/machine-existing-operator.md @@ -2,10 +2,11 @@ title: Machine Accounts for Existing Node Operators sidebar_label: Machine Accounts for Existing Node Operators description: Instructions for existing Node Operators to follow to create a machine account for their collection or consensus nodes. +sidebar_position: 6 --- -The [Flow Epoch Preparation Protocol](../staking/04-epoch-preparation.mdx) requires that -`collection` and `consensus` nodes use an automated [machine account](../staking/09-qc-dkg.mdx#machine-accounts) +The [Flow Epoch Preparation Protocol](../../../staking/04-epoch-preparation.md) requires that +`collection` and `consensus` nodes use an automated [machine account](../../../staking/09-qc-dkg.md#machine-accounts) to participate in important processes required to start the next epoch. (QC and DKG, respectively) Starting on Thursday, August 26th 2021, all collector and consensus nodes who register with Flow Port will @@ -31,7 +32,7 @@ This guide will walk you through creating a Machine Account and getting it set u have been significant changes to it. -Follow the instructions [here](./node-bootstrap.mdx#download-the-bootstrapping-kit) +Follow the instructions [here](./node-bootstrap.md#download-the-bootstrapping-kit) to download the latest version of the bootstrapping kit, then return to this page. ## Generate Machine Account key @@ -69,7 +70,7 @@ $tree ./bootstrap/ ## Create Machine Account You will now need to copy the Machine account public key displayed in the terminal output and -head over to [Flow Port](../../../references/run-and-secure/nodes/flow-port/staking-guide.md#existing-node-operators) to submit a transaction to create a Machine Account. +head over to [Flow Port](../../../../references/run-and-secure/nodes/flow-port/staking-guide.md#existing-node-operators) to submit a transaction to create a Machine Account. For example, from the example above, we would copy `f847...` from this line: ```shell Example diff --git a/docs/references/run-and-secure/node-operation/monitoring-nodes.mdx b/docs/architecture/node-ops/nodes/node-operation/monitoring-nodes.md similarity index 99% rename from docs/references/run-and-secure/node-operation/monitoring-nodes.mdx rename to docs/architecture/node-ops/nodes/node-operation/monitoring-nodes.md index d6f7bafcb5..e9e30da26a 100644 --- a/docs/references/run-and-secure/node-operation/monitoring-nodes.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/monitoring-nodes.md @@ -1,6 +1,7 @@ --- title: Monitoring Node Health sidebar_label: Node Monitoring +sidebar_position: 7 --- A Flow node generates logs and publishes metrics as it runs. These logs and metrics can be used to gain insights into the health of the node. diff --git a/docs/references/run-and-secure/node-operation/node-bootstrap.mdx b/docs/architecture/node-ops/nodes/node-operation/node-bootstrap.md similarity index 96% rename from docs/references/run-and-secure/node-operation/node-bootstrap.mdx rename to docs/architecture/node-ops/nodes/node-operation/node-bootstrap.md index dc2b65d5b1..23cd5846f4 100644 --- a/docs/references/run-and-secure/node-operation/node-bootstrap.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/node-bootstrap.md @@ -2,16 +2,17 @@ title: Node Bootstrap sidebar_label: Node Bootstrapping description: How to get started running a node on Flow +sidebar_position: 8 --- -This guide is for getting a new node staked and running on Flow other than a permissionless Access node. For running a permissionless Access node see [Access node setup](./access-node-setup.md). For sporking documentation for existing node operators, see [Spork Process](./spork.mdx). +This guide is for getting a new node staked and running on Flow other than a permissionless Access node. For running a permissionless Access node see [Access node setup](./access-node-setup.md). For sporking documentation for existing node operators, see [Spork Process](./spork.md). ## Timing New nodes are able to join the network each time a new epoch begins. In order to join the network at epoch N+1, the node must be registered with sufficient stake and authorized by the service account prior to the end of epoch N's Staking Auction Phase. -Confirmation of a new node's inclusion in epoch N+1 is included in the [`EpochSetup` event](../staking/05-epoch-scripts-events.md#epochsetup). +Confirmation of a new node's inclusion in epoch N+1 is included in the [`EpochSetup` event](../../../staking/05-epoch-scripts-events.md#epochsetup). Nodes registered for epoch N+1 are able to participate in network communication on a limited basis starting in the `Epoch Setup Phase` of epoch N. @@ -20,7 +21,7 @@ Nodes registered for epoch N+1 are able to participate in network communication Once registered and confirmed to join the network at epoch N+1, the node must start up **before** epoch N+1 begins. * Verification & Access nodes may start up any time during the `Epoch Setup Phase`. * Consensus & Collection nodes must start up within the first **1000 views (~30mins)** -of the `Epoch Setup Phase` to participate in the [Epoch Preparation Protocol](../staking/04-epoch-preparation.mdx#phase-1-epoch-setup). +of the `Epoch Setup Phase` to participate in the [Epoch Preparation Protocol](../../../staking/04-epoch-preparation.md#phase-1-epoch-setup). ## Step 1 - Run Genesis Bootstrap @@ -136,7 +137,7 @@ For all other node types this will not be needed. If you are running a collection and consensus node, you will have an additional private key file (`node-machine-account-key.priv.json`) which contains the private key for your node's machine account. You can learn more about machine -accounts [here](../staking/machine-account). +accounts [here](../../../staking/11-machine-account.md). In Step 2 of this guide, when you submit a transaction to stake your node, you will need to provide the machine account public key, which can be found in the output of the previous `bootstrap key` command. @@ -246,11 +247,11 @@ $ ./boot-tools/transit push-transit-key -b ./bootstrap -t mainnet-x-organization ## Step 3 - Start Your Flow Node -Ensure you have configured your node using the [Node Setup guide](./node-setup.mdx). +Ensure you have configured your node using the [Node Setup guide](./node-setup.md). ### Confirming authorization -You can confirm your node's successful registration and authorization by executing a Cadence script to query the [Staking Contract](../../../references/core-contracts/06-staking-contract-reference.md#contract). +You can confirm your node's successful registration and authorization by executing a Cadence script to query the [Staking Contract](../../../../references/core-contracts/06-staking-contract-reference.md#contract). At the end of the `Staking Auction Phase`, the members of the Proposed Identity Table are confirmed as authorized participants in the next epoch. Therefore, if your node ID appears in the Proposed Identity Table during the `Staking Auction Phase`, your node will be a participant in the next epoch. @@ -291,7 +292,7 @@ Once the node has bootstrapped, these flags may be removed. ### Manually Provisioned Root Snapshot You can also provision the root snapshot file manually, then start the node without configuring Dynamic Startup. -A snapshot can be obtained from any Access Node using [Flow CLI](../../../tools/flow-cli/index.md). +A snapshot can be obtained from any Access Node using [Flow CLI](../../../../tools/flow-cli/index.md). ```shell RetrieveRootSnapshot flow snapshot save /path/to/root/snapshot --network mainnet ``` @@ -304,9 +305,9 @@ The snapshot must be within the `Epoch Setup Phase`. -Since Collection and Consensus Nodes must start up in the first ~30mins of the `Epoch Setup Phase` (see [Timing](./node-bootstrap.mdx#timing)), +Since Collection and Consensus Nodes must start up in the first ~30mins of the `Epoch Setup Phase` (see [Timing](./node-bootstrap.md#timing)), the snapshot must be provisioned within this time window. -Once a valid root snapshot file is downloaded to the node's bootstrap folder, it can be started (see [guide](./node-setup.mdx#start-the-node)) +Once a valid root snapshot file is downloaded to the node's bootstrap folder, it can be started (see [guide](./node-setup.md#start-the-node)) diff --git a/docs/references/run-and-secure/node-operation/node-migration.mdx b/docs/architecture/node-ops/nodes/node-operation/node-migration.md similarity index 85% rename from docs/references/run-and-secure/node-operation/node-migration.mdx rename to docs/architecture/node-ops/nodes/node-operation/node-migration.md index 76e820d882..b6a313086a 100644 --- a/docs/references/run-and-secure/node-operation/node-migration.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/node-migration.md @@ -1,6 +1,7 @@ --- title: Node Migration description: How to migrate a Flow node from one machine to another +sidebar_position: 9 --- There are a few different methods to migrate a running Flow node from one machine to the other. @@ -15,21 +16,25 @@ If there is no change to the network address or the staking and networking keys 3. Copy over the data folder (typically under `/var/flow/data`) which contains the state data. 4. Start the new node on the same network address as the old one. - +:::warning + Please ensure that there is minimal downtime during this migration. - - +::: + +:::warning + The network address is currently part of the staking data that was submitted for the node. It is how other nodes in the network discover this node. Hence, the network address of the node must stay the same between epochs otherwise the node will become unreachable for the other nodes and stop functioning. - + +::: ### Method 2 - Network address change A change to the node network address (IP or a hostname) can only be done during the spork process. To change the networking address: -1. A day before the [upcoming mainnet spork](./upcoming-sporks), change the network address for the nodes in Flow Port (using the update network address feature). +1. A day before the [upcoming mainnet spork](./upcoming-sporks.md), change the network address for the nodes in Flow Port (using the update network address feature). The change will not take effect till an epoch transition happens. 2. Change the addresses in the `/var/flow/bootstrap/private-root-information/private-node-info_/node-info.priv.json` json file on the node. 3. A spork also causes an epoch transition, and the new addresses will take effect after the spork immediately. @@ -40,9 +45,11 @@ If the node after migration will be using new staking or networking keys then it 1. Unstake the node via Flow Port. 2. Register the new node via Flow Port with the new staking information. -3. Run the new node with the new keys and network address. It should be able to join the network at the next epoch (see [timing](./node-bootstrap.mdx#timing)) +3. Run the new node with the new keys and network address. It should be able to join the network at the next epoch (see [timing](./node-bootstrap.md#timing)) + +:::warning - -Unstaking a node will result in the node [not earning rewards](../staking/06-technical-overview.mdx#staking-operations-available-to-all-stakers) for the next epoch. +Unstaking a node will result in the node [not earning rewards](../../../staking/06-technical-overview.md#staking-operations-available-to-all-stakers) for the next epoch. Delegators to the old node will have their tokens unstaked automatically. They will also stop earning rewards unless they withdraw their unstaked tokens and delegate them to a different node. - \ No newline at end of file + +::: diff --git a/docs/architecture/node-ops/nodes/node-operation/node-providers.md b/docs/architecture/node-ops/nodes/node-operation/node-providers.md new file mode 100644 index 0000000000..c2163b030d --- /dev/null +++ b/docs/architecture/node-ops/nodes/node-operation/node-providers.md @@ -0,0 +1,27 @@ +--- +sidebar_position: 18 +description: | + Easy access to Flow's blockchain. Providers handle the technical work, letting you use Flow's features without managing nodes yourself. +sidebar_custom_props: + icon: 📚 +--- + +# Node Providers + +## Quick Node + +[QuickNode](https://www.quicknode.com/chains/flow) offers convenient access to Flow's blockchain infrastructure, allowing developers and businesses to utilize Flow's capabilities without the complexities of managing nodes themselves. It offers reliable and fast connectivity to blockchain networks, sparing users from the resource-intensive task of running their own full nodes. + +### Supported Networks + +- Testnet +- Mainnet + +## Tatum + +[Tatum](https://tatum.io/) provides a comprehensive platform that simplifies the process of building, testing, and deploying blockchain applications. With Tatum, users can access infrastructure, an SDK, and a unified API to develop blockchain apps without the need to handle individual blockchain node configuration or maintenance. + +### Supported Networks + +- Testnet +- Mainnet \ No newline at end of file diff --git a/docs/references/run-and-secure/node-operation/node-provisioning.mdx b/docs/architecture/node-ops/nodes/node-operation/node-provisioning.md similarity index 98% rename from docs/references/run-and-secure/node-operation/node-provisioning.mdx rename to docs/architecture/node-ops/nodes/node-operation/node-provisioning.md index 3fb5be7da7..bf509815f7 100644 --- a/docs/references/run-and-secure/node-operation/node-provisioning.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/node-provisioning.md @@ -2,11 +2,12 @@ title: Provisioning a Flow node sidebar_label: Node Provisioning description: Hardware, networking and Operating system setup for a Flow node +sidebar_position: 10 --- ## Hardware Requirements -The hardware your Node will need varies depending on the role your Node will play in the Flow network. For an overview of the differences see the [Node Roles Overview](./node-roles.mdx). +The hardware your Node will need varies depending on the role your Node will play in the Flow network. For an overview of the differences see the [Node Roles Overview](./node-roles.md). | Node Type | CPU | Memory | Disk | Example GCP Instance | Example AWS Instance | |:----------------:| ---------:| ------:| ------:|:--------------:|:--------------:| @@ -99,7 +100,7 @@ As a rough benchmark for planning storage capacity, each Flow block will grow th ### Confidential Data & Files Flow stores dynamically generated confidential data in a separate database. We strongly recommend enabling encryption -for this database - see [this guide](./db-encryption-existing-operator.mdx) for instructions. +for this database - see [this guide](./db-encryption-existing-operator.md) for instructions. Confidential information used by Flow is stored in the `private-root-information` subtree of the `bootstrap` folder. In particular: diff --git a/docs/references/run-and-secure/node-operation/node-roles.mdx b/docs/architecture/node-ops/nodes/node-operation/node-roles.md similarity index 99% rename from docs/references/run-and-secure/node-operation/node-roles.mdx rename to docs/architecture/node-ops/nodes/node-operation/node-roles.md index 2daefb4602..ebc3c92c88 100644 --- a/docs/references/run-and-secure/node-operation/node-roles.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/node-roles.md @@ -1,5 +1,6 @@ --- title: Node Roles +sidebar_position: 11 --- Unlike most blockchains, not all Flow nodes are equal. Flow nodes all specialize and fulfill a specific role in the operation of the network. @@ -51,7 +52,7 @@ Access nodes are required to stake 100 FLOW to be a confirmed node operator. How An observer node provides locally accessible, continuously updated, verified copy of the block data. It serves the Access API but unlike an access node, an observer node does not need to be staked, and **anyone** can run it without being added to the approved list of nodes. -[Get started running an observer node](./observer-node.mdx) +[Get started running an observer node](./observer-node.md) ## Archive diff --git a/docs/references/run-and-secure/node-operation/node-setup.mdx b/docs/architecture/node-ops/nodes/node-operation/node-setup.md similarity index 95% rename from docs/references/run-and-secure/node-operation/node-setup.mdx rename to docs/architecture/node-ops/nodes/node-operation/node-setup.md index 95471ce2fe..2b90f7d3b2 100644 --- a/docs/references/run-and-secure/node-operation/node-setup.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/node-setup.md @@ -2,12 +2,13 @@ title: Setting Up a Flow Node sidebar_label: Node Setup description: How to run a Collection, Consensus, Verification and Execution node +sidebar_position: 12 --- This guide is for running a Collection, Consensus, Verification and Execution node. If you are planning to run an Access node then refer to [access node setup](./access-node-setup.md). -First you'll need to provision a machine or virtual machine to run your node software. Please see follow the [node-provisioning](./node-provisioning.mdx) guide for it. +First you'll need to provision a machine or virtual machine to run your node software. Please see follow the [node-provisioning](./node-provisioning.md) guide for it. ## Pull the Flow Images @@ -71,14 +72,18 @@ git pull origin master If you are not using Systemd, sample commands for running each Docker container are below. Be sure to replace `/path/to/data` and `/path/to/bootstrap` with the appropriate paths you are using. - +:::warning + Do not run your node using `docker run` command directly without a mechanism for the node to automatically restart following a crash. - - - The actual Docker image tag can be found [here](./past-sporks.mdx) for appropriate spork. - +::: + +:::info + +The actual Docker image tag can be found [here](./past-sporks.md) for appropriate spork. + +::: ### System Configuration @@ -249,13 +254,13 @@ Now that your node is provisioned and configured, it can be started. -Before starting your node, ensure it is [registered](./node-bootstrap.mdx#step-2---stake-your-node) and [authorized](./node-bootstrap.mdx#confirming-authorization). +Before starting your node, ensure it is [registered](./node-bootstrap.md#step-2---stake-your-node) and [authorized](./node-bootstrap.md#confirming-authorization). Ensure you start your node at the appropriate time. -See [Spork Process](./spork.mdx) for when to start up a node following a spork. -See [Node Bootstrap](./node-bootstrap.mdx#timing) for when to start up a newly registered node. +See [Spork Process](./spork.md) for when to start up a node following a spork. +See [Node Bootstrap](./node-bootstrap.md#timing) for when to start up a newly registered node. ### Systemd @@ -298,7 +303,7 @@ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ## Monitoring and Metrics -This is intended for operators who would like to see what their Flow nodes are currently doing. Head over to [Monitoring Node Health](./monitoring-nodes.mdx) to get setup. +This is intended for operators who would like to see what their Flow nodes are currently doing. Head over to [Monitoring Node Health](./monitoring-nodes.md) to get setup. ### Node Status diff --git a/docs/references/run-and-secure/node-operation/node_details_permissionless_an.png b/docs/architecture/node-ops/nodes/node-operation/node_details_permissionless_an.png similarity index 100% rename from docs/references/run-and-secure/node-operation/node_details_permissionless_an.png rename to docs/architecture/node-ops/nodes/node-operation/node_details_permissionless_an.png diff --git a/docs/references/run-and-secure/node-operation/observer-node.mdx b/docs/architecture/node-ops/nodes/node-operation/observer-node.md similarity index 96% rename from docs/references/run-and-secure/node-operation/observer-node.mdx rename to docs/architecture/node-ops/nodes/node-operation/observer-node.md index 35ffa6674f..6fadf431bd 100644 --- a/docs/references/run-and-secure/node-operation/observer-node.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/observer-node.md @@ -1,9 +1,10 @@ --- title: Light Node a.k.a Observer Node sidebar_label: Light Node +sidebar_position: 13 --- -A light node also known as the observer node is similar to an access node and provides a locally accessible, continuously updated, verified copy of the block data. It serves the [gRPC Access API](../../../references/run-and-secure/nodes/access-api.md) but unlike an access node, an light node does not need to be staked, and **anyone** can run it without being added to the approved list of nodes. +A light node also known as the observer node is similar to an access node and provides a locally accessible, continuously updated, verified copy of the block data. It serves the [gRPC Access API](../../nodes/access-api.md) but unlike an access node, an light node does not need to be staked, and **anyone** can run it without being added to the approved list of nodes. The light node bootstraps by connecting to an access node and becoming part of the public network comprised of access nodes and other light nodes. It then continuously receives blocks, which the consensus nodes are adding to the chain, either directly from access nodes or from other light nodes that are part of the public network. However, it makes no trust assumption of the upstream access node or the light node which is providing the block and locally verifies that the blocks that are received are the correct extension of the chain e.g. after receiving valid blocks A, B and C when it receives block D, it verifies that block D is indeed signed by the consensus nodes and is a valid next block. The received block data is indexed and made available via the Access API. For Collection, Transactions and Account queries, it delegates those requests to the upstream access node. Similarly, transactions and scripts sent to a light node are also forwarded to the upstream access node. Future versions of the light node will be able to serve this data locally as well. @@ -72,7 +73,7 @@ curl -sL -O storage.googleapis.com/flow-genesis-bootstrap/boot-tools-intel-mac.t #### Step 3 - Download the root-protocol-state-snapshot.json file for the current spork -The `root-protocol-state-snapshot.json` is generated for each [spork](./spork.mdx) and contains the genesis data for that spork. +The `root-protocol-state-snapshot.json` is generated for each [spork](./spork.md) and contains the genesis data for that spork. It is published and made available after each spork. The download location is specified [here](https://github.com/onflow/flow/blob/master/sporks.json) under [rootProtocolStateSnapshot](https://github.com/onflow/flow/blob/master/sporks.json#L16) and can be downloaded as follows, For mainnet find the latest spork version from [sporks.json](https://github.com/onflow/flow/blob/master/sporks.json) and then download the `root-protocol-state-snapshot.json` and the signature file for it. @@ -114,7 +115,7 @@ Primary key fingerprint: 7D23 8D1A E6D3 2A71 8ECD 8611 CB52 64F7 FD4C DD27 Subkey fingerprint: 40CD 9571 7AC4 63E6 1EE3 B285 B718 CA31 0EDB 542F ``` -Alternately, if you don't care about the blocks before the current block, you can request the current root-snapshot file via the [Flow CLI](../../../tools/flow-cli/index.md). +Alternately, if you don't care about the blocks before the current block, you can request the current root-snapshot file via the [Flow CLI](../../../../tools/flow-cli/index.md). For mainnet ```shell @@ -206,7 +207,7 @@ e.g. querying the REST API endpoint using curl curl "http://localhost/v1/blocks?height=sealed" ``` -The light node, like the other type of Flow nodes, also produces Prometheus metrics that can be used to monitor node health. More on that [here](./node-setup.mdx#monitoring-and-metrics) +The light node, like the other type of Flow nodes, also produces Prometheus metrics that can be used to monitor node health. More on that [here](./node-setup.md#monitoring-and-metrics) ## FAQs @@ -259,4 +260,4 @@ Access-004: * Public Key: `0d1523612be854638b985fc658740fa55f009f3cd49b739961ab082dc91b178ed781ef5f66878613b4d34672039150abfd9c8cfdfe48c565bca053fa4db30bec` While the public keys remain the same, the hostnames change each spork to include the spork name. Substitute `[current mainnet spork]` and `[current devnet spork]` with the appropriate spork name (e.g. `mainnet20`). -See [Past Sporks](./past-sporks.mdx) for the current spork for each network. \ No newline at end of file +See [Past Sporks](./past-sporks.md) for the current spork for each network. \ No newline at end of file diff --git a/docs/references/run-and-secure/node-operation/observer.png b/docs/architecture/node-ops/nodes/node-operation/observer.png similarity index 100% rename from docs/references/run-and-secure/node-operation/observer.png rename to docs/architecture/node-ops/nodes/node-operation/observer.png diff --git a/docs/references/run-and-secure/node-operation/past-sporks.mdx b/docs/architecture/node-ops/nodes/node-operation/past-sporks.md similarity index 99% rename from docs/references/run-and-secure/node-operation/past-sporks.mdx rename to docs/architecture/node-ops/nodes/node-operation/past-sporks.md index cbeddd014b..4c720c7c35 100644 --- a/docs/references/run-and-secure/node-operation/past-sporks.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/past-sporks.md @@ -1,6 +1,7 @@ --- title: Past Spork Info description: Information about all Flow Mainnet and Testnet sporks. +sidebar_position: 14 --- A JSON version of the information below can be found in [onflow/flow/sporks.json](https://github.com/onflow/flow/blob/master/sporks.json) diff --git a/docs/references/run-and-secure/nodes/slashing.md b/docs/architecture/node-ops/nodes/node-operation/slashing.md similarity index 99% rename from docs/references/run-and-secure/nodes/slashing.md rename to docs/architecture/node-ops/nodes/node-operation/slashing.md index 43f2e9ffef..bf63473332 100644 --- a/docs/references/run-and-secure/nodes/slashing.md +++ b/docs/architecture/node-ops/nodes/node-operation/slashing.md @@ -1,5 +1,6 @@ --- title: Slashing Conditions +sidebar_position: 17 --- ## Introduction @@ -31,7 +32,7 @@ by providing bonuses to the most performant nodes and withholding payments to no This document assumes a working understanding of the high-level architecture of the Flow blockchain. Readers who are new to Flow or those looking for a refresher are encouraged -to read the Protocol Summary [here](../node-operation/node-roles.mdx) and the staking documentation. +to read the Protocol Summary [here](../node-operation/node-roles.md) and the staking documentation. ## Slashing Conditions diff --git a/docs/references/run-and-secure/node-operation/spork.mdx b/docs/architecture/node-ops/nodes/node-operation/spork.md similarity index 92% rename from docs/references/run-and-secure/node-operation/spork.mdx rename to docs/architecture/node-ops/nodes/node-operation/spork.md index 6eae5fb990..1c71c3c22c 100644 --- a/docs/references/run-and-secure/node-operation/spork.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/spork.md @@ -1,6 +1,7 @@ --- title: Spork Process description: What to do during a spork +sidebar_position: 15 --- ## Overview @@ -11,10 +12,10 @@ on the Flow Protocol and minimizes the impact of breaking changes. The Flow network sporks approximately once every two months. Upcoming sporks are announced in advance on the `#flow-validators-announcements` **Discord** channel -and in [Upcoming Sporks](./upcoming-sporks.mdx). The `#flow-validators-announcements` channel is +and in [Upcoming Sporks](./upcoming-sporks.md). The `#flow-validators-announcements` channel is also used to coordinate during the spork process. -This guide is for existing operators participating in a spork. See [Node Bootstrap](./node-bootstrap.mdx) +This guide is for existing operators participating in a spork. See [Node Bootstrap](./node-bootstrap.md) for a guide to joining the network for the first time. ## Step 1 - Cleaning Up Previous Spork State @@ -42,7 +43,7 @@ Once you receive an announcement that the spork process is complete (via Discord -The Flow team will provide you a new token `PULL_TOKEN` to pull the genesis info from. (Please do NOT use the original Token that you used in Step 1) The `YOUR_NODE_TYPE` must be the same ones that you used when initially [setting up your node](./node-bootstrap.mdx#generate-your-node-keys) +The Flow team will provide you a new token `PULL_TOKEN` to pull the genesis info from. (Please do NOT use the original Token that you used in Step 1) The `YOUR_NODE_TYPE` must be the same ones that you used when initially [setting up your node](./node-bootstrap.md#generate-your-node-keys) @@ -76,7 +77,7 @@ $ tree ./bootstrap/ 4. Update the `FLOW_GO_NODE_ID` inside [runtime-conf.env](https://github.com/onflow/flow-go/blob/master/deploy/systemd-docker/runtime-conf.env) to the `node-id` that you got from the previous step 5. Start your Flow node via `docker` or `systemd` -See [Node Bootstrap](./node-bootstrap.mdx) for detailed information on Docker/Systemd configuration. +See [Node Bootstrap](./node-bootstrap.md) for detailed information on Docker/Systemd configuration. ## Common Issues @@ -92,6 +93,6 @@ This error is OK. Your fellow node operators have not turned on/joined the netwo ### Flow Node Not Booting Up -If your Flow node is not able to boot up, or it exits right after it boots up. You will need to do a [clean up of your state](./node-bootstrap.mdx#step-0---cleaning-up-your-previous-state). +If your Flow node is not able to boot up, or it exits right after it boots up. You will need to do a [clean up of your state](./node-bootstrap.md#step-0---cleaning-up-your-previous-state). After cleaning up the state try booting it up again. If the problem persists, message a member from the Flow team on Discord. diff --git a/docs/references/run-and-secure/node-operation/transaction_register_node_permissionless_an.png b/docs/architecture/node-ops/nodes/node-operation/transaction_register_node_permissionless_an.png similarity index 100% rename from docs/references/run-and-secure/node-operation/transaction_register_node_permissionless_an.png rename to docs/architecture/node-ops/nodes/node-operation/transaction_register_node_permissionless_an.png diff --git a/docs/references/run-and-secure/node-operation/upcoming-sporks.mdx b/docs/architecture/node-ops/nodes/node-operation/upcoming-sporks.md similarity index 99% rename from docs/references/run-and-secure/node-operation/upcoming-sporks.mdx rename to docs/architecture/node-ops/nodes/node-operation/upcoming-sporks.md index 69e9a31318..1c0cde3472 100644 --- a/docs/references/run-and-secure/node-operation/upcoming-sporks.mdx +++ b/docs/architecture/node-ops/nodes/node-operation/upcoming-sporks.md @@ -1,6 +1,7 @@ --- title: Upcoming Sporks description: Information about upcoming Mainnet & Testnet sporks +sidebar_position: 16 --- The following are the upcoming Spork dates. These dates indicate the intention to Spork. Announcements will be made regarding any delays or changes to these dates in our developer [Discord server](http://discord.gg/flow). diff --git a/docs/references/run-and-secure/staking/02-epoch-terminology.mdx b/docs/architecture/staking/02-epoch-terminology.md similarity index 99% rename from docs/references/run-and-secure/staking/02-epoch-terminology.mdx rename to docs/architecture/staking/02-epoch-terminology.md index ab95fe8124..d49cac56a0 100644 --- a/docs/references/run-and-secure/staking/02-epoch-terminology.mdx +++ b/docs/architecture/staking/02-epoch-terminology.md @@ -106,7 +106,7 @@ Flow nodes treat them differently because they are being emitted by the service **Delegation Rewards Cut:** The percentage of a delegator's rewards that the node operators take. Initially set to 8%. **Epoch Payout:** The total amount of tokens paid in rewards at the end of an epoch. -This value will change as the supply of FLOW changes. See the [rewards page](./schedule) for more details. +This value will change as the supply of FLOW changes. See the [rewards page](./03-schedule.md) for more details. **Minimum Stake Requirement:** Each node type has a requirement for the minimum number of FLOW they have to commit to stake to be considered a valid node and receive rewards. If a node operator diff --git a/docs/references/run-and-secure/staking/03-schedule.mdx b/docs/architecture/staking/03-schedule.md similarity index 93% rename from docs/references/run-and-secure/staking/03-schedule.mdx rename to docs/architecture/staking/03-schedule.md index 61d415abd5..d6b0f378f6 100644 --- a/docs/references/run-and-secure/staking/03-schedule.mdx +++ b/docs/architecture/staking/03-schedule.md @@ -15,7 +15,7 @@ If any changes are proposed, the Flow community will be notified in advance. # Schedule -![Flow Epoch Schedule](epoch-phase-diagram.png) +![Flow Epoch Schedule](./epoch-phase-diagram.png) An Epoch is a period of time when the node operators in the network are constant. At epoch boundaries, newly staked node operators are able to join the network and existing node operators @@ -30,13 +30,13 @@ The exact timing of each epoch end is influenced by the number of blocks propose Therefore, epoch phase timing can very and will likely drift over time. **All quoted epoch end times are estimates and subject to some variance (up to several hours)**. -See [Epoch Preparation Protocol](./04-epoch-preparation.mdx#epoch-length) for details. +See [Epoch Preparation Protocol](./04-epoch-preparation.md#epoch-length) for details. **Staking Operations are disabled for approximately the last day of an epoch**, typically around 12:00pm (7:00pm UTC) on Tuesday every week until the next day around the same time. -See [Epoch Setup](./04-epoch-preparation.mdx#phase-1-epoch-setup) for more information on this phase. +See [Epoch Setup](./04-epoch-preparation.md#phase-1-epoch-setup) for more information on this phase. **Epoch Switchovers will happen around 12:00 pm PT on Wednesday (7:00 pm UTC)** every week. Please note exact epoch ending time vary based on the performance of the network @@ -52,7 +52,7 @@ for more information about rewards calculation and schedule. ## Staking Auction -The first, and longest phase of an epoch is the [staking auction](./04-epoch-preparation.mdx#phase-0-staking-auction). +The first, and longest phase of an epoch is the [staking auction](./04-epoch-preparation.md#phase-0-staking-auction). This phase is when nodes and delegators can register to stake and perform other staking operations such as staking more tokens or unstaking their existing tokens. None of these operations are fully executed until the **Epoch Switchover** though. @@ -61,8 +61,8 @@ None of these operations are fully executed until the **Epoch Switchover** thoug ## Epoch Setup and Epoch Commit -The [Epoch Setup](./04-epoch-preparation.mdx#phase-1-epoch-setup) -and [Epoch Commit](./04-epoch-preparation.mdx#phase-2-epoch-committed) +The [Epoch Setup](./04-epoch-preparation.md#phase-1-epoch-setup) +and [Epoch Commit](./04-epoch-preparation.md#phase-2-epoch-committed) phases are the final phases of the epoch, when node operators who have been included in the next epoch perform important setup functionailty to prepare for the next epoch. @@ -136,7 +136,7 @@ of the epoch in which you are participating in staking or delegation. For the first two years of its existence, the staking rewards payments were handled with manual transactions. You can find the history of those transactions including their arguments and IDs in the -[Pay Rewards Section](https://github.com/onflow/service-account/tree/main/transactions/pay-rewards +[Pay Rewards Section](https://github.com/onflow/service-account/tree/main/transactions/pay-rewards) of the Flow Service Account Repo. The dates correspond to the date when the rewards were paid at the end of an epoch and the network transitioned to a new epoch. diff --git a/docs/references/run-and-secure/staking/04-epoch-preparation.mdx b/docs/architecture/staking/04-epoch-preparation.md similarity index 99% rename from docs/references/run-and-secure/staking/04-epoch-preparation.mdx rename to docs/architecture/staking/04-epoch-preparation.md index 1b305b0e21..3ee71cd20b 100644 --- a/docs/references/run-and-secure/staking/04-epoch-preparation.mdx +++ b/docs/architecture/staking/04-epoch-preparation.md @@ -52,7 +52,7 @@ where the set of authorized nodes is constant (or can only shrink due to ejectio At an Epoch switchover, which is the time when the network transitions from one epoch to the next, the set of authorized nodes can change. For each of Flow's node roles, the Flow protocol admits a protocol-determined number of nodes. -For each Epoch, there is a [Staking Auction](./06-technical-overview.mdx) in which new potential node operators may submit Staking Commitments. +For each Epoch, there is a [Staking Auction](./06-technical-overview.md) in which new potential node operators may submit Staking Commitments. All this is completely smart-contract based and handled through conventional transactions. After the Staking Auction is over, the protocol determines which commitments to accept and which to reject. diff --git a/docs/references/run-and-secure/staking/04-stake-slashing.md b/docs/architecture/staking/04-stake-slashing.md similarity index 100% rename from docs/references/run-and-secure/staking/04-stake-slashing.md rename to docs/architecture/staking/04-stake-slashing.md diff --git a/docs/references/run-and-secure/staking/05-epoch-scripts-events.md b/docs/architecture/staking/05-epoch-scripts-events.md similarity index 93% rename from docs/references/run-and-secure/staking/05-epoch-scripts-events.md rename to docs/architecture/staking/05-epoch-scripts-events.md index 37b4196b1e..fd56328d36 100644 --- a/docs/references/run-and-secure/staking/05-epoch-scripts-events.md +++ b/docs/architecture/staking/05-epoch-scripts-events.md @@ -45,7 +45,7 @@ Consequently they are handled slightly differently than other protocol state upd The diagram below illustrates the steps each service event goes through to be included in the protocol state. -![Flow Service Event Diagram](epoch-service-event-diagram.png) +![Flow Service Event Diagram](./epoch-service-event-diagram.png) For conciseness, we say a service event is `sealed` when the block in which it was emitted is sealed, and we say a service event is `finalized` when the block containing the seal is finalized. @@ -175,7 +175,7 @@ pub struct EpochMetadata { The `FlowEpoch` smart contract provides a public function, `FlowEpoch.getEpochMetadata()` to query the metadata for a particular epoch. -You can use the **Get Epoch Metadata**([EP.01](../../core-contracts/07-epoch-contract-reference.md#getting-epoch-info)) script +You can use the **Get Epoch Metadata**([EP.01](../../references/core-contracts/07-epoch-contract-reference.md#getting-epoch-info)) script with the following arguments: | Argument | Type | Description | @@ -207,7 +207,7 @@ pub struct Config { } ``` -You can use the **Get Configurable Metadata**([EP.02](../../core-contracts/07-epoch-contract-reference.md#getting-epoch-info)) script +You can use the **Get Configurable Metadata**([EP.02](../../references/core-contracts/07-epoch-contract-reference.md#getting-epoch-info)) script to get the list of configurable metadata: This script does not require any arguments. @@ -216,7 +216,7 @@ This script does not require any arguments. The `FlowEpoch` smart contract always tracks the counter of the current epoch. -You can use the **Get Epoch Counter**([EP.03](../../core-contracts/07-epoch-contract-reference.md#getting-epoch-info)) script +You can use the **Get Epoch Counter**([EP.03](../../references/core-contracts/07-epoch-contract-reference.md#getting-epoch-info)) script to get the current epoch counter. This script does not require any arguments. @@ -233,7 +233,7 @@ pub enum EpochPhase: UInt8 { } ``` -You can use the **Get Epoch Phase**([EP.04](../../core-contracts/07-epoch-contract-reference.md#getting-epoch-info)) script +You can use the **Get Epoch Phase**([EP.04](../../references/core-contracts/07-epoch-contract-reference.md#getting-epoch-info)) script to get the current epoch phase. This script does not require any arguments. \ No newline at end of file diff --git a/docs/references/run-and-secure/staking/06-technical-overview.mdx b/docs/architecture/staking/06-technical-overview.md similarity index 98% rename from docs/references/run-and-secure/staking/06-technical-overview.mdx rename to docs/architecture/staking/06-technical-overview.md index 000e2f5214..0fafec1d34 100644 --- a/docs/references/run-and-secure/staking/06-technical-overview.mdx +++ b/docs/architecture/staking/06-technical-overview.md @@ -21,7 +21,7 @@ This document describes the functionality of the It gives an overview of the process of epochs, staking as a node, and delegation. It is an important prerequisite to understand before proceeding with any other technical integration or interaction with the Flow Protocol, but does not provide step-by-step instructions for how to perform specific actions. See the -[Staking Collection Docs for instructions](./staking-collection/) +[Staking Collection Docs for instructions](./14-staking-collection.md) This document also describes how to read public staking data from the contract. Anyone can read public data from the staking smart contract with these instructions. @@ -36,7 +36,7 @@ The Flow staking smart contract manages a record of stakers who have staked toke Users who want to stake can register with the staking contract at any time during the staking auction, and their tokens will be locked for staking until they request to unstake them. -You should already understand from reading the [epoch documentation](./epoch-preparation) +You should already understand from reading the [epoch documentation](./04-epoch-preparation.md) that an epoch lasts roughly a week. The `FlowIDTableStaking` contract focuses on the identity table and staking part of the epoch schedule. @@ -73,7 +73,7 @@ and democratically by all the stakers in the network. For a node to stake, node operators first need to generate their staking key, staking key proof-of-possesion, networking address, and networking key. -The [node operation guide](../node-operation/index.md) +The [node operation guide](../node-ops/index.md) describes how to run a node and generate node information. To generate a node ID, simply hash the staking key. @@ -117,7 +117,7 @@ This object is used for staking, unstaking, and withdrawing rewards. Consensus and Collection nodes also need to create a separate machine account for use in the DKG and QC proccesses, respectively. This machine account creation is handled automatically by the staking collection smart contract. -More information is in the [machine account documentation](./11-machine-account.mdx#creation). +More information is in the [machine account documentation](./11-machine-account.md#creation). Every node operator will run the same transaction to register their node at any time throughout the staking auction. @@ -189,7 +189,7 @@ and the delegator's rewards are deposited in the delegator's reward pool. Regardless of whether they are a node operator or delegator, a staker has access to all the same staking operations, outlined below. -Specific implementations of these transactions are detailed in the [Staking Collection Docs](./staking-collection/) +Specific implementations of these transactions are detailed in the [Staking Collection Docs](./14-staking-collection.md) ### Stake More Tokens diff --git a/docs/references/run-and-secure/staking/07-staking-scripts-events.md b/docs/architecture/staking/07-staking-scripts-events.md similarity index 93% rename from docs/references/run-and-secure/staking/07-staking-scripts-events.md rename to docs/architecture/staking/07-staking-scripts-events.md index 6eafec58e4..3c61203196 100644 --- a/docs/references/run-and-secure/staking/07-staking-scripts-events.md +++ b/docs/architecture/staking/07-staking-scripts-events.md @@ -17,7 +17,7 @@ or you can monitor events that are emitted by the staking contract to be notifie `FlowIDTableStaking.getProposedNodeIDs()`: Returns an array of node IDs for proposed nodes. Proposed nodes are nodes that have enough staked and committed for the next epoch to be above the minimum requirement. -You can use the **Get Proposed Table**([SC.05](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script for retrieving this info. +You can use the **Get Proposed Table**([SC.05](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script for retrieving this info. This script requires no arguments. @@ -26,7 +26,7 @@ This script requires no arguments. `FlowIDTableStaking.getStakedNodeIDs()`: Returns an array of nodeIDs that are currently staked. Staked nodes are nodes that currently have staked tokens above the minimum. -You can use the **Get Current Table**([SC.04](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script for retrieving this info. +You can use the **Get Current Table**([SC.04](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script for retrieving this info. This script requires no arguments. @@ -36,14 +36,14 @@ This script requires no arguments. associated with the specified node ID. You can see the `NodeInfo` definition in the [FlowIDTableStaking smart contract.](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowIDTableStaking.cdc#L264) -You can use the **Get Node Info**([SC.08](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script +You can use the **Get Node Info**([SC.08](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script with the following arguments: | Argument | Type | Description | | ---------- | -------- | -------------------------------------- | | **nodeID** | `String` | The node ID of the node to search for. | -You can also query the info from an address by using the **Get Node Info From Address**([SC.26](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script +You can also query the info from an address by using the **Get Node Info From Address**([SC.26](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script with the following arguments: | Argument | Type | Description | @@ -55,7 +55,7 @@ with the following arguments: `FlowIDTableStaking.NodeInfo(_ nodeID: String).totalCommittedWithDelegators()`: Returns the total committed balance for a node, which is their total tokens staked + committed, plus all of the staked + committed tokens of all their delegators. -You can use the **Get Node Total Commitment**([SC.09](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script +You can use the **Get Node Total Commitment**([SC.09](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script with the following argument: | Argument | Type | Description | @@ -67,7 +67,7 @@ with the following argument: `FlowIDTableStaking.NodeInfo(_ nodeID: String).totalCommittedWithoutDelegators()`: Returns the total committed balance for a node, which is their total tokens staked + committed, plus all of the staked + committed tokens of all their delegators. -You can use the **Get Only Node Total Commitment**([SC.09](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script +You can use the **Get Only Node Total Commitment**([SC.09](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script with the following argument: | Argument | Type | Description | @@ -80,7 +80,7 @@ with the following argument: associated with the specified node ID and delegator ID. You can see the `DelegatorInfo` definition in the [FlowIDTableStaking smart contract.](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowIDTableStaking.cdc#L348) -You can use the **Get Delegator Info**([SC.10](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) +You can use the **Get Delegator Info**([SC.10](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script with the following arguments: | Argument | Type | Description | @@ -88,7 +88,7 @@ script with the following arguments: | **nodeID** | `String` | The node ID that the delegator delegates to. | | **delegatorID** | `String` | The ID of the delegator to search for. | -You can also query the info from an address by using the **Get Delegator Info From Address**([SC.27](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script +You can also query the info from an address by using the **Get Delegator Info From Address**([SC.27](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script with the following arguments: | Argument | Type | Description | @@ -99,7 +99,7 @@ with the following arguments: `FlowIDTableStaking.getRewardCutPercentage(): UFix64`: Returns a `UFix64` number for the cut of delegator rewards that each node operator takes. -You can use the **Get Cut Percentage**([SC.01](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script to retrieve this info. +You can use the **Get Cut Percentage**([SC.01](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script to retrieve this info. This script requires no arguments. @@ -108,7 +108,7 @@ This script requires no arguments. `FlowIDTableStaking.getMinimumStakeRequirements(): {UInt8: UFix64}`: Returns a mapping for the stake requirements for each node type. -You can use the **Get stake requirements**([SC.02](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script to retrieve this info. +You can use the **Get stake requirements**([SC.02](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script to retrieve this info. This script requires no arguments. @@ -116,19 +116,19 @@ This script requires no arguments. `FlowIDTableStaking.getEpochTokenPayout(): UFix64`: Returns a `UFix64` value for the total number of FLOW paid out each epoch (week). -You can use the **Get weekly payout**([SC.03](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script to retrieve this info. +You can use the **Get weekly payout**([SC.03](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script to retrieve this info. This script requires no arguments. ## Get the total FLOW staked: -You can use the **Get total FLOW staked**([SC.06](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script to retrieve this info. +You can use the **Get total FLOW staked**([SC.06](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script to retrieve this info. This script requires no arguments. ## Get the total FLOW staked by all the nodes of a single node role: -You can use the **Get total FLOW staked by node type**([SC.07](../../core-contracts/06-staking-contract-reference.md#getting-staking-info)) script +You can use the **Get total FLOW staked by node type**([SC.07](../../references/core-contracts/06-staking-contract-reference.md#getting-staking-info)) script with the following arguments: | Argument | Type | Description | diff --git a/docs/references/run-and-secure/staking/08-staking-rewards.md b/docs/architecture/staking/08-staking-rewards.md similarity index 97% rename from docs/references/run-and-secure/staking/08-staking-rewards.md rename to docs/architecture/staking/08-staking-rewards.md index de89040a58..bac3878d70 100644 --- a/docs/references/run-and-secure/staking/08-staking-rewards.md +++ b/docs/architecture/staking/08-staking-rewards.md @@ -10,7 +10,7 @@ Every week, the Flow governance committee executes the reward payout transaction When the transaction executes, it generates events for the rewards paid to each node and delegator. To check the staking and delegation rewards, that transaction should be queried. -Example using [Flow cli](../../../tools/flow-cli/index.md) +Example using [Flow cli](../../tools/flow-cli/index.md) ``` $ flow transactions get 84eca4ff612ef70047d60510710cca872c8a17c1bd9f63686e74852b6382cc84 -n mainnet @@ -78,7 +78,7 @@ Events: ``` -Example using [Flow Go SDK](../../../tools/clients/flow-go-sdk/index.mdx) +Example using [Flow Go SDK](../../tools/clients/flow-go-sdk/index.mdx) ``` package main @@ -198,7 +198,7 @@ Events Block #51753836: - amount (UFix64): 17.31047712 ``` -Example using [Flow Go SDK](../../../tools/clients/flow-go-sdk/index.mdx) +Example using [Flow Go SDK](../../tools/clients/flow-go-sdk/index.mdx) ``` package main diff --git a/docs/references/run-and-secure/staking/09-qc-dkg.mdx b/docs/architecture/staking/09-qc-dkg.md similarity index 84% rename from docs/references/run-and-secure/staking/09-qc-dkg.mdx rename to docs/architecture/staking/09-qc-dkg.md index c0f97d3277..54c2644551 100644 --- a/docs/references/run-and-secure/staking/09-qc-dkg.mdx +++ b/docs/architecture/staking/09-qc-dkg.md @@ -36,7 +36,7 @@ that only stores the `FlowClusterQC.Voter` or `FlowDKG.Participant` resource obj in addition to FLOW to pay for transaction fees. You can connect your node to this account to participate in the Epoch Setup Phase without having to do the actions manually. -If you are using the [Staking Collection](./staking-collection) for your node, +If you are using the [Staking Collection](./14-staking-collection.md) for your node, this functionality is built-in. When you register a node with the staking collection, you also have to provide a public key or keys for your machine account for the node. @@ -44,7 +44,7 @@ If you have a node without a machine account (if you were operating a node from before epochs and staking collection were enabled, for example) the staking collection also provides a method to create a machine account for an existing node. -See the [Staking Collection Docs](./14-staking-collection.mdx#machine-account-support) +See the [Staking Collection Docs](./14-staking-collection.md#machine-account-support) for more information. # Collector Cluster Quorum Certificate Generation Protocol @@ -66,20 +66,20 @@ function in the `FlowEpoch` contract to create their Voter object and needs to p a reference to their `FlowIDTableStaking.NodeStaker` object to prove they are the node owner. When registering a node with the staking collection, this process is handled by -[the transaction to register.](./14-staking-collection.mdx#register-a-new-staked-node) +[the transaction to register.](./14-staking-collection.md#register-a-new-staked-node) It also creates a machine account for the QC object. If a user already has a registered node with the staking collection, but hasn't created their QC Voter object yet, -they can use the [`create_machine_account.cdc` transaction.](./14-staking-collection.mdx#create-a-machine-account-for-an-existing-node) +they can use the [`create_machine_account.cdc` transaction.](./14-staking-collection.md#create-a-machine-account-for-an-existing-node) -If a user is not using the staking collection, they can use the **Create QC Voter** ([QC.01](../../core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) +If a user is not using the staking collection, they can use the **Create QC Voter** ([QC.01](../../references/core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) transaction. This will only store the QC Voter object in the account that stores the `NodeStaker` object. It does not create a machine account or store it elsewhere, so it is not recommended to use. We encourage to use the staking collection instead. ### Submit Vote During the Epoch Setup Phase, the node software should submit the votes for the QC generation -automatically using the **Submit QC Vote** ([QC.02](../../core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) +automatically using the **Submit QC Vote** ([QC.02](../../references/core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) transaction with the following arguments. | Argument | Type | Description | @@ -107,13 +107,13 @@ function in the `FlowEpoch` contract to create their Voter object and needs to p a reference to their `FlowIDTableStaking.NodeStaker` object to prove they are the node owner. When registering a node with the staking collection, this process is handled by -[the transaction to register.](./14-staking-collection.mdx#register-a-new-staked-node) +[the transaction to register.](./14-staking-collection.md#register-a-new-staked-node) It also creates a machine account for the DKG Object. If a user already has a registered node with the staking collection, but hasn't created their DKG Participant object yet, -they can use the [`create_machine_account.cdc` transaction.](./14-staking-collection.mdx#create-a-machine-account-for-an-existing-node) +they can use the [`create_machine_account.cdc` transaction.](./14-staking-collection.md#create-a-machine-account-for-an-existing-node) -If a user is not using the staking collection, they can use the **Create DKG Participant** ([DKG.01](../../core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) +If a user is not using the staking collection, they can use the **Create DKG Participant** ([DKG.01](../../references/core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) transaction. This will only store the DKG Participant object in the account that stores the `NodeStaker` object. It does not create a machine account or store it elsewhere, so it is not recommended to use. The staking collection is the recommended method. @@ -121,7 +121,7 @@ The staking collection is the recommended method. ### Post Whiteboard Message During the Epoch Setup Phase, the node software should post whiteboard messages to the DKG -automatically using the **Post Whiteboard Message** ([DKG.02](../../core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) +automatically using the **Post Whiteboard Message** ([DKG.02](../../references/core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) transaction with the following arguments. | Argument | Type | Description | @@ -131,7 +131,7 @@ transaction with the following arguments. ### Send Final Submission During the Epoch Setup Phase, the node software should send its final submission for the DKG -automatically using the **Send Final Submission** ([DKG.03](../../core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) +automatically using the **Send Final Submission** ([DKG.03](../../references/core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) transaction with the following arguments. | Argument | Type | Description | @@ -140,5 +140,5 @@ transaction with the following arguments. # Monitor Events and Query State from the QC and DKG Contracts -See the [QC and DKG events and scripts document](./qc-dkg-scripts-events) for information +See the [QC and DKG events and scripts document](./10-qc-dkg-scripts-events.md) for information about the events that can be emitted by these contracts and scripts you can use to query information. diff --git a/docs/references/run-and-secure/staking/10-qc-dkg-scripts-events.md b/docs/architecture/staking/10-qc-dkg-scripts-events.md similarity index 64% rename from docs/references/run-and-secure/staking/10-qc-dkg-scripts-events.md rename to docs/architecture/staking/10-qc-dkg-scripts-events.md index c04d9347da..d733103d1d 100644 --- a/docs/references/run-and-secure/staking/10-qc-dkg-scripts-events.md +++ b/docs/architecture/staking/10-qc-dkg-scripts-events.md @@ -23,7 +23,7 @@ These scripts allow anyone to query information about the state of the QC contra ### Get Clusters To return a struct representing the information associated with a collector cluster, -can use the **Get Cluster** ([QC.03](../../core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) script with the following argument: +can use the **Get Cluster** ([QC.03](../../references/core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) script with the following argument: | Argument | Type | Description | |------------------|----------|-------------| @@ -32,12 +32,12 @@ can use the **Get Cluster** ([QC.03](../../core-contracts/07-epoch-contract-refe ### Get QC Enabled To return a boolean representing if the QC is enabled, -can use the **Get QC Enabled** ([QC.04](../../core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) script with no arguments. +can use the **Get QC Enabled** ([QC.04](../../references/core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) script with no arguments. ### Get Node Has Voted To return a boolean representing if a node has voted for the current QC, you -can use the **Get Node Has Voted** ([QC.05](../../core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) script with the following argument: +can use the **Get Node Has Voted** ([QC.05](../../references/core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) script with the following argument: | Argument | Type | Description | |------------------|----------|-------------| @@ -47,7 +47,7 @@ can use the **Get Node Has Voted** ([QC.05](../../core-contracts/07-epoch-contra ### Get Voting Complete To return a boolean representing if the voting for the QC phase is complete, -can use the **Get Voting Complete** ([QC.06](../../core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) script with no arguments. +can use the **Get Voting Complete** ([QC.06](../../references/core-contracts/07-epoch-contract-reference.md#quorum-certificate-transactions-and-scripts)) script with no arguments. ## QC Events @@ -58,27 +58,27 @@ Documentation coming soon ### Get DKG Enabled To return a boolean representing if the DKG is enabled, you -can use the **Get DKG Enabled** ([DKG.04](../../core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with no arguments. +can use the **Get DKG Enabled** ([DKG.04](../../references/core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with no arguments. ### Get DKG Completed To return a boolean representing if the dkg is complete, you -can use the **Get DKG Complete** ([DKG.05](../../core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with no arguments. +can use the **Get DKG Complete** ([DKG.05](../../references/core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with no arguments. ### Get Whiteboard Messages To return an array of structs representing all the whiteboard messages, you -can use the **Get DKG Whiteboard Messages** ([DKG.06](../../core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with no arguments. +can use the **Get DKG Whiteboard Messages** ([DKG.06](../../references/core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with no arguments. ### Get Final Submissions To return an array of key vectors for the nodes' final submissions, you -can use the **Get Final Submissions** ([DKG.07](../../core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with no arguments. +can use the **Get Final Submissions** ([DKG.07](../../references/core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with no arguments. ### Get Node Has Submitted To return a boolean representing if a node has sent their final submission for the DKG, you -can use the **Get Node Has Submitted** ([DKG.08](../../core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with the following argument: +can use the **Get Node Has Submitted** ([DKG.08](../../references/core-contracts/07-epoch-contract-reference.md#dkg-transactions-and-scripts)) script with the following argument: | Argument | Type | Description | |------------------|----------|-------------| diff --git a/docs/references/run-and-secure/staking/11-machine-account.mdx b/docs/architecture/staking/11-machine-account.md similarity index 92% rename from docs/references/run-and-secure/staking/11-machine-account.mdx rename to docs/architecture/staking/11-machine-account.md index cd2aa61ec9..5452c07175 100644 --- a/docs/references/run-and-secure/staking/11-machine-account.mdx +++ b/docs/architecture/staking/11-machine-account.md @@ -9,7 +9,7 @@ description: Usage and Purpose of the Machine Account A Machine Account is a Flow account which is used autonomously by a node to interact with system smart contracts. Machine Accounts contain Cadence resources granted to network participants which are used to participate in smart-contract-mediated protocols. Currently, -Machine Accounts are used in the [Epoch Preparation Protocol](./04-epoch-preparation.mdx), +Machine Accounts are used in the [Epoch Preparation Protocol](./04-epoch-preparation.md), which prepares the network for the next epoch. Your Machine Account is distinct from the account you use for staking your node (your Staking Account). @@ -23,9 +23,9 @@ Currently Machine Accounts are required only for `collection` and `consensus` no #### Creation -For new node operators, Machine Accounts are created during the [staking process](../nodes/flow-port/staking-guide.md) in Flow Port. +For new node operators, Machine Accounts are created during the [staking process](../../references/run-and-secure/nodes/flow-port/staking-guide.md) in Flow Port. For node operators who initially staked prior to the introduction of Machine Accounts, Machine Accounts can be -created for your staked nodes by following [this guide](../node-operation/machine-existing-operator.mdx). +created for your staked nodes by following [this guide](../node-ops/nodes/node-operation/machine-existing-operator.md). #### Funding diff --git a/docs/references/run-and-secure/staking/12-faq.md b/docs/architecture/staking/12-faq.md similarity index 98% rename from docs/references/run-and-secure/staking/12-faq.md rename to docs/architecture/staking/12-faq.md index 9c642799b9..258b9c325f 100644 --- a/docs/references/run-and-secure/staking/12-faq.md +++ b/docs/architecture/staking/12-faq.md @@ -41,7 +41,7 @@ offer using their own methods and are not enforced by the protocol. ### Can a token holder stake to multiple nodes? If yes, how is the stake split between them? A token holder can delegate to multiple nodes from a single account if they use the -[Staking Collection](./14-staking-collection.mdx). +[Staking Collection](./14-staking-collection.md). The staking collection is enabled by default on Flow port, and many custody providers also support it. diff --git a/docs/references/run-and-secure/staking/13-staking-options.mdx b/docs/architecture/staking/13-staking-options.md similarity index 96% rename from docs/references/run-and-secure/staking/13-staking-options.mdx rename to docs/architecture/staking/13-staking-options.md index ef20e6ad6b..244374cc5b 100644 --- a/docs/references/run-and-secure/staking/13-staking-options.mdx +++ b/docs/architecture/staking/13-staking-options.md @@ -21,7 +21,7 @@ using Flow. It also supports machine accounts, a necessary feature for Flow epoc The staking collection paradigm is the most flexible of the three choices and will receive the most support in the future. It is the set-up that Flow Port and many other staking providers use. -The staking collection setup and guide is detailed in the [staking collection guide.](./14-staking-collection.mdx) +The staking collection setup and guide is detailed in the [staking collection guide.](./14-staking-collection.md) # Staking @@ -32,4 +32,4 @@ contract and storing the staking objects directly in account storage. This is probably the simplest way to implement this, but it is not very flexible and not recommended. -The basic staking guide is detailed [here](./15-staking-guide.mdx) \ No newline at end of file +The basic staking guide is detailed [here](./15-staking-guide.md) \ No newline at end of file diff --git a/docs/references/run-and-secure/staking/14-staking-collection.mdx b/docs/architecture/staking/14-staking-collection.md similarity index 91% rename from docs/references/run-and-secure/staking/14-staking-collection.mdx rename to docs/architecture/staking/14-staking-collection.md index 78d474f281..f6e2df88ea 100644 --- a/docs/references/run-and-secure/staking/14-staking-collection.mdx +++ b/docs/architecture/staking/14-staking-collection.md @@ -4,8 +4,8 @@ sidebar_label: Staking Collection Guide --- This document outlines the steps a token holder can take to stake -using [the `FlowIDTableStaking` contract](../../core-contracts/06-staking-contract-reference.md) -and [the `FlowStakingCollection` contract.](../../core-contracts/11-staking-collection.md) +using [the `FlowIDTableStaking` contract](../../references/core-contracts/06-staking-contract-reference.md) +and [the `FlowStakingCollection` contract.](../../references/core-contracts/11-staking-collection.md) This is the recommended and most supported way to stake FLOW. It supports any number of nodes and delegators per account, supports locked and unlocked FLOW, and supports easily interaction with a node's machine account for collector and consensus nodes. @@ -17,7 +17,7 @@ objects in a single account via a single storage path, and perform staking actio using both locked and unlocked Flow. Before the staking collection, accounts could use the instructions in -[the unlocked staking guide](./15-staking-guide.mdx) +[the unlocked staking guide](./15-staking-guide.md) to stake with tokens. This was a bit restrictive, because that guide (and the corresponding transactions) only supports one node and one delegator object per account. If a user wanted to have more than one per account, @@ -131,7 +131,7 @@ There is a standard set of transactions provided with the staking collection. ### Setup a Staking Collection -To set up a Staking Collection, you must run the **Setup Staking Collection** ([SCO.01](../../core-contracts/11-staking-collection.md)) transaction. +To set up a Staking Collection, you must run the **Setup Staking Collection** ([SCO.01](../../references/core-contracts/11-staking-collection.md)) transaction. This transaction requires no arguments and will perform the following actions: 1. Create private capabilities for the unlocked vault and locked vault (if applicable). @@ -153,7 +153,7 @@ meaning that they don't already have an associated machine account. These nodes need a new transaction to create the machine account for the node and save it to the staking collection. To create a machine account for a node that doesn't already have one, -you must submit the **Create Machine Account** ([SCO.03](../../core-contracts/11-staking-collection.md)) +you must submit the **Create Machine Account** ([SCO.03](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -170,7 +170,7 @@ If no public keys are provided, the transaction will fail. ### Register a New Staked Node -To register a new staked node, you must submit the **Register Node** ([SCO.03](../../core-contracts/11-staking-collection.md)) +To register a new staked node, you must submit the **Register Node** ([SCO.03](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -201,7 +201,7 @@ assuming they have the correct number of tokens to perform the action. ### Register a New Staked Delegator -To register a new delegator, you must submit the **Register Delegator** ([SCO.02](../../core-contracts/11-staking-collection.md)) +To register a new delegator, you must submit the **Register Delegator** ([SCO.02](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -229,7 +229,7 @@ Most of them will only succeed during the Staking Auction phase of the epoch. The Staking Collection can stake additional tokens for any Node or Delegator managed by it at any time. -The owner of a Staking Collection can use the **Stake New Tokens** ([SCO.06](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Stake New Tokens** ([SCO.06](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -252,7 +252,7 @@ The amount may be any number of tokens up to the sum of an accounts locked and u After tokens become unstaked, the owner of a Staking Collection can choose to re-stake the unstaked tokens to the same Node or Delegator. -The owner of a Staking Collection can use the **Stake Unstaked Tokens** ([SCO.08](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Stake Unstaked Tokens** ([SCO.08](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -272,7 +272,7 @@ If staking for a delegator, delegatorID should be the delegator ID you ar After earning rewards from staking, the owner of a Staking Collection can choose to re-stake the rewarded tokens to the same node or delegator. -The owner of a Staking Collection can use the **Stake Unstaked Tokens** ([SCO.07](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Stake Unstaked Tokens** ([SCO.07](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -294,7 +294,7 @@ If the tokens aren't staked yet, they will be uncommitted and available to withd _Note: unstaked tokens will be held by the central staking contract until the end of the following epoch._ _Once the tokens are released (unstaked), they can be claimed via the [Withdraw Unstaked Tokens](#withdraw-unstaked-tokens) action below._ -The owner of a Staking Collection can use the **Unstake Tokens** ([SCO.05](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Unstake Tokens** ([SCO.05](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -309,7 +309,7 @@ To unstake tokens from an active node, leave the delegatorID arguement as ### Unstake All Tokens -The owner of a Staking Collection can use the **Unstake All** ([SCO.09](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Unstake All** ([SCO.09](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -322,7 +322,7 @@ transaction with the following arguments: After tokens for an active Node or Delegator become unstaked, the ownder of Staking Collection can withdraw them from the central staking contract. -The owner of a Staking Collection can use the **Withdraw Unstaked Tokens** ([SCO.11](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Withdraw Unstaked Tokens** ([SCO.11](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -339,7 +339,7 @@ To withdraw unstaked tokens from an active node, leave the delegatorID ar After earning rewards from staking, the token holder can withdraw them from the central staking contract. -The owner of a Staking Collection can use the **Withdraw Rewarded Tokens** ([SCO.10](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Withdraw Rewarded Tokens** ([SCO.10](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -365,7 +365,7 @@ It then destroys the NodeStaker or NodeDelegator object from within the Staking _Note: Once a Node or Delegator has been closed, it cannot be accessed again,_ _and no staking or delegation actions can be futher preformed on it._ -The owner of a Staking Collection can use the **Close Stake** ([SCO.12](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Close Stake** ([SCO.12](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -393,7 +393,7 @@ _As well, all staked tokens will be considered staked by the receiver's Staking Transferring a Node will result in loss of custody of any Staked tokens for the sender. -The owner of a Staking Collection can use the **Transfer Node** ([SCO.13](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Transfer Node** ([SCO.13](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -417,7 +417,7 @@ _As well, all staked tokens will be considered staked by the receiver's Staking Transferring a Delegator will result in loss of custody of any Staked tokens for the sender. -The owner of a Staking Collection can use the **Transfer Delegator** ([SCO.14](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Transfer Delegator** ([SCO.14](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -438,7 +438,7 @@ _what is stored in the protocol state for the node, the node will not be able to _Only update your networking address if you have already confirmed with the Flow team that you can._ _This restriction will be removed once fully automated epochs are completely implemented_ -The owner of a Staking Collection can use the **Update Networking Address** ([SCO.22](../../core-contracts/11-staking-collection.md)) +The owner of a Staking Collection can use the **Update Networking Address** ([SCO.22](../../references/core-contracts/11-staking-collection.md)) transaction with the following arguments: | Argument | Type | Description | @@ -454,7 +454,7 @@ These scripts allow anyone to query information about an account's staking colle ### Get All Node Info To return an array of structs representing the information associated with each node managed by an account's Staking Collection, anyone -can use the **Get All Node Info** ([SCO.15](../../core-contracts/11-staking-collection.md)) script with the following arguments: +can use the **Get All Node Info** ([SCO.15](../../references/core-contracts/11-staking-collection.md)) script with the following arguments: | Argument | Type | Description | |-------------|------------|-------------| @@ -466,7 +466,7 @@ representing the nodes managed by an accounts Staking Collection. ### Get All Delegator Info To return an array of structs representing the information associated with each delegator managed by an account's Staking Collection, anyone -can use the **Get All Delegator Info** ([SCO.16](../../core-contracts/11-staking-collection.md)) script with the following arguments: +can use the **Get All Delegator Info** ([SCO.16](../../references/core-contracts/11-staking-collection.md)) script with the following arguments: | Argument | Type | Description | |-------------|------------|-------------| @@ -478,7 +478,7 @@ representing the delegators managed by an accounts Staking Collection. ### Get All Node Ids To return an array of Strings representing the ids associated with each node managed by an account's Staking Collection, anyone -can use the **Get All Node Ids** ([SCO.17](../../core-contracts/11-staking-collection.md)) script with the following arguments: +can use the **Get All Node Ids** ([SCO.17](../../references/core-contracts/11-staking-collection.md)) script with the following arguments: | Argument | Type | Description | |-------------|------------|-------------| @@ -490,7 +490,7 @@ representing each id of each node managed by an accounts Staking Collection. ### Get All Delegator Ids To return an array of structs representing the delegator ids associated with each delegation managed by an account's Staking Collection, anyone -can use the **Get All Delegator Ids** ([SCO.16](../../core-contracts/11-staking-collection.md)) script with the following arguments: +can use the **Get All Delegator Ids** ([SCO.16](../../references/core-contracts/11-staking-collection.md)) script with the following arguments: | Argument | Type | Description | |-------------|------------|-------------| @@ -502,7 +502,7 @@ representing the delegator Ids of each delegator managed by an accounts Staking ### Get Locked Tokens Used To query how many Locked FLOW tokens an account has staked using their Staking Collection, anyone -can use the **Get Locked Tokens Used** ([SCO.19](../../core-contracts/11-staking-collection.md)) script with the following arguments: +can use the **Get Locked Tokens Used** ([SCO.19](../../references/core-contracts/11-staking-collection.md)) script with the following arguments: | Argument | Type | Description | |-------------|------------|-------------| @@ -517,7 +517,7 @@ Note: This number does not include Locked FLOW tokens staked not through an acco ### Get Unlocked Tokens Used To query how many Unlocked FLOW tokens an account has staked using their Staking Collection, anyone -can use the **Get Unlocked Tokens Used** ([SCO.20](../../core-contracts/11-staking-collection.md)) script with the following arguments: +can use the **Get Unlocked Tokens Used** ([SCO.20](../../references/core-contracts/11-staking-collection.md)) script with the following arguments: | Argument | Type | Description | |-------------|------------|-------------| @@ -532,7 +532,7 @@ Note: This number does not include Unlocked FLOW tokens staked not through an ac ### Get Does Stake Exist To query if a Node or Delegator is managed by an accounts Staking Collection, anyone -can use the **Get Does Node Exist** ([SCO.21](../../core-contracts/11-staking-collection.md)) script with the following arguments: +can use the **Get Does Node Exist** ([SCO.21](../../references/core-contracts/11-staking-collection.md)) script with the following arguments: | Argument | Type | Description | |-------------------------|--------------------|-------------| @@ -550,7 +550,7 @@ Otherwise, fill it in with the delegatorID of the Delegator. ### Get Machine Account Info To query the machine account information for an account's staking collection, anyone -can use the **Get Machine Account Info** ([SCO.21](../../core-contracts/11-staking-collection.md)) script with the following arguments: +can use the **Get Machine Account Info** ([SCO.21](../../references/core-contracts/11-staking-collection.md)) script with the following arguments: | Argument | Type | Description | |-------------------------|--------------------|-------------| diff --git a/docs/references/run-and-secure/staking/15-staking-guide.mdx b/docs/architecture/staking/15-staking-guide.md similarity index 88% rename from docs/references/run-and-secure/staking/15-staking-guide.mdx rename to docs/architecture/staking/15-staking-guide.md index 08054adcb2..c430abc401 100644 --- a/docs/references/run-and-secure/staking/15-staking-guide.mdx +++ b/docs/architecture/staking/15-staking-guide.md @@ -19,7 +19,7 @@ This guide covers staking with **FLOW tokens**. ### Register a New Staked Node -To register as a node operator with FLOW, the token holder can use the **Register Node** ([SC.11](../../core-contracts/06-staking-contract-reference.md#staking)) +To register as a node operator with FLOW, the token holder can use the **Register Node** ([SC.11](../../references/core-contracts/06-staking-contract-reference.md#staking)) transaction with the following arguments: | Argument | Type | Description | @@ -48,7 +48,7 @@ The token holder can stake additional tokens at any time. _Note: this transaction stakes additional tokens to the same node that was registered in the setup phase._ -To stake tokens, the token holder can use the **Stake FLOW** ([SC.12](../../core-contracts/06-staking-contract-reference.md#staking)) +To stake tokens, the token holder can use the **Stake FLOW** ([SC.12](../../references/core-contracts/06-staking-contract-reference.md#staking)) transaction with the following arguments: | Argument | Type | Description | @@ -61,7 +61,7 @@ This transaction commits tokens to stake from the token holder's account. After tokens become unstaked, the token holder can choose to re-stake the unstaked tokens to the same node. -To staked unstaked tokens, the token holder can use the **Re-stake Unstaked FLOW** ([SC.13](../../core-contracts/06-staking-contract-reference.md#staking)) +To staked unstaked tokens, the token holder can use the **Re-stake Unstaked FLOW** ([SC.13](../../references/core-contracts/06-staking-contract-reference.md#staking)) transaction with the following arguments: | Argument | Type | Description | @@ -72,7 +72,7 @@ transaction with the following arguments: After earning rewards from staking, the token holder can choose to re-stake the rewarded tokens to the same node. -To stake rewarded tokens, the token holder can use the **Re-stake Rewarded FLOW** ([SC.14](../../core-contracts/06-staking-contract-reference.md#staking)) +To stake rewarded tokens, the token holder can use the **Re-stake Rewarded FLOW** ([SC.14](../../references/core-contracts/06-staking-contract-reference.md#staking)) transaction with the following arguments: | Argument | Type | Description | @@ -85,7 +85,7 @@ The token holder can submit a request to unstake some of their tokens at any tim If the tokens aren't staked yet, they will be uncommitted and available to withdraw. To request to unstake staked tokens, the token holder can use -the **Request Unstaking** ([SC.15](../../core-contracts/06-staking-contract-reference.md#staking)) transaction. +the **Request Unstaking** ([SC.15](../../references/core-contracts/06-staking-contract-reference.md#staking)) transaction. | Argument | Type | Description | |------------|----------|-------------| @@ -105,7 +105,7 @@ The token holder can submit a request to unstake all their tokens at any time. If the tokens aren't staked yet, they will be uncommitted and available to withdraw. To unstake all staked tokens, the token holder can use -the **Unstake All FLOW** ([SC.16](../../core-contracts/06-staking-contract-reference.md#staking)) transaction. +the **Unstake All FLOW** ([SC.16](../../references/core-contracts/06-staking-contract-reference.md#staking)) transaction. This transaction requires no arguments. @@ -117,7 +117,7 @@ from users that are delegating FLOW to the node.** After tokens become unstaked, the token holder can withdraw them from the central staking contract. To withdraw unstaked tokens, -the token holder can use the **Withdraw Unstaked FLOW** ([SC.17](../../core-contracts/06-staking-contract-reference.md#staking)) +the token holder can use the **Withdraw Unstaked FLOW** ([SC.17](../../references/core-contracts/06-staking-contract-reference.md#staking)) transaction with the following arguments: | Argument | Type | Description | @@ -131,7 +131,7 @@ This transaction moves the unstaked tokens back into the `FlowToken.Vault` owned After earning rewards from staking, the token holder can withdraw them from the central staking contract. To withdraw rewarded tokens, -the token holder can use the **Withdraw Rewarded FLOW** ([SC.18](../../core-contracts/06-staking-contract-reference.md#staking)) +the token holder can use the **Withdraw Rewarded FLOW** ([SC.18](../../references/core-contracts/06-staking-contract-reference.md#staking)) transaction with the following arguments: | Argument | Type | Description | @@ -157,7 +157,7 @@ but this would require small changes to these transactions to use the new storag ## Register as a Delegator -To register as a delegator, the token holder can use the **Register Delegator** ([SC.19](../../core-contracts/06-staking-contract-reference.md#delegating)) +To register as a delegator, the token holder can use the **Register Delegator** ([SC.19](../../references/core-contracts/06-staking-contract-reference.md#delegating)) transaction with the following arguments: | Argument | Type | Description | @@ -176,7 +176,7 @@ The token holder can delegate additional tokens after registering as a delegator _Note: this transaction delegates additional tokens to the same node that was registered in the setup phase._ To delegate new tokens, -the token holder can use the **Delegate New FLOW** ([SC.20](../../core-contracts/06-staking-contract-reference.md#delegating)) +the token holder can use the **Delegate New FLOW** ([SC.20](../../references/core-contracts/06-staking-contract-reference.md#delegating)) transaction with the following arguments: | Argument | Type | Description | @@ -188,7 +188,7 @@ transaction with the following arguments: After delegated tokens become unstaked, the token holder can choose to re-delegate the unstaked tokens to the same node. To delegate unstaked tokens, -the token holder can use the **Re-delegate Unstaked FLOW** ([SC.21](../../core-contracts/06-staking-contract-reference.md#delegating)) +the token holder can use the **Re-delegate Unstaked FLOW** ([SC.21](../../references/core-contracts/06-staking-contract-reference.md#delegating)) transaction with the following arguments: | Argument | Type | Description | @@ -200,7 +200,7 @@ transaction with the following arguments: After earning rewards from delegation, the token holder can choose to re-delegate the rewarded tokens to the same node. To delegate rewarded tokens, -the token holder can use the **Re-delegate Rewarded FLOW** ([SC.22](../../core-contracts/06-staking-contract-reference.md#delegating)) +the token holder can use the **Re-delegate Rewarded FLOW** ([SC.22](../../references/core-contracts/06-staking-contract-reference.md#delegating)) transaction with the following arguments: | Argument | Type | Description | @@ -213,7 +213,7 @@ The token holder can submit a request to unstake their delegated tokens at any t If the tokens aren't staked yet, they will be uncommitted and available to withdraw. To unstake delegated tokens, -the token holder can use the **Unstake Delegated FOW** ([SC.23](../../core-contracts/06-staking-contract-reference.md#delegating)) +the token holder can use the **Unstake Delegated FOW** ([SC.23](../../references/core-contracts/06-staking-contract-reference.md#delegating)) transaction with the following arguments: | Argument | Type | Description | @@ -230,7 +230,7 @@ they can be claimed via the [Withdraw Unstaked Tokens](#withdraw-unstaked-tokens After delegated tokens become unstaked, the token holder can withdraw them from the central staking contract. To withdraw unstaked tokens, -the token holder can use the **Withdraw Unstaked FLOW** ([SC.24](../../core-contracts/06-staking-contract-reference.md#delegating)) +the token holder can use the **Withdraw Unstaked FLOW** ([SC.24](../../references/core-contracts/06-staking-contract-reference.md#delegating)) transaction with the following arguments: | Argument | Type | Description | @@ -244,7 +244,7 @@ This transaction moves the unstaked tokens back into the `FlowToken.Vault` owned After earning rewards from delegation, the token holder can withdraw them from the central staking contract. To withdraw rewarded tokens, -the token holder can use the **Withdraw Rewarded FLOW** ([SC.25](../../core-contracts/06-staking-contract-reference.md#delegating)) +the token holder can use the **Withdraw Rewarded FLOW** ([SC.25](../../references/core-contracts/06-staking-contract-reference.md#delegating)) transaction with the following arguments: | Argument | Type | Description | diff --git a/docs/references/run-and-secure/staking/epoch-phase-diagram.png b/docs/architecture/staking/epoch-phase-diagram.png similarity index 100% rename from docs/references/run-and-secure/staking/epoch-phase-diagram.png rename to docs/architecture/staking/epoch-phase-diagram.png diff --git a/docs/references/run-and-secure/staking/epoch-service-event-diagram.png b/docs/architecture/staking/epoch-service-event-diagram.png similarity index 100% rename from docs/references/run-and-secure/staking/epoch-service-event-diagram.png rename to docs/architecture/staking/epoch-service-event-diagram.png diff --git a/docs/references/run-and-secure/staking/index.md b/docs/architecture/staking/index.md similarity index 94% rename from docs/references/run-and-secure/staking/index.md rename to docs/architecture/staking/index.md index 56adb51159..1b956e3b0f 100644 --- a/docs/references/run-and-secure/staking/index.md +++ b/docs/architecture/staking/index.md @@ -103,12 +103,12 @@ In the case of unstaking requests, they also must wait an additional epoch before their unstaked tokens are available to withdraw. This allows the protocol to deal with any slashable offenses that may have happened in the previous epoch. -See the [Epochs](./04-epoch-preparation.mdx) section of the documentation for in-depth explainations +See the [Epochs](./04-epoch-preparation.md) section of the documentation for in-depth explainations of the identity table, epoch schedule, QC, and DKG. ## Rewards -Please see the [schedule](./03-schedule.mdx) section of the documentation +Please see the [schedule](./03-schedule.md) section of the documentation for information about reward calculations and schedule and what you can do with the rewards you earn by staking a node! @@ -134,12 +134,12 @@ You are joining a group of people from all around the world that are a part of a [Flow Port](https://port.onflow.org/) is a simple browser-based app for the Flow blockchain that provides functionality for sending, receiving, and staking tokens. -Any wallet that uses the [Flow Client Library](../../../tools/clients/fcl-js/index.md) +Any wallet that uses the [Flow Client Library](../../tools/clients/fcl-js/index.md) is compatible with Flow Port. If you created your account using [Flow Port](https://port.onflow.org/), you can also stake and earn rewards using the Flow Port. -Follow this [step-by-step guide](../../run-and-secure/nodes/flow-port/staking-guide.md) to stake using Flow Port. +Follow this [step-by-step guide](../../references/run-and-secure/nodes/flow-port/staking-guide.md) to stake using Flow Port. Flow Port currently supports staking as a node, delegating, and reward withdrawal using **Blocto**, **Ledger**, **Lilico**, and **NuFi** accounts / wallets. @@ -155,5 +155,5 @@ and the fees that they take from your staking rewards. If you are self-custodying your Flow account and keys, or you want to build a staking service for customers, you will need to learn more about how staking works, the various methods for staking, and how you can participate safely and reliably. -See the [staking technical overview](./06-technical-overview.mdx) first +See the [staking technical overview](./06-technical-overview.md) first for information about technical integration. diff --git a/docs/build/basics/accounts.md b/docs/build/basics/accounts.md index 1a6ae57427..7ed47a5cbc 100644 --- a/docs/build/basics/accounts.md +++ b/docs/build/basics/accounts.md @@ -170,7 +170,7 @@ Find [more about the command in the CLI docs](../../tools/flow-cli/accounts/get- Accounts can be obtained from the access node APIs, currently, there are two gRPC and REST APIs. You can find more information about them here: -**gRPC API** [building-on-flow/nodes/access-api#accounts](../../references/run-and-secure/nodes/access-api.md#accounts) +**gRPC API** [building-on-flow/nodes/access-api#accounts](../../architecture/node-ops/nodes/access-api.md#accounts) **REST API** [http-api#tag/Accounts](/http-api#tag/Accounts) diff --git a/docs/build/basics/blocks.md b/docs/build/basics/blocks.md index d3451672b2..5e5dfc915d 100644 --- a/docs/build/basics/blocks.md +++ b/docs/build/basics/blocks.md @@ -63,7 +63,7 @@ Find [more about the command in the CLI docs](../../tools/flow-cli/get-flow-data Blocks can be obtained from the access node APIs, currently, there are two gRPC and REST APIs. You can find more information about them here: -[**gRPC Block API**](../../references/run-and-secure/nodes/access-api.md#blocks) +[**gRPC Block API**](../../architecture/node-ops/nodes/access-api.md#blocks) [**REST Block API**](/http-api#tag/Blocks) diff --git a/docs/build/basics/collections.md b/docs/build/basics/collections.md index 39f9141a8a..4e480cefeb 100644 --- a/docs/build/basics/collections.md +++ b/docs/build/basics/collections.md @@ -20,7 +20,7 @@ Find [more about the command in the CLI docs](../../tools/flow-cli/get-flow-data Collections can be obtained from the access node APIs, currently, there are two gRPC and REST APIs. You can find more information about them here: -[**gRPC Collection API**](../../references/run-and-secure/nodes/access-api.md#collections) +[**gRPC Collection API**](../../architecture/node-ops/nodes/access-api.md#collections) [**REST Collection API**](/http-api#tag/Collections) diff --git a/docs/build/basics/fees.md b/docs/build/basics/fees.md index 94f74a4410..1d83de6c1c 100644 --- a/docs/build/basics/fees.md +++ b/docs/build/basics/fees.md @@ -355,7 +355,7 @@ There are several places to learn more about transaction fees: **When will the fee update go into effect?** -The updates were rolled out with the [Spork on April 6, 2022](../../references/run-and-secure/node-operation/past-sporks.mdx#mainnet-17), and were enabled on [June 1st](https://forum.onflow.org/t/permissionless-contract-deployment-progress/2981) during the [weekly epoch transition](https://github.com/onflow/service-account/tree/main/transactions/set-execution-effort-weights/2022/jun-1). +The updates were rolled out with the [Spork on April 6, 2022](../../architecture/node-ops/nodes/node-operation/past-sporks.md#mainnet-17), and were enabled on [June 1st](https://forum.onflow.org/t/permissionless-contract-deployment-progress/2981) during the [weekly epoch transition](https://github.com/onflow/service-account/tree/main/transactions/set-execution-effort-weights/2022/jun-1). **Why are fees collected even when transactions fail?** diff --git a/docs/build/basics/flow-token.md b/docs/build/basics/flow-token.md index 8a232591e5..46e3fccec0 100644 --- a/docs/build/basics/flow-token.md +++ b/docs/build/basics/flow-token.md @@ -19,7 +19,7 @@ interact with FLOW. There are two ways to acquire FLOW tokens as yield: -1. [Earn FLOW as a Validator or Delegator](../../references/run-and-secure/staking/06-technical-overview.mdx): Receive newly-minted FLOW as a reward for running a node. +1. [Earn FLOW as a Validator or Delegator](../../architecture/staking/06-technical-overview.md): Receive newly-minted FLOW as a reward for running a node. 1. [Earn FLOW as a Community Contributor](https://github.com/onflow/developer-grants): Flow offers grants for selected proposals as well as RFPs for teams to submit proposals for funded development ## How to Use FLOW @@ -44,12 +44,12 @@ and then sign with the wallet of your choice only once you decide to make a purc ### Staking FLOW -[You can use FLOW to operate a staked node.](../../references/run-and-secure/staking/06-technical-overview.mdx) Node operators receive newly-minted FLOW +[You can use FLOW to operate a staked node.](../../architecture/staking/06-technical-overview.md) Node operators receive newly-minted FLOW as a reward for helping to secure the network. ### Delegating FLOW -[You can use FLOW for stake delegation.](../../references/run-and-secure/staking/06-technical-overview.mdx) Delegators receive newly-minted FLOW +[You can use FLOW for stake delegation.](../../architecture/staking/06-technical-overview.md) Delegators receive newly-minted FLOW as a reward for helping to secure the network. ### Holding FLOW diff --git a/docs/build/basics/scripts.md b/docs/build/basics/scripts.md index 4205e34f2f..b9d94bfbc8 100644 --- a/docs/build/basics/scripts.md +++ b/docs/build/basics/scripts.md @@ -46,7 +46,7 @@ Scripts can be run against previous blocks, allowing you to query historic data Scripts are executed by being submitted to the Access Node APIs. Currently, there’s support for two APIs: -[**gRPC Script API**](../../references/run-and-secure/nodes/access-api.md#scripts) +[**gRPC Script API**](../../architecture/node-ops/nodes/access-api.md#scripts) [**REST Script API**](/http-api#tag/Scripts) diff --git a/docs/build/basics/transactions.md b/docs/build/basics/transactions.md index 4eb65d240d..046a4f297a 100644 --- a/docs/build/basics/transactions.md +++ b/docs/build/basics/transactions.md @@ -376,7 +376,7 @@ A user can define their own transactions or it can use already defined transacti Transactions can be submitted and obtained from the access node APIs, currently, there are two gRPC and REST APIs. You can find more information about them here: -[**gRPC Transaction API**](../../references/run-and-secure/nodes/access-api.md#transactions) +[**gRPC Transaction API**](../../architecture/node-ops/nodes/access-api.md#transactions) [**REST Transaction API**](/http-api#tag/Transactions) diff --git a/docs/build/best-practices/_category_.yml b/docs/build/best-practices/_category_.yml index a891256bef..35a994db6f 100644 --- a/docs/build/best-practices/_category_.yml +++ b/docs/build/best-practices/_category_.yml @@ -1 +1 @@ -label: Basic Practices \ No newline at end of file +label: Best Practices \ No newline at end of file diff --git a/docs/build/best-practices/anti-patterns.md b/docs/build/best-practices/anti-patterns.md index ad0070ae1f..654934ad74 100644 --- a/docs/build/best-practices/anti-patterns.md +++ b/docs/build/best-practices/anti-patterns.md @@ -5,7 +5,9 @@ sidebar_label: Anti-Patterns --- :::info + This is an opinionated list of issues that can be improved if they are found in Cadence code intended for production. + ::: # Security and Robustness diff --git a/docs/build/best-practices/design-patterns.md b/docs/build/best-practices/design-patterns.md index 39f00d7add..0f291f77f7 100644 --- a/docs/build/best-practices/design-patterns.md +++ b/docs/build/best-practices/design-patterns.md @@ -5,6 +5,7 @@ sidebar_label: Design Patterns --- :::info + This is a selection of software design patterns developed by core Flow developers while writing Cadence code for deployment to Flow Mainnet. @@ -14,6 +15,7 @@ Many of these design patters apply to most other programming languages, but some They may provide a solution to a problem that you encounter when writing smart contracts in Cadence. If they do not clearly fit, these patterns may not be the right solution for a given situation or problem. They are not meant to be rules to be followed strictly, especially where a better solution presents itself. + ::: # General diff --git a/docs/build/building-vs-other-chains.md b/docs/build/building-vs-other-chains.md index d3284460a4..34f39de149 100644 --- a/docs/build/building-vs-other-chains.md +++ b/docs/build/building-vs-other-chains.md @@ -148,16 +148,16 @@ Access Nodes are the node type that are most useful for developers, as they prov - gRPC - Mainnet: `access.mainnet.nodes.onflow.org:9000` - Testnet: `access.devnet.nodes.onflow.org:9000` - - [Specification](../references/run-and-secure/nodes/access-api.md) + - [Specification](../architecture/node-ops/nodes/access-api.md) ### Running Your Own Node If you’re getting started you don’t need to run your own node and you can use the above public nodes. The public access nodes are rate-limited, so as your product matures you might want to run your own node. There are multiple options available: -- Start with a [Light (Observer) Node](../references/run-and-secure/node-operation/observer-node.mdx). +- Start with a [Light (Observer) Node](../architecture/node-ops/nodes/node-operation/observer-node.md). - You can also use a third-party provider like [Quicknode](https://www.quicknode.com/docs/flow). -Check out [Running a Node](../references/run-and-secure/node-operation/observer-node.mdx) for more information. +Check out [Running a Node](../architecture/node-ops/nodes/node-operation/observer-node.md) for more information. ## SDKs and Tools diff --git a/docs/build/guides/flow-app-quickstart.md b/docs/build/guides/flow-app-quickstart.md index 1c64ccab04..adfbf66bc8 100644 --- a/docs/build/guides/flow-app-quickstart.md +++ b/docs/build/guides/flow-app-quickstart.md @@ -113,7 +113,7 @@ npm run dev:local Now that your app is running. FCL loads the configuration in `config/fcl.ts` This file contains configuration information for FCL, such as what Access Node and wallet discovery endpoint and which network to use (e.g. testnet or a local emulator). -- `accessNode.api` key specifies the address of a Flow access node. There are publically available access nodes, but have to rate limit. Alternatively, applications might want to run an Observer node [Run a Node](../../references/run-and-secure/node-operation/observer-node.mdx). +- `accessNode.api` key specifies the address of a Flow access node. There are publically available access nodes, but have to rate limit. Alternatively, applications might want to run an Observer node [Run a Node](../../architecture/node-ops/nodes/node-operation/observer-node.md). - `discovery.wallet` is an address that points to a service that lists FCL compatible wallets. Flow's FCL Discovery service is a service that FCL wallet providers can be added to, and be made 'discoverable' to any application that uses the `discovery.wallet` endpoint. Also, notice that `package.json` uses `NEXT_PUBLIC_FLOW_NETWORK=local` for `dev` command, this is used to set the network in `config/fcl.ts`. diff --git a/docs/build/mobile/_category_.yml b/docs/build/guides/mobile/_category_.yml similarity index 87% rename from docs/build/mobile/_category_.yml rename to docs/build/guides/mobile/_category_.yml index 902221f601..3eae228d44 100644 --- a/docs/build/mobile/_category_.yml +++ b/docs/build/guides/mobile/_category_.yml @@ -1,4 +1,4 @@ -label: Mobile Development +label: Building on Mobile position: 7 customProps: icon: 📱 diff --git a/docs/build/mobile/ios-quickstart.md b/docs/build/guides/mobile/ios-quickstart.md similarity index 99% rename from docs/build/mobile/ios-quickstart.md rename to docs/build/guides/mobile/ios-quickstart.md index affe1156c2..c7b47c666d 100644 --- a/docs/build/mobile/ios-quickstart.md +++ b/docs/build/guides/mobile/ios-quickstart.md @@ -252,7 +252,7 @@ https://github.com/Outblock/fcl-android One of the easiest ways to connect to a wallet via a mobile native dApp is through Flow’s new support for Wallet Connect 2.0. This is the pattern that Monster Maker uses to connect to the Dapper Self Custody wallet and Lilico. For more information on FCL Wallet Connect 2.0, check out this page: -[FCL Wallet Connect](../../tools/clients/fcl-js/wallet-connect.mdx) +[FCL Wallet Connect](../../../tools/clients/fcl-js/wallet-connect.mdx) **How to Build a Native iOS Dapp** diff --git a/docs/build/mobile/overview.md b/docs/build/guides/mobile/overview.md similarity index 100% rename from docs/build/mobile/overview.md rename to docs/build/guides/mobile/overview.md diff --git a/docs/build/mobile/react-native-quickstart.md b/docs/build/guides/mobile/react-native-quickstart.md similarity index 94% rename from docs/build/mobile/react-native-quickstart.md rename to docs/build/guides/mobile/react-native-quickstart.md index 6ee099f44b..91d4cb0539 100644 --- a/docs/build/mobile/react-native-quickstart.md +++ b/docs/build/guides/mobile/react-native-quickstart.md @@ -12,7 +12,7 @@ sidebar_position: 3 FCL-JS is the easiest way to start building decentralized applications. FCL (aka Flow Client Library) wraps much of the logic you'd have to write yourself on other blockchains. Follow this quick start and you'll have a solid overview of how to build a shippable dapp on Flow. -We're going to make an assumption that you know or understand React; however, the concepts should be easy to understand and transfer to another framework. While this tutorial will make use of Cadence (Flow's smart contract language), you do not need to know it. Instead, we recommend later diving into [learning the Cadence language](../guides/smart-contracts/cadence.md) once you've gotten the core FCL concepts down. +We're going to make an assumption that you know or understand React; however, the concepts should be easy to understand and transfer to another framework. While this tutorial will make use of Cadence (Flow's smart contract language), you do not need to know it. Instead, we recommend later diving into [learning the Cadence language](../smart-contracts/cadence.md) once you've gotten the core FCL concepts down. In this tutorial, we are going to interact with an existing smart contract on Flow's testnet known as the [Profile Contract](https://testnet.flowdiver.io/contract/A.ba1132bc08f82fe2.Profile). Using this contract, we will create a new profile and edit the profile information, both via a wallet. In order to do this, the FCL concepts we'll cover are: @@ -70,11 +70,11 @@ config({ - The `accessNode.api` key specifies the address of a Flow access node. Flow provides these, but in the future access to Flow may be provided by other 3rd parties, through their own access nodes. - `discovery.wallet` and `discovery.authn.endpoint` are addresses that point to a service that lists FCL compatible wallets. Flow's FCL Discovery service is a service that FCL wallet providers can be added to, and be made 'discoverable' to any application that uses the `discovery.wallet` and `discovery.authn.endpoint`. -> Learn more about [configuring Discovery](../../tools/clients/fcl-js/discovery.mdx) or [setting configuration values](../../tools/clients/fcl-js/api.md#setting-configuration-values). +> Learn more about [configuring Discovery](../../../tools/clients/fcl-js/discovery.mdx) or [setting configuration values](../../../tools/clients/fcl-js/api.md#setting-configuration-values). > If you are running a Wallet Discovery locally and want to use it in the React Native app, change `https://fcl-discovery.onflow.org/` to `http://:/` > For Example: -> using local [Wallet Discovery](../../tools/clients/fcl-js/discovery.mdx) and local [Dev Wallet](../../tools/flow-dev-wallet/index.md): +> using local [Wallet Discovery](../../../tools/clients/fcl-js/discovery.mdx) and local [Dev Wallet](../../../tools/flow-dev-wallet/index.md): > > ```javascript ./flow/config.js > import { config } from "@onflow/fcl"; @@ -123,7 +123,7 @@ Now we're ready to start talking to Flow! To authenticate a user, you'll need to render a `ServiceDiscovery` component provided by `fcl-react-native`. Alternatively you can build your own component using `useServiceDiscovery`. -Unauthenticate is as simple as calling `fcl.unauthenticate()`. Once authenticated, FCL sets an object called `fcl.currentUser` which exposes methods for watching changes in user data, signing transactions, and more. For more information on the `currentUser`, read more [here](../../tools/clients/fcl-js/api.md#current-user). +Unauthenticate is as simple as calling `fcl.unauthenticate()`. Once authenticated, FCL sets an object called `fcl.currentUser` which exposes methods for watching changes in user data, signing transactions, and more. For more information on the `currentUser`, read more [here](../../../tools/clients/fcl-js/api.md#current-user). Let's add in a few components and buttons buttons for sign up/login and also subscribe to changes on the `currentUser`. When the user is updated (which it will be after authentication), we'll set the user state in our component to reflect this. To demonstrate user authenticated sessions, we'll conditionally render a component based on if the user is or is not logged in. @@ -295,19 +295,19 @@ await fcl.query({ Inside the query you'll see we set two things: `cadence` and `args`. Cadence is Flow's smart contract language we mentioned. For this tutorial, when you look at it you just need to notice that it's importing the `Profile` contract from the account we named `0xProfile` earlier in our config file, then also taking an account address, and reading it. That's it until you're ready to [learn more Cadence](https://cadence-lang.org/docs/tutorial/first-steps). -In the `args` section, we are simply passing it our user's account address from the user we set in state after authentication and giving it a type of `Address`. For more possible types, [see this reference](../../tools/clients/fcl-js/api.md#ftype). +In the `args` section, we are simply passing it our user's account address from the user we set in state after authentication and giving it a type of `Address`. For more possible types, [see this reference](../../../tools/clients/fcl-js/api.md#ftype). Go ahead and click the "Send Query" button. You should see "No Profile." That's because we haven't initialized the account yet. ## Initializing the Account -For the Profile contract to store a Profile in a user's account, it does so by initializing what is called a "resource." A resource is an ownable piece of data and functionality that can live in the user's account storage. This paradigm is known is as "resource-oriented-programming", a principle that is core to Cadence and differentiates its ownership model from other smart contract languages, [read more here](../guides/smart-contracts/cadence.md#intuiting-ownership-with-resources). Cadence makes it so that resources can only exist in one place at any time, they must be deliberately created, cannot be copied, and if desired, must be deliberately destroyed. +For the Profile contract to store a Profile in a user's account, it does so by initializing what is called a "resource." A resource is an ownable piece of data and functionality that can live in the user's account storage. This paradigm is known is as "resource-oriented-programming", a principle that is core to Cadence and differentiates its ownership model from other smart contract languages, [read more here](../smart-contracts/cadence.md#intuiting-ownership-with-resources). Cadence makes it so that resources can only exist in one place at any time, they must be deliberately created, cannot be copied, and if desired, must be deliberately destroyed. -> There's a lot more to resources in Cadence than we'll cover in this guide, so if you'd like to know more, check out [this Cadence intro](../guides/smart-contracts/cadence.md). +> There's a lot more to resources in Cadence than we'll cover in this guide, so if you'd like to know more, check out [this Cadence intro](../smart-contracts/cadence.md). To do this resource initialization on an account, we're going to add another function called `initAccount`. Inside of that function, we're going to add some Cadence code which says, *"Hey, does this account have a profile? If it doesn't, let's add one."* We do that using something called a "transaction." Transactions occur when you want to change the state of the blockchain, in this case, some data in a resource, in a specific account. And there is a cost (transaction fee) in order to do that; unlike a query. -That's where we jump back into FCL code. Instead of `query`, we use `mutate` for transactions. And because there is a cost, we need to add a few fields that tell Flow who is proposing the transaction, who is authorizing it, who is paying for it, and how much they're willing to pay for it. Those fields — not surprisingly — are called: `proposer`, `authorizer`, `payer`, and `limit`. For more information on these signatory roles, check out [this doc](../basics/transactions.md#signer-roles). +That's where we jump back into FCL code. Instead of `query`, we use `mutate` for transactions. And because there is a cost, we need to add a few fields that tell Flow who is proposing the transaction, who is authorizing it, who is paying for it, and how much they're willing to pay for it. Those fields — not surprisingly — are called: `proposer`, `authorizer`, `payer`, and `limit`. For more information on these signatory roles, check out [this doc](../../basics/transactions.md#signer-roles). Let's take a look at what our account initialization function looks like: @@ -341,7 +341,7 @@ const initAccount = async () => { } ``` -You can see the new fields we talked about. You'll also notice `fcl.authz`. That's shorthand for "use the current user to authorize this transaction", (you could also write it as `fcl.currentUser.authorization`). If you want to learn more about transactions and signing transactions, you can [view the docs here](../basics/transactions.md). For this example, we'll keep it simple with the user being each of these roles. +You can see the new fields we talked about. You'll also notice `fcl.authz`. That's shorthand for "use the current user to authorize this transaction", (you could also write it as `fcl.currentUser.authorization`). If you want to learn more about transactions and signing transactions, you can [view the docs here](../../basics/transactions.md). For this example, we'll keep it simple with the user being each of these roles. You'll also notice we are awaiting a response with our transaction data by using the syntax `fcl.tx(transactionId).onceSealed()`. This will return when the blockchain has sealed the transaction and it's complete in processing it and verifying it. @@ -606,7 +606,7 @@ const styles = StyleSheet.create({ ``` -Now if you click the "Execute Transaction" button you'll see the statuses update next to "Transaction Status." When you see "4" that means it's sealed! Status code meanings [can be found here](../../tools/clients/fcl-js/api.md#transaction-statuses). +Now if you click the "Execute Transaction" button you'll see the statuses update next to "Transaction Status." When you see "4" that means it's sealed! Status code meanings [can be found here](../../../tools/clients/fcl-js/api.md#transaction-statuses). If you query the account profile again, "Profile Name:" should now display "Flow Developer". That's it! You now have a shippable Flow dapp that can auth, query, init accounts, and mutate the chain. This is just the beginning. There is so much more to know. We have a lot more resources to help you build. To dive deeper, here are a few good places for taking the next steps: @@ -620,11 +620,11 @@ That's it! You now have a shippable Flow dapp that can auth, query, init account - [Beginner Example: CryptoDappy](https://github.com/bebner/crypto-dappy) **More FCL** -- [FCL API Quick Reference](../../tools/clients/fcl-js/api) -- [More on Scripts](../../tools/clients/fcl-js/scripts.mdx) -- [More on Transactions](../../tools/clients/fcl-js/transactions.mdx) -- [User Signatures](../../tools/clients/fcl-js/user-signatures.mdx) -- [Proving Account Ownership](../../tools/clients/fcl-js/proving-authentication.mdx) +- [FCL API Quick Reference](../../../tools/clients/fcl-js/api) +- [More on Scripts](../../../tools/clients/fcl-js/scripts.mdx) +- [More on Transactions](../../../tools/clients/fcl-js/transactions.mdx) +- [User Signatures](../../../tools/clients/fcl-js/user-signatures.mdx) +- [Proving Account Ownership](../../../tools/clients/fcl-js/proving-authentication.mdx) **Other** -- [Flow Developer Onboarding Guide](../../tutorials/intro.md) +- [Flow Developer Onboarding Guide](../../../tutorials/intro.md) diff --git a/docs/build/mobile/resources/collection.png b/docs/build/guides/mobile/resources/collection.png similarity index 100% rename from docs/build/mobile/resources/collection.png rename to docs/build/guides/mobile/resources/collection.png diff --git a/docs/build/mobile/resources/connect.png b/docs/build/guides/mobile/resources/connect.png similarity index 100% rename from docs/build/mobile/resources/connect.png rename to docs/build/guides/mobile/resources/connect.png diff --git a/docs/build/mobile/resources/initialize.png b/docs/build/guides/mobile/resources/initialize.png similarity index 100% rename from docs/build/mobile/resources/initialize.png rename to docs/build/guides/mobile/resources/initialize.png diff --git a/docs/build/mobile/resources/monster_maker_logo.png b/docs/build/guides/mobile/resources/monster_maker_logo.png similarity index 100% rename from docs/build/mobile/resources/monster_maker_logo.png rename to docs/build/guides/mobile/resources/monster_maker_logo.png diff --git a/docs/build/mobile/resources/xcode_setup.png b/docs/build/guides/mobile/resources/xcode_setup.png similarity index 100% rename from docs/build/mobile/resources/xcode_setup.png rename to docs/build/guides/mobile/resources/xcode_setup.png diff --git a/docs/build/guides/smart-contracts/deploying.md b/docs/build/guides/smart-contracts/deploying.md index bea3d34386..9c2eb80f73 100644 --- a/docs/build/guides/smart-contracts/deploying.md +++ b/docs/build/guides/smart-contracts/deploying.md @@ -46,9 +46,9 @@ Once all your contracts are deployed, you can visit [flow-view-source](https://f ### Sporks -Currently, **historical event data is not migrated between sporks,** so you'll need to design your application with this in mind. We recognize the usefulness of historical event data and plan on adding a means of accessing it in the near future. Past spork transactional data is available, [See Previous Spork Access Node Info](../../../references/run-and-secure/node-operation/past-sporks) +Currently, **historical event data is not migrated between sporks,** so you'll need to design your application with this in mind. We recognize the usefulness of historical event data and plan on adding a means of accessing it in the near future. Past spork transactional data is available, [See Previous Spork Access Node Info](../../../architecture/node-ops/nodes/node-operation/past-sporks) -More Information on [Sporks](../../../references/run-and-secure/node-operation/spork) +More Information on [Sporks](../../../architecture/node-ops/nodes/node-operation/spork) ### Testnet diff --git a/docs/references/core-contracts/03-flow-token.md b/docs/references/core-contracts/03-flow-token.md index b7a9801756..76e8764a48 100644 --- a/docs/references/core-contracts/03-flow-token.md +++ b/docs/references/core-contracts/03-flow-token.md @@ -159,5 +159,5 @@ pub event BurnerCreated() ``` ### Staking Events -To learn more about staking events, read [staking/events/](../../references/run-and-secure/staking/07-staking-scripts-events.md) +To learn more about staking events, read [staking/events/](../../architecture/staking/07-staking-scripts-events.md) diff --git a/docs/references/core-contracts/06-staking-contract-reference.md b/docs/references/core-contracts/06-staking-contract-reference.md index fe49a2a548..3f8bb9a2f3 100644 --- a/docs/references/core-contracts/06-staking-contract-reference.md +++ b/docs/references/core-contracts/06-staking-contract-reference.md @@ -38,12 +38,12 @@ These scripts are read-only and get info about the current state of the staking ## Delegator Transactions Documentation for delegating with tokens is described in the staking documentation -for [the staking collection](../../references/run-and-secure/staking/14-staking-collection.mdx) +for [the staking collection](../../architecture/staking/14-staking-collection.md) # Events The `FlowIDTableStaking` contract emits an event whenever an important action occurs. -See the [staking events Documentation](../../references/run-and-secure/staking/07-staking-scripts-events.md) for more information about each event. +See the [staking events Documentation](../../architecture/staking/07-staking-scripts-events.md) for more information about each event. ```cadence pub event NewEpoch(totalStaked: UFix64, totalRewardPayout: UFix64) diff --git a/docs/references/core-contracts/11-staking-collection.md b/docs/references/core-contracts/11-staking-collection.md index 65ab12a442..297be837af 100644 --- a/docs/references/core-contracts/11-staking-collection.md +++ b/docs/references/core-contracts/11-staking-collection.md @@ -16,7 +16,7 @@ to perform staking actions for any of their nodes or delegators. The staking collection also manages creating a node's machine accounts if they have any collector or consensus nodes. It also allows them to deposit and withdraw tokens from any of their machine accounts through the staking collection. -See the [Staking Collection Docs](../../references/run-and-secure/staking/14-staking-collection.mdx) for more information on the design of the staking collection contract. +See the [Staking Collection Docs](../../architecture/staking/14-staking-collection.md) for more information on the design of the staking collection contract. Source: [FlowStakingCollection.cdc](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowStakingCollection.cdc) diff --git a/docs/references/index.md b/docs/references/index.md index 36fff777c4..7cfd9fc123 100644 --- a/docs/references/index.md +++ b/docs/references/index.md @@ -18,7 +18,7 @@ Quick references to very helpful parts of developer documentation. Languages to ## Network Get Flow blockchain data from Access Nodes, both REST and gRPC endpoints are available. Get the current status of mainnet and testnet networks. -- [Flow Access API](./run-and-secure/nodes/access-api.md) +- [Flow Access API](../architecture/node-ops/nodes/access-api.md) - [Mainnet](./flow-networks/accessing-mainnet.md): `access.mainnet.nodes.onflow.org:9000` - [Testnet](./flow-networks/accessing-testnet.md): `access.devnet.nodes.onflow.org:9000` - [Status Page](https://status.onflow.org/) - Network status page diff --git a/docs/references/run-and-secure/node-operation/_category_.json b/docs/references/run-and-secure/node-operation/_category_.json deleted file mode 100644 index f119128e11..0000000000 --- a/docs/references/run-and-secure/node-operation/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Node Operators", - "position": 6 -} \ No newline at end of file diff --git a/docs/references/run-and-secure/node-operation/guides/_category_.json b/docs/references/run-and-secure/node-operation/guides/_category_.json deleted file mode 100644 index 54bb34dc50..0000000000 --- a/docs/references/run-and-secure/node-operation/guides/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Node Operations Guide" - } \ No newline at end of file diff --git a/docs/references/run-and-secure/nodes/faq/developers.md b/docs/references/run-and-secure/nodes/faq/developers.md index 7c8a5130e0..99a6982242 100644 --- a/docs/references/run-and-secure/nodes/faq/developers.md +++ b/docs/references/run-and-secure/nodes/faq/developers.md @@ -52,7 +52,7 @@ You can download FCL (Flow Client Library) here: [https://github.com/onflow/fcl-js](https://github.com/onflow/fcl-js) To connect to an access node you will need to provide a URL to the SDK. -[testnet and mainnet](../access-api.md) +[testnet and mainnet](../../../../architecture/node-ops/nodes/access-api.md) Here are examples of querying an access node at the bottom of this page: @@ -109,7 +109,7 @@ You can find out more about events in Cadence here: As an example of the kinds of information events can contain, see the documentation of the events that the staking protocol emits: -[staking/events](../../../../references/run-and-secure/staking/07-staking-scripts-events.md) +[staking/events](../../../../architecture/staking/07-staking-scripts-events.md) ### Consuming Events diff --git a/docs/references/run-and-secure/nodes/faq/operators.md b/docs/references/run-and-secure/nodes/faq/operators.md index df7f5e4622..082f8d96bb 100644 --- a/docs/references/run-and-secure/nodes/faq/operators.md +++ b/docs/references/run-and-secure/nodes/faq/operators.md @@ -56,7 +56,7 @@ You can download the FCL (Flow Client Library) here: [https://github.com/onflow/fcl-js](https://github.com/onflow/fcl-js) To connect to an access node you will need to provide a URL to the SDK. -[access node urls](../access-api.md) +[access node urls](../../../../architecture/node-ops/nodes/access-api.md) Here are examples of querying an access node at the bottom of this page: @@ -113,7 +113,7 @@ You can find out more about events in Cadence here: As an example of the kinds of information events can contain, see the documentation of the events that the staking protocol emits: -[staking/events](../../staking/07-staking-scripts-events.md) +[staking/events](../../../../architecture/staking/07-staking-scripts-events.md) ### Consuming Events @@ -192,4 +192,4 @@ You can query the access API to get events for a block range. See Access API spe You can follow Flow node software releases here: [https://github.com/onflow/flow-go/releases](https://github.com/onflow/flow-go/releases). ## How do I run a Flow node and become a node operator? -See the dedicated section on node operation: [nodes/node-operation/](../../node-operation/index.md) +See the dedicated section on node operation: [nodes/node-operation/](../../../../architecture/node-ops/index.md) diff --git a/docs/references/run-and-secure/nodes/flow-port/index.md b/docs/references/run-and-secure/nodes/flow-port/index.md index 1f4151547f..44c2ec3ce7 100644 --- a/docs/references/run-and-secure/nodes/flow-port/index.md +++ b/docs/references/run-and-secure/nodes/flow-port/index.md @@ -75,14 +75,14 @@ So you have decided you want to be a part of the Flow Network. Welcome! You are If you are using a custody provider who controls your account and private keys for you, such as Kraken, Finoa, or Coinlist, they all have different policies and processes for what you need to do to stake your tokens, the rewards you receive, and the fees that they take from your staking rewards. ### Starting a Manual Staking Transaction - 1. You need to have FLOW in order to stake. Please see the [FLOW Token](../../../../references/core-contracts/03-flow-token.md) reference for information on how to become a FLOW holder. + 1. You need to have FLOW in order to stake. Please see the [FLOW Token](../../../core-contracts/03-flow-token.md) reference for information on how to become a FLOW holder. 2. Once you have FLOW tokens in your account, you can start staking through [Flow Port](https://port.onflow.org/) or, if applicable, with your [custody provider](#staking-via-a-custody-provider). 3. If you are using Flow Port, log-in with your Flow account address and navigate to the Stake/Delegate page. See the Manual Staking/Delegating section below for more information about what to do next. ### Manual Staking/Delegating -If you are not using a custody provider, there is more responsibility that you have to accept, because you have complete control of your tokens. You need to ensure that you are well informed about the staking process and potentially node operation process because you will have to manage those on your own. Please read the [staking documentation](../../../../references/run-and-secure/staking/index.md) before continuing with this guide. +If you are not using a custody provider, there is more responsibility that you have to accept, because you have complete control of your tokens. You need to ensure that you are well informed about the staking process and potentially node operation process because you will have to manage those on your own. Please read the [staking documentation](../../../../architecture/staking/index.md) before continuing with this guide. Below are the various options you can choose. Please be aware, that at this time you can only have 1 stake or 1 delegate per account. This means that if you want to do multiple stakes, multiple delegates, or a mixture of stakes and delegates, you will need to create multiple accounts to do so. Please read them carefully as it will help you understand which route is best for your situation: - Staking your own Node: You are responsible for running and maintaining a Flow Node. You are also solely responsible for providing the minimum stake for your selected node (minimum 135,000 FLOW) and you have the technical know-how and bandwidth to run and operate a node in the Flow protocol. @@ -97,7 +97,7 @@ Please see a list [here](https://github.com/onflow/flow/blob/master/nodeoperator 3. Input the amount of Flow you wish to stake with that node. You must stake at least the minimum in order for your stake request to be successfully processed. You are able to provide the minimum stake across multiple transactions. Meaning, you could execute your stake transaction with half of the minumum required. Then, before the next epoch, you can choose to 'Add Flow' to that pending stake to get it to the minimum stake required. - 4. Run the [bootstrapping instructions](../../../../references/run-and-secure/node-operation/node-bootstrap.mdx) and provide the remaining technical details needed to stake a node. + 4. Run the [bootstrapping instructions](../../../../architecture/node-ops/nodes/node-operation/node-bootstrap.md) and provide the remaining technical details needed to stake a node. ### Delegating 1. Once you have navigated to the staking/delegating page in Flow Port, click on the Delegate option. @@ -109,13 +109,13 @@ Please see a list [here](https://github.com/onflow/flow/blob/master/nodeoperator 4. At this point, you can also cancel the pending delegation. On the pending delegation, you will see an `X` that you can click to initiate the cancelation transaction. ## I have successfully executed a Stake Transaction, now what? - - Now that you have executed a stake transaction in either Flow Port or your custody provider’s portal, that transaction will sit in a pending status until it is processed, which will be at the next [Epoch](../../../../references/run-and-secure/staking/index.md#epochs) Date (which is currently weekly). - - During the next [Epoch](../../../../references/run-and-secure/staking/index.md#epochs), the transaction will be processed. If successful, the provided FLOW will be staked and the associated Node would be either **a)** included in the network protocol if it is a new node or **b)** continue to operate as is in the network protocol. + - Now that you have executed a stake transaction in either Flow Port or your custody provider’s portal, that transaction will sit in a pending status until it is processed, which will be at the next [Epoch](../../../../architecture/staking/index.md#epochs) Date (which is currently weekly). + - During the next [Epoch](../../../../architecture/staking/index.md#epochs), the transaction will be processed. If successful, the provided FLOW will be staked and the associated Node would be either **a)** included in the network protocol if it is a new node or **b)** continue to operate as is in the network protocol. - You are now a part of Flow, and will begin to earn rewards for being a valued member of the network! ## What else can I do? - Add additional stake to your existing stake. Any added FLOW will again sit in a pending status and be processed at the next epoch. - - Withdraw/re-stake your earned rewards. If you decide to withdraw your rewards, this action will happen instantly. If you decide to re-stake your rewards, the request will again sit in a pending status and will be processed at the next [Epoch](../../../../references/run-and-secure/staking/index.md#epochs). + - Withdraw/re-stake your earned rewards. If you decide to withdraw your rewards, this action will happen instantly. If you decide to re-stake your rewards, the request will again sit in a pending status and will be processed at the next [Epoch](../../../../architecture/staking/index.md#epochs). - Withdraw Rewards and send your earnings to other accounts. If you decide that you want to withdraw your rewards and send those earnings to other accounts via the 'Send FLOW' function, you should first withdraw your rewards. Once in your account, you can send these funds to any other account via the 'Send FLOW' option. - Request to be unstaked from the network. The unstake request will sit in a pending status for two epochs. Once it is processed, the amount that has been unstaked will sit in your unstaked FLOW amount and can now be withdrawn or re-staked. - Change the node you are staked/delegated to. If your staked/delegated node has no FLOW actively staked and you have completely withdrawn all unstaked amounts and rewards associated with the node, then you can move your stake to a different node. Click on the `Change Node` button to initiate this process. Please note that this feature is only visible once you get your active stake/delegate into the appropriate status. diff --git a/docs/references/run-and-secure/nodes/flow-port/staking-guide.md b/docs/references/run-and-secure/nodes/flow-port/staking-guide.md index 66c02ec072..823d3aeb05 100644 --- a/docs/references/run-and-secure/nodes/flow-port/staking-guide.md +++ b/docs/references/run-and-secure/nodes/flow-port/staking-guide.md @@ -4,7 +4,7 @@ title: Flow Port Staking Guide This guide provides step-by-step instructions for using the Flow Port to stake your FLOW tokens and start earning rewards. Currently, Flow Port only supports staking or delegating using tokens held in Blocto or Ledger wallets. -If you're new to the concepts of staking and delegating you can [read this guide](../../../../references/run-and-secure/staking/index.md) to learn more. +If you're new to the concepts of staking and delegating you can [read this guide](../../../../architecture/staking/index.md) to learn more. ## First Step @@ -32,7 +32,7 @@ You'll also need the following information about your node: - Staking Key - Machine Account Public Key (for collection/consensus nodes only) -If you don't have this information, go [here](../../../../references/run-and-secure/node-operation/node-bootstrap.mdx#step-1---run-genesis-bootstrap) for instructions on how to acquire it. +If you don't have this information, go [here](../../../../architecture/node-ops/nodes/node-operation/node-bootstrap.md#step-1---run-genesis-bootstrap) for instructions on how to acquire it. ### Begin Staking @@ -46,7 +46,7 @@ but you may stake as much as you like beyond that. Here's the screen you should ![Flow Port Staking](port-stake-0-03.png) Clicking next will take you to the final screen, where you'll need to enter information about your node you previously obtained. -If you don't have this information, go [here](../../../../references/run-and-secure/node-operation/node-bootstrap.mdx#step-1---run-genesis-bootstrap) for instructions on how to acquire it. +If you don't have this information, go [here](../../../../architecture/node-ops/nodes/node-operation/node-bootstrap.md#step-1---run-genesis-bootstrap) for instructions on how to acquire it. Here's the screen you should see: ![Flow Port Staking](port-stake-0-04.png) @@ -68,11 +68,11 @@ If you are already a node operator with a staked node, you will first need to up ![Flow Port Staking](staking-collection.png) -Once this is done, you can now create a [Machine Account](../../../../references/run-and-secure/node-operation/machine-existing-operator.mdx) by clicking the "Upgrade Node" button on the Stake & Delegate page. +Once this is done, you can now create a [Machine Account](../../../../architecture/node-ops/nodes/node-operation/machine-existing-operator.md) by clicking the "Upgrade Node" button on the Stake & Delegate page. ![Flow Port Staking](machine-account.png) -You can follow the guide [here](../../../../references/run-and-secure/node-operation/machine-existing-operator.mdx) to create your Machine Account. +You can follow the guide [here](../../../../architecture/node-ops/nodes/node-operation/machine-existing-operator.md) to create your Machine Account. ## Delegating diff --git a/docs/references/run-and-secure/nodes/index.md b/docs/references/run-and-secure/nodes/index.md deleted file mode 100644 index dd4b081113..0000000000 --- a/docs/references/run-and-secure/nodes/index.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Flow Nodes -sidebar_position: 7 ---- - -# Hello Node Operator! - -Flow nodes are vital components of the Flow blockchain. These nodes are responsible for a variety of network operations to maintain the distributed ledger. - -## Why run a node? - ---- - -By running your own node, you have direct access to the evolving state of the network, without having to rely on third parties. -This increases privacy and security, reduces reliance on external servers, and helps balance load distribution. -By running a node, you also directly contribute to the security and decentralization of the whole network. - -Flow multirole architecture makes it more scalable and provides several node types that you as a node operator can pick and choose from. - - -## Which node should you run? - ---- - -The different types of nodes are described [here](../../../references/run-and-secure/node-operation/node-roles.mdx). As node operator, you can choose to run any of the different types of node that best fits your needs. - -The nodes are classified as follows, - -![Flownodesdiagram.png](../../../references/run-and-secure/node-operation/Flownodesdiagram.png) - -## Light node a.k.a. Observer node - ---- - -The light node is one of the easiest nodes to spin up and can be run by Dapp developers who need the latest block data available locally, e.g. a wallet application that needs to track the latest block ID and height. -In addition to supporting dapps, an observer node can also be run by access node operators who want to scale their access nodes' endpoints. Access node operators can spin up geographically dispersed observer nodes which can talk to their staked access nodes and to each other. - -The observer node is not staked but still provides the same API as the access node. - - -
-To run a light node, follow this [guide](../../../references/run-and-secure/node-operation/observer-node.mdx) -
-
- -## Archive node - ---- - -The Archive node provides a scalable and efficient way to access the history of Flow protocol and the execution state for the current spork. Like the observer node, it too can be run by anyone without being staked or added to the approved list of nodes. -The Archive node follows the chain, stores and indexes both protocol and execution state, and allows retrieval of blocks, collections, transactions and events from the genesis of the current spork. - -It also allows script execution and other read-only queries that require the execution state to be read. It can answer any queries from past data e.g. “what was the Flow account balance at height X?”, where X is several thousand blocks in the past. - -_The archive node is currently in beta and will be available as a GA release in H2 2023 (see [here](https://flow.com/post/flow-blockchain-node-operation-archive-node) for more)_ - -## Full node - ---- - -In a nutshell, Full Nodes are staked network participants that drive network progress, e.g. by creating and executing new blocks. They are the primary contributors to network safety (all of them validate the correctness of the consensus process and secure the network additionally through their role-specific tasks). In comparison, Light Nodes don't contribute to the networks progress. Though, they help to secure the network by also validating the integrity of the consensus process. -- The Access node is a full node that serves as an RPC node and acts as a gateway node for the network. -- The Validator node (Collection, Consensus, Verification and Execution) is a full node that plays a role in block generation. - - -## Access node - ---- - -If you want local access to the protocol state data (blocks, collections, transactions) and do not want to use one of the community access nodes you can run an access node. -Dapp developers, chain explorers, chain analytics etc. who want exclusive access to chain data and not be subject to the rate-limits on the community access node can choose to run an access node. - -An access node is minimally staked for network security. -The central goal for Access Nodes is to provide RPC functionality to its node operator. -In comparison, contributing to protocol progress (e.g. routing transactions to collector clusters, relaying blocks to the unstaked peer-to-peer network, etc.) should only take up a marginal fraction an Access Node's computational resources. -Furthermore, Access Node operators can freely rate-limit the amount of resources their Access Node dedicates to supporting the broader ecosystem. Therefore, Access Nodes do not receive staking rewards. - - -
- Launch an access node using QuickNode - - https://www.quicknode.com/chains/flow - -
-
- - - -
- To run a self-hosted access node, follow this [guide](../../../references/run-and-secure/node-operation/access-node-setup.md) -
-
- - -
-Alternately, instead of running an access node, you can use the [Flow community](./access-api.md) access nodes or the ones run by any of the other node operators. -
-
- -## Validator node - ---- - -You can also be a core participant in running the Flow network and contribute to securing it. Depending on your preference, you could run one or any combination of the following node roles: -- Collection Nodes collaboratively create batches of transactions (in Flow terminology collections). -- Consensus Nodes create blocks, schedule them for asynchronous execution, and commit execution results once they are verified (so called sealing). In addition, they orchestrate the Flow protocol and enforce protocol compliance. -- Execution Nodes asynchronously execute blocks. They are the power-houses in the protocol, providing the vast computational resources available to Flow transactions. -- Verification Nodes check the execution results in a distributed manner. - -Nodes with these roles are staked and also receive staking rewards. - -### Running a staked node - ---- - -To run a staked node (node type access, collection, consensus, verification or execution) the node must: -* be registered with sufficient stake -* be authorized by the governance working group - -Before proceeding, ensure you have the stake required for your new node and that your node will be authorized by the governance working group (apply [here](https://github.com/onflow/flow-validator)). - -To set up a new staked node after it has been authorized by the Flow governance working group, you will need to complete the following steps: - -1. [Provision](../../../references/run-and-secure/node-operation/node-setup.mdx) the machine on which your node will run. - -2. [Generate and register](../../../references/run-and-secure/node-operation/node-bootstrap.mdx) your node identity. - -3. [Start](../../../references/run-and-secure/node-operation/node-bootstrap.mdx#step-3---start-your-flow-node) your node! diff --git a/docs/references/run-and-secure/staking/_category_.yml b/docs/references/run-and-secure/staking/_category_.yml deleted file mode 100644 index 951e6775c9..0000000000 --- a/docs/references/run-and-secure/staking/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -position: 2 diff --git a/docs/tools/clients/fcl-js/api.md b/docs/tools/clients/fcl-js/api.md index 267da115f4..1a3b922225 100644 --- a/docs/tools/clients/fcl-js/api.md +++ b/docs/tools/clients/fcl-js/api.md @@ -508,7 +508,7 @@ The callback sent to `subscribe` will be called with a list of `authn` services. > 📣 **These methods can be used in browsers and NodeJS.** -These methods allows dapps to interact directly with the Flow blockchain via a set of functions that currently use the [Access Node API](../../../references/run-and-secure/nodes/access-api.md). +These methods allows dapps to interact directly with the Flow blockchain via a set of functions that currently use the [Access Node API](../../../architecture/node-ops/nodes/access-api.md). --- diff --git a/docs/tools/clients/fcl-js/sdk-guidelines.mdx b/docs/tools/clients/fcl-js/sdk-guidelines.mdx index 709bf9c878..108687b2ad 100644 --- a/docs/tools/clients/fcl-js/sdk-guidelines.mdx +++ b/docs/tools/clients/fcl-js/sdk-guidelines.mdx @@ -52,7 +52,7 @@ config({ }) ``` -📖 **gRPC Access API URLs** can be found [here](../../../references/run-and-secure/nodes/access-api.md#flow-access-node-endpoints). `sdk.transport` must be specified if you wish to use the gRPC API. The public Flow gRPC access nodes are accessible at: +📖 **gRPC Access API URLs** can be found [here](../../../architecture/node-ops/nodes/access-api.md#flow-access-node-endpoints). `sdk.transport` must be specified if you wish to use the gRPC API. The public Flow gRPC access nodes are accessible at: - Testnet `https://access-testnet.onflow.org` - Mainnet `https://access-mainnet.onflow.org` - Local Emulator `127.0.0.1:3569` diff --git a/docs/tutorials/DappArchitectures.md b/docs/tutorials/DappArchitectures.md index 4838a98e0f..63ae1d1e80 100644 --- a/docs/tutorials/DappArchitectures.md +++ b/docs/tutorials/DappArchitectures.md @@ -38,8 +38,8 @@ In some cases, Tatum will totally obviate the need to use the Flow SDK, or imple One option is to listen to the events, maintain them, and index them. Third-party services like [Graffle](https://graffle.io/) and Tatum also provide REST APIs, and programmatic notifications/webhooks to receive Flow blockchain data such as events and transactions. Specifically, Graffle can provide easy access to the past and real-time events on the Flow blockchain. -These third-party services can insulate your application from the requirement of being aware of [sporks](../references/run-and-secure/node-operation/spork.mdx#past-and-upcoming-sporks). -Otherwise, you will have to add logic in your application to navigate across [past sporks](../references/run-and-secure/node-operation/spork.mdx#past-and-upcoming-sporks) when looking up past blockchain data. +These third-party services can insulate your application from the requirement of being aware of [sporks](../architecture/node-ops/nodes/node-operation/spork.md#past-and-upcoming-sporks). +Otherwise, you will have to add logic in your application to navigate across [past sporks](../architecture/node-ops/nodes/node-operation/spork.md#past-and-upcoming-sporks) when looking up past blockchain data. With any of these payment rails choices, dapp developers should do their own legal/compliance due diligence. diff --git a/docusaurus.config.js b/docusaurus.config.js index 2442ed3c28..5f956c6f7c 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -269,6 +269,12 @@ const config = { label: 'Tools', activeBasePath: '/tools', }, + { + to: 'architecture', + position: 'left', + label: 'Architecture', + activeBasePath: '/architecture', + }, { to: 'references', position: 'left', @@ -314,7 +320,7 @@ const config = { label: 'Cadence', }, { - to: '/build/mobile/overview', + to: '/build/guides/mobile/overview', label: 'Mobile', }, { @@ -417,19 +423,19 @@ const config = { label: 'Flowdiver Testnet', }, { - to: '/references/run-and-secure/node-operation/past-sporks/', + to: '/architecture/node-ops/nodes/node-operation/past-sporks', label: 'Past Sporks', }, { - to: '/references/run-and-secure/node-operation/upcoming-sporks', + to: '/architecture/node-ops/nodes/node-operation/upcoming-sporks', label: 'Upcoming Sporks', }, { - to: '/references/run-and-secure/node-operation/', + to: '/architecture/node-ops', label: 'Node Operation', }, { - to: '/references/run-and-secure/node-operation/spork/', + to: '/architecture/node-ops/nodes/node-operation/spork', label: 'Spork Information', }, ], diff --git a/sidebars.js b/sidebars.js index 9ab759707b..ca70a6fafd 100644 --- a/sidebars.js +++ b/sidebars.js @@ -15,7 +15,47 @@ const sidebars = { overview: [{ type: 'autogenerated', dirName: 'overview' }], architecture: [{ type: 'autogenerated', dirName: 'architecture' }], - build: [{ type: 'autogenerated', dirName: 'build' }], + build: [ + 'build/flow', + { + type: 'category', + label: 'Getting started', + items: [{ type: 'autogenerated', dirName: 'build/getting-started' }], + }, + 'build/building-vs-other-chains', + { + type: 'category', + label: 'Basic Concepts', + items: [{ type: 'autogenerated', dirName: 'build/basics' }], + }, + { + type: 'category', + label: 'Advanced Concepts', + items: [{ type: 'autogenerated', dirName: 'build/advanced-concepts' }], + }, + { + type: 'category', + label: 'Guides', + items: [{ type: 'autogenerated', dirName: 'build/guides' }], + }, + { + type: 'category', + label: 'Best Practices', + items: [{ type: 'autogenerated', dirName: 'build/best-practices' }], + }, + { + type: 'category', + label: 'Cadence reference', + items: [ + 'build/cadence-reference/json-cadence-spec', + { + type: 'link', + label: 'Language reference', + href: 'https://cadence-lang.org/docs/language/', + }, + ], + }, + ], nodeOps: [{ type: 'autogenerated', dirName: 'node-ops' }], tutorials: [{ type: 'autogenerated', dirName: 'tutorials' }], tools: [{ type: 'autogenerated', dirName: 'tools' }], diff --git a/src/data/pages/home.tsx b/src/data/pages/home.tsx index ff2fbab9a3..ad007d0da6 100644 --- a/src/data/pages/home.tsx +++ b/src/data/pages/home.tsx @@ -46,7 +46,7 @@ const contentNavigationListItems: ContentNavigationListProps = { { title: 'Mobile', text: 'Build truly mobile first experiences', - link: '/build/mobile/overview', + link: '/build/guides/mobile/overview', icon: 'tools', }, ], diff --git a/vercel.json b/vercel.json index ac81fa1f3e..04012ce280 100644 --- a/vercel.json +++ b/vercel.json @@ -169,12 +169,12 @@ }, { "source": "/mobile/:path*", - "destination": "/build/mobile/:path*", + "destination": "/build/guides/mobile/:path*", "permanent": true }, { "source": "/concepts/mobile/:path*", - "destination": "/build/mobile/:path*", + "destination": "/build/guides/mobile/:path*", "permanent": true }, { @@ -788,17 +788,22 @@ }, { "source": "/build/mobile/monster-maker", - "destination": "/build/mobile/ios-quickstart", + "destination": "/build/guides/mobile/ios-quickstart", + "permanent": true + }, + { + "source": "/build/mobile/:path*", + "destination": "/build/guides/mobile/:path*", "permanent": true }, { "source": "/build/mobile", - "destination": "/build/mobile/overview", + "destination": "/build/guides/mobile/overview", "permanent": true }, { "source": "/building-on-flow/mobile", - "destination": "/build/mobile/overview", + "destination": "/build/guides/mobile/overview", "permanent": true }, { diff --git a/yarn.lock b/yarn.lock index 3740d9ef25..112b1df299 100644 --- a/yarn.lock +++ b/yarn.lock @@ -175,18 +175,18 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.8.3": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" - integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@7.12.9": version "7.12.9" @@ -211,32 +211,32 @@ source-map "^0.5.0" "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.22.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" - integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" + integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.5" + "@babel/parser" "^7.23.5" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.5" + "@babel/types" "^7.23.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.9", "@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.9", "@babel/generator@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" + integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.5" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -248,14 +248,14 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== @@ -266,22 +266,22 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz#2a8792357008ae9ce8c0f2b78b9f646ac96b314b" + integrity sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -301,7 +301,7 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -321,7 +321,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== @@ -335,10 +335,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -363,7 +363,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": +"@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -372,7 +372,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -402,20 +402,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" @@ -426,44 +426,52 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e" + integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.5" + "@babel/types" "^7.23.5" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" + integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - 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.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + 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.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" @@ -514,17 +522,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -549,10 +557,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== +"@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -612,10 +620,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== +"@babel/plugin-syntax-typescript@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -627,211 +635,211 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz#054afe290d64c6f576f371ccc321772c8ea87ebb" - integrity sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ== +"@babel/plugin-transform-async-generator-functions@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" + integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" + integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -842,108 +850,108 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-constant-elements@^7.18.12": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz#6dfa7c1c37f7d7279e417ceddf5a04abb8bb9c29" - integrity sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz#5efc001d07ef0f7da0d73c3a86c132f73d28e43c" + integrity sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== +"@babel/plugin-transform-react-display-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" + integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -955,43 +963,43 @@ "@babel/plugin-transform-react-jsx" "^7.22.5" "@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" - integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" -"@babel/plugin-transform-react-pure-annotations@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" - integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== +"@babel/plugin-transform-react-pure-annotations@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" + integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.18.6", "@babel/plugin-transform-runtime@^7.22.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz#c956a3f8d1aa50816ff6c30c6288d66635c12990" - integrity sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.4.tgz#5132b388580002fc5cb7c84eccfb968acdc231cb" + integrity sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw== dependencies: "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" @@ -1000,102 +1008,103 @@ babel-plugin-polyfill-regenerator "^0.5.3" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127" - integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== +"@babel/plugin-transform-typescript@^7.23.3": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.5.tgz#83da13ef62a1ebddf2872487527094b31c9adb84" + integrity sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-create-class-features-plugin" "^7.23.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.23.3" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.22.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.2.tgz#1f22be0ff0e121113260337dbc3e58fafce8d059" - integrity sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.5.tgz#350a3aedfa9f119ad045b068886457e895ba0ca1" + integrity sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A== dependencies: - "@babel/compat-data" "^7.23.2" + "@babel/compat-data" "^7.23.5" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1107,56 +1116,55 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.23.2" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.23.0" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.23.0" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.23.0" - "@babel/plugin-transform-modules-commonjs" "^7.23.0" - "@babel/plugin-transform-modules-systemjs" "^7.23.0" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.3" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.23.0" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.23.0" babel-plugin-polyfill-corejs2 "^0.4.6" babel-plugin-polyfill-corejs3 "^0.8.5" babel-plugin-polyfill-regenerator "^0.5.3" @@ -1173,27 +1181,27 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6", "@babel/preset-react@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc" - integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" + integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-display-name" "^7.23.3" "@babel/plugin-transform-react-jsx" "^7.22.15" "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.23.3" "@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.22.5": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz#c8de488130b7081f7e1482936ad3de5b018beef4" - integrity sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" + integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.23.0" - "@babel/plugin-transform-typescript" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-typescript" "^7.23.3" "@babel/regjsgen@^0.8.0": version "0.8.0" @@ -1201,28 +1209,21 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.18.6", "@babel/runtime-corejs3@^7.22.6": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.2.tgz#a5cd9d8b408fb946b2f074b21ea40c04e516795c" - integrity sha512-54cIh74Z1rp4oIjsHjqN+WM4fMyCBYe+LpZ9jWm51CZ1fbH3SkAzQD/3XLoNkjbJ7YEmjobLXyvQrFypRHOrXw== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.5.tgz#818778beea4f23d40b77b5ad213894404c14f3f3" + integrity sha512-7+ziVclejQTLYhXl+Oi1f6gTGD1XDCeLa4R472TNGQxb08zbEJ0OdNoh5Piz+57Ltmui6xR88BXR4gS3/Toslw== dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.21.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" + integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.12.7", "@babel/template@^7.22.15", "@babel/template@^7.22.5": +"@babel/template@^7.12.7", "@babel/template@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -1231,28 +1232,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.8", "@babel/traverse@^7.23.2", "@babel/traverse@^7.4.5": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.8", "@babel/traverse@^7.23.5", "@babel/traverse@^7.4.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" + integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/parser" "^7.23.5" + "@babel/types" "^7.23.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.5", "@babel/types@^7.4.4": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" + integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -1276,17 +1277,17 @@ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@discordjs/builders@^1.5.0": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.6.5.tgz#3e23912eaab1d542b61ca0fa7202e5aaef2b7200" - integrity sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg== - dependencies: - "@discordjs/formatters" "^0.3.2" - "@discordjs/util" "^1.0.1" - "@sapphire/shapeshift" "^3.9.2" - discord-api-types "0.37.50" + version "1.7.0" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.7.0.tgz#e2478c7e55b0f4c40837edb8f102bce977323a37" + integrity sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw== + dependencies: + "@discordjs/formatters" "^0.3.3" + "@discordjs/util" "^1.0.2" + "@sapphire/shapeshift" "^3.9.3" + discord-api-types "0.37.61" fast-deep-equal "^3.1.3" ts-mixer "^6.0.3" - tslib "^2.6.1" + tslib "^2.6.2" "@discordjs/collection@^1.4.0", "@discordjs/collection@^1.5.1": version "1.5.3" @@ -1300,12 +1301,12 @@ dependencies: discord-api-types "^0.37.35" -"@discordjs/formatters@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.3.2.tgz#3ae054f7b3097cc0dc7645fade37a3f20fa1fb4b" - integrity sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA== +"@discordjs/formatters@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.3.3.tgz#b16fdd79bb819680ab7e519193004e9dc124a749" + integrity sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w== dependencies: - discord-api-types "0.37.50" + discord-api-types "0.37.61" "@discordjs/rest@^1.6.0": version "1.7.1" @@ -1331,10 +1332,10 @@ resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-0.3.1.tgz#4e8737e1dcff7e9f5eccc3116fb44755b65b1e97" integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA== -"@discordjs/util@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.0.1.tgz#7d6f97b65425d3a8b46ea1180150dee6991a88cf" - integrity sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA== +"@discordjs/util@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.0.2.tgz#dc1896d764452b1bd9707eb9aa99ccfbb30bd1c0" + integrity sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw== "@discoveryjs/json-ext@0.5.7": version "0.5.7" @@ -2041,10 +2042,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -2056,10 +2057,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.52.0": - version "8.52.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" - integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== +"@eslint/js@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" + integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== "@exodus/schemasafe@^1.0.0-rc.2": version "1.3.0" @@ -2067,9 +2068,9 @@ integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw== "@fastify/busboy@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" - integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== "@floating-ui/core@^1.4.2": version "1.5.0" @@ -2098,24 +2099,24 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9" integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== -"@fortawesome/fontawesome-common-types@6.4.2": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz#1766039cad33f8ad87f9467b98e0d18fbc8f01c5" - integrity sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA== +"@fortawesome/fontawesome-common-types@6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.0.tgz#5d3912d28a2fb3e6c867320eb27a71f23e7bcb29" + integrity sha512-vYC8oN2l8meu05sRi1j3Iie/HNFAeIxpitYFhsUrBc11TxiMken9QdXnSQ0q16FYsOSt/6soxs5ghdk+VYGiog== "@fortawesome/fontawesome-svg-core@^6.4.2": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz#37f4507d5ec645c8b50df6db14eced32a6f9be09" - integrity sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg== + version "6.5.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.0.tgz#4957e163bb890963442c110c5290703af21803d9" + integrity sha512-5DrR+oxQr+ruRQ3CEVV8DSCT/q8Atm56+FzAs0P6eW/epW47OmecSpSwc/YTlJ3u5BfPKUBSGyPR2qjZ+5eIgA== dependencies: - "@fortawesome/fontawesome-common-types" "6.4.2" + "@fortawesome/fontawesome-common-types" "6.5.0" "@fortawesome/free-solid-svg-icons@^6.4.2": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz#33a02c4cb6aa28abea7bc082a9626b7922099df4" - integrity sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA== + version "6.5.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.0.tgz#bc50a291948fa43b1a9502548ac0b02e7b1f2433" + integrity sha512-6ZPq8mme67Q7O9Fbp2O+Z7mPZbcWTsRv555JLftLaTodiV0Wq+99YgMhyQ8O6mgNQfComqS9OEvqs7M8ySA92g== dependencies: - "@fortawesome/fontawesome-common-types" "6.4.2" + "@fortawesome/fontawesome-common-types" "6.5.0" "@fortawesome/react-fontawesome@^0.2.0": version "0.2.0" @@ -2336,9 +2337,9 @@ fastq "^1.6.0" "@npmcli/config@^6.0.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.3.0.tgz#9fda323682fdd0505e9584358f6de502b0d01a81" - integrity sha512-gV64pm5cQ7F2oeoSJ5HTfaKxjFsvC4dAbCsQbtbOkEOymM6iZI62yNGCOLjcq/rfYX9+wVn34ThxK7GZpUwWFg== + version "6.4.0" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.4.0.tgz#3b1ddfa0c452fd09beac2cf05ca49b76c7a36bc8" + integrity sha512-/fQjIbuNVIT/PbXvw178Tm97bxV0E0nVUFKHivMKtSI2pcs8xKdaWkHJxf9dTI0G/y5hp/KuCvgcUu5HwAtI1w== dependencies: "@npmcli/map-workspaces" "^3.0.2" ci-info "^3.8.0" @@ -2349,6 +2350,20 @@ semver "^7.3.5" walk-up-path "^3.0.1" +"@npmcli/config@^8.0.0": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-8.0.2.tgz#61f50dbf9a1b032e341cb4cf4f74c34d3f43d358" + integrity sha512-g+DAp7bUsiUDynRI4jTO0wPAXJpy3puhovHHg8S4iq54NF8zd00588GJOm5ARxDaDUdKCUYu9E5fNc+esYl5JA== + dependencies: + "@npmcli/map-workspaces" "^3.0.2" + ci-info "^4.0.0" + ini "^4.1.0" + nopt "^7.0.0" + proc-log "^3.0.0" + read-package-json-fast "^3.0.2" + semver "^7.3.5" + walk-up-path "^3.0.1" + "@npmcli/map-workspaces@^3.0.2": version "3.0.4" resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799" @@ -2422,9 +2437,9 @@ yaml-ast-parser "0.0.43" "@redocly/openapi-core@^1.0.0-beta.104": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.4.0.tgz#d1ce8e391b32452082f754315c8eb265690b784f" - integrity sha512-M4f0H3XExPvJ0dwbEou7YKLzkpz2ZMS9JoNvrbEECO7WCwjGZ4AjbiUjp2p0ZzFMNIiNgTVUJJmkxGxsXW471Q== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.5.0.tgz#aacdb9030a041a53e38c9b5c51b1caa25ab7957b" + integrity sha512-AnDLoDl1+a7mZO4+lx0KG8zH04BQx4ez6yh403PuNl9/0ygbicPPc9QG/y0/0OImChOA+knKLpJazNFjzhOAeg== dependencies: "@redocly/ajv" "^8.11.0" "@types/node" "^14.11.8" @@ -2442,7 +2457,7 @@ resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8" integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== -"@sapphire/shapeshift@^3.9.2": +"@sapphire/shapeshift@^3.9.3": version "3.9.3" resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.9.3.tgz#89d26713044bc21cc5e0845e61a8a328ca3c1a84" integrity sha512-WzKJSwDYloSkHoBbE8rkRW8UNKJiSRJ/P8NqJ5iVq7U2Yr/kriIBx2hW+wj2Z5e5EnXL1hgYomgaFsdK6b+zqQ== @@ -2482,10 +2497,10 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@sindresorhus/is@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-3.1.2.tgz#548650de521b344e3781fbdb0ece4aa6f729afb8" - integrity sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ== +"@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@sindresorhus/is@^5.2.0": version "5.6.0" @@ -2675,81 +2690,81 @@ "@types/estree" "*" "@types/body-parser@*": - version "1.19.4" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.4.tgz#78ad68f1f79eb851aa3634db0c7f57f6f601b462" - integrity sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA== + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" "@types/node" "*" "@types/bonjour@^3.5.9": - version "3.5.12" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.12.tgz#49badafb988e6c433ca675a5fd769b93b7649fc8" - integrity sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg== + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" "@types/concat-stream@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-2.0.0.tgz#a716f0ba9015014e643addb351da05a73bef425c" - integrity sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-2.0.3.tgz#1f5c2ad26525716c181191f7ed53408f78eb758e" + integrity sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ== dependencies: "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz#acf51e088b3bb6507f7b093bd2b0de20940179cc" - integrity sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q== + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" "@types/connect@*": - version "3.4.37" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.37.tgz#c66a96689fd3127c8772eb3e9e5c6028ec1a9af5" - integrity sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/debug@^4.0.0": - version "4.1.10" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.10.tgz#f23148a6eb771a34c466a4fc28379d8101e84494" - integrity sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA== + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" "@types/eslint-scope@^3.7.3": - version "3.7.6" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.6.tgz#585578b368ed170e67de8aae7b93f54a1b2fdc26" - integrity sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ== + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - version "8.44.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.6.tgz#60e564551966dd255f4c01c459f0b4fb87068603" - integrity sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw== + version "8.44.7" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.7.tgz#430b3cc96db70c81f405e6a08aebdb13869198f5" + integrity sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree-jsx@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.2.tgz#758bcb4f35f2a970362b2bd2b7021fe2ae6e8509" - integrity sha512-GNBWlGBMjiiiL5TSkvPtOteuXsiVitw5MYGY1UYlrAq0SKyczsls6sCD7TZ8fsjRsvCVxml7EbyjJezPb3DrSA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.3.tgz#f8aa833ec986d82b8271a294a92ed1565bf2c66a" + integrity sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w== dependencies: "@types/estree" "*" "@types/estree@*", "@types/estree@^1.0.0": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.4.tgz#d9748f5742171b26218516cf1828b8eafaf8a9fa" - integrity sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.39" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz#2107afc0a4b035e6cb00accac3bdf2d76ae408c8" - integrity sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ== + version "4.17.41" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" + integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2757,9 +2772,9 @@ "@types/send" "*" "@types/express@*", "@types/express@^4.17.13": - version "4.17.20" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.20.tgz#e7c9b40276d29e38a4e3564d7a3d65911e2aa433" - integrity sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -2772,16 +2787,16 @@ integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg== "@types/hast@^2.0.0": - version "2.3.7" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.7.tgz#5e9bd7ab4452d5313aeec9d38fbc193a70f8d810" - integrity sha512-EVLigw5zInURhzfXUM65eixfadfsHKomGKUakToXo84t8gGIJuTcD2xooM2See7GyQ7DRtYjhCHnSUQez8JaLw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.8.tgz#4ac5caf38b262b7bd5ca3202dda71f0271635660" + integrity sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ== dependencies: "@types/unist" "^2" "@types/hast@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.2.tgz#e6c1126a33955cb9493a5074ddf1873fb48248c7" - integrity sha512-B5hZHgHsXvfCoO3xgNJvBnX7N8p86TqQeGKXcokW4XXi+qY4vxxPSFYofytvVmpFxzPv7oxDQzjg5Un5m2/xiw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.3.tgz#7f75e6b43bc3f90316046a287d9ad3888309f7e1" + integrity sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ== dependencies: "@types/unist" "*" @@ -2796,50 +2811,50 @@ integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-cache-semantics@^4.0.2": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#a3ff232bf7d5c55f38e4e45693eda2ebb545794d" - integrity sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/http-errors@*": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.3.tgz#c54e61f79b3947d040f150abd58f71efb422ff62" - integrity sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/http-proxy@^1.17.8": - version "1.17.13" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.13.tgz#dd3a4da550580eb0557d4c7128a2ff1d1a38d465" - integrity sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw== + version "1.17.14" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" + integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== dependencies: "@types/node" "*" "@types/is-empty@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/is-empty/-/is-empty-1.2.1.tgz#18d7256a73e43ec51f8b75c25fbdc31350be52a6" - integrity sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw== + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/is-empty/-/is-empty-1.2.3.tgz#a2d55ea8a5ec57bf61e411ba2a9e5132fe4f0899" + integrity sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#fdfdd69fa16d530047d9963635bd77c71a08c068" - integrity sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz#394798d5f727402eb5ec99eb9618ffcd2b7645a1" - integrity sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz#0313e2608e6d6955d195f55361ddeebd4b74c6e7" - integrity sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.14" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" - integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -2852,57 +2867,50 @@ integrity sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg== "@types/mdast@^3.0.0": - version "3.0.14" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.14.tgz#0735473a5b35be032b9f2685b7413cbab1b8a639" - integrity sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw== + version "3.0.15" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" + integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== dependencies: "@types/unist" "^2" -"@types/mdast@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.0.tgz#9f9462d4584a8b3e3711ea8bb4a94c485559ab90" - integrity sha512-YLeG8CujC9adtj/kuDzq1N4tCDYKoZ5l/bnjq8d74+t/3q/tHquJOJKUQXJrLCflOHpKjXgcI/a929gpmLOEng== - dependencies: - "@types/unist" "*" - -"@types/mdast@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.2.tgz#4695661024ffbd9e52cf71e05c69a1f08c0792f6" - integrity sha512-tYR83EignvhYO9iU3kDg8V28M0jqyh9zzp5GV+EO+AYnyUl3P5ltkTeJuTiFZQFz670FSb3EwT/6LQdX+UdKfw== +"@types/mdast@^4.0.0", "@types/mdast@^4.0.2": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.3.tgz#1e011ff013566e919a4232d1701ad30d70cab333" + integrity sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg== dependencies: "@types/unist" "*" "@types/mdx@^2.0.0": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.9.tgz#80971e367bb884350ab5b2ce8fc06b34960170e7" - integrity sha512-OKMdj17y8Cs+k1r0XFyp59ChSOwf8ODGtMQ4mnpfz5eFDk1aO41yN3pSKGuvVzmWAkFp37seubY1tzOVpwfWwg== + version "2.0.10" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.10.tgz#0d7b57fb1d83e27656156e4ee0dfba96532930e4" + integrity sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg== "@types/mime@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.3.tgz#886674659ce55fe7c6c06ec5ca7c0eb276a08f91" - integrity sha512-i8MBln35l856k5iOhKk2XJ4SeAWg75mLIpZB4v6imOagKL6twsukBZGDMNhdOVk7yRFTMPpfILocMos59Q1otQ== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== "@types/mime@^1": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.4.tgz#a4ed836e069491414bab92c31fdea9e557aca0d9" - integrity sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/ms@*": - version "0.7.33" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.33.tgz#80bf1da64b15f21fd8c1dc387c31929317d99ee9" - integrity sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ== + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node-forge@^1.3.0": - version "1.3.8" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.8.tgz#044ad98354ff309a031a55a40ad122f3be1ac2bb" - integrity sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg== + version "1.3.10" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.10.tgz#62a19d4f75a8b03290578c2b04f294b1a5a71b07" + integrity sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw== dependencies: "@types/node" "*" -"@types/node@*": - version "20.8.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e" - integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w== +"@types/node@*", "@types/node@^20.0.0": + version "20.10.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.0.tgz#16ddf9c0a72b832ec4fcce35b8249cf149214617" + integrity sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ== dependencies: undici-types "~5.26.4" @@ -2917,19 +2925,16 @@ integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/node@^18.0.0": - version "18.17.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.19.tgz#80c9b8a89d3648d9e6098f4a7184e03833fee3c5" - integrity sha512-+pMhShR3Or5GR0/sp4Da7FnhVmTalWm81M6MkEldbwjETSaPalw138Z4KdpQaistvqQxLB7Cy4xwYdxpbSOs9Q== - -"@types/node@^20.0.0": - version "20.6.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.5.tgz#4c6a79adf59a8e8193ac87a0e522605b16587258" - integrity sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w== + version "18.18.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.13.tgz#ae0f76c0bfe79d8fad0f910b78ae3e59b333c6e8" + integrity sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g== + dependencies: + undici-types "~5.26.4" "@types/parse-json@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.1.tgz#27f7559836ad796cea31acb63163b203756a5b4e" - integrity sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/parse5@^5.0.0": version "5.0.3" @@ -2937,29 +2942,29 @@ integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== "@types/prismjs@^1.26.0": - version "1.26.2" - resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.2.tgz#f574066903a7f0d516353581185db74326100edc" - integrity sha512-/r7Cp7iUIk7gts26mHXD66geUC+2Fo26TZYjQK6Nr4LDfi6lmdRmMqM0oPwfiMhUwoBAOFe8GstKi2pf6hZvwA== + version "1.26.3" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.3.tgz#47fe8e784c2dee24fe636cab82e090d3da9b7dec" + integrity sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw== "@types/prop-types@*": - version "15.7.9" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.9.tgz#b6f785caa7ea1fe4414d9df42ee0ab67f23d8a6d" - integrity sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g== + version "15.7.11" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== "@types/qs@*": - version "6.9.9" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.9.tgz#66f7b26288f6799d279edf13da7ccd40d2fa9197" - integrity sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg== + version "6.9.10" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" + integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== "@types/range-parser@*": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.6.tgz#7cb33992049fd7340d5b10c0098e104184dfcd2a" - integrity sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-router-config@*", "@types/react-router-config@^5.0.6", "@types/react-router-config@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.9.tgz#8dad16c6b887d08efaa6d9da83e40db629ac21b6" - integrity sha512-a7zOj9yVUtM3Ns5stoseQAAsmppNxZpXDv6tZiFV5qlRmV4W96u53on1vApBX1eRSc8mrFOiB54Hc0Pk1J8GFg== + version "5.0.10" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.10.tgz#1f7537b8d23ad6bb8e7609268fdd89b8b2de1eaf" + integrity sha512-Wn6c/tXdEgi9adCMtDwx8Q2vGty6TsPTc/wCQQ9kAlye8UqFxj0vGFWWuhywNfkwqth+SOgJxQTLTZukrqDQmQ== dependencies: "@types/history" "^4.7.11" "@types/react" "*" @@ -2983,9 +2988,9 @@ "@types/react" "*" "@types/react@*": - version "18.2.33" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.33.tgz#055356243dc4350a9ee6c6a2c07c5cae12e38877" - integrity sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg== + version "18.2.39" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.39.tgz#744bee99e053ad61fe74eb8b897f3ab5b19a7e25" + integrity sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2997,89 +3002,89 @@ integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/sax@^1.2.1": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.6.tgz#6e563455034014db5ab9e24a929404cf9b43adc3" - integrity sha512-A1mpYCYu1aHFayy8XKN57ebXeAbh9oQIZ1wXcno6b1ESUAfMBDMx7mf/QGlYwcMRaFryh9YBuH03i/3FlPGDkQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.7.tgz#ba5fe7df9aa9c89b6dff7688a19023dd2963091d" + integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== dependencies: "@types/node" "*" "@types/scheduler@*": - version "0.16.5" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.5.tgz#4751153abbf8d6199babb345a52e1eb4167d64af" - integrity sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw== + version "0.16.8" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== "@types/semver@^7.3.12": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" - integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== "@types/send@*": - version "0.17.3" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.3.tgz#81b2ea5a3a18aad357405af2d643ccbe5a09020b" - integrity sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug== + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-index@^1.9.1": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.3.tgz#af9403916eb6fbf7d6ec6f47b2a4c46eb3222cc9" - integrity sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg== + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.4" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.4.tgz#44b5895a68ca637f06c229119e1c774ca88f81b2" - integrity sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw== + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== dependencies: "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" "@types/sockjs@^0.3.33": - version "0.3.35" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.35.tgz#f4a568c73d2a8071944bd6ffdca0d4e66810cd21" - integrity sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw== + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" "@types/supports-color@^8.0.0": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/supports-color/-/supports-color-8.1.1.tgz#1b44b1b096479273adf7f93c75fc4ecc40a61ee4" - integrity sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw== + version "8.1.3" + resolved "https://registry.yarnpkg.com/@types/supports-color/-/supports-color-8.1.3.tgz#b769cdce1d1bb1a3fa794e35b62c62acdf93c139" + integrity sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg== "@types/text-table@^0.2.0": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@types/text-table/-/text-table-0.2.3.tgz#c9b0c8df377e10d16795381c2117b718562cae8b" - integrity sha512-MUW7DN7e178wJ2dB9rHuhwUWRUJGrl8fCng37BEWV0r2r5VpzkRFRiMfnX6sjXlu4tMn41lrjzsVh/z1XrKc+A== + version "0.2.5" + resolved "https://registry.yarnpkg.com/@types/text-table/-/text-table-0.2.5.tgz#f9c609b81c943e9fc8d73ef82ad2f2a78be5f53b" + integrity sha512-hcZhlNvMkQG/k1vcZ6yHOl6WAYftQ2MLfTHcYRZ2xYZFD8tGVnE3qFV0lj1smQeDSR7/yY0PyuUalauf33bJeA== "@types/unist@*", "@types/unist@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.1.tgz#778652d02ddec1bfc9e5e938fec8d407b8e56cba" - integrity sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" + integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== "@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.9.tgz#72e164381659a49557b0a078b28308f2c6a3e1ce" - integrity sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ== + version "2.0.10" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" + integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== "@types/ws@^8.5.4", "@types/ws@^8.5.5": - version "8.5.8" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.8.tgz#13efec7bd439d0bdf2af93030804a94f163b1430" - integrity sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg== + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== dependencies: "@types/node" "*" "@types/yargs-parser@*": - version "21.0.2" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.2.tgz#7bd04c5da378496ef1695a1008bf8f71847a8b8b" - integrity sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.29" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.29.tgz#06aabc72497b798c643c812a8b561537fea760cf" - integrity sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA== + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" @@ -3331,12 +3336,7 @@ acorn-walk@^8.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== -acorn@^8.0.0, acorn@^8.0.4, acorn@^8.7.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.0.0, acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== @@ -3643,13 +3643,14 @@ axios@^0.26.0: dependencies: follow-redirects "^1.14.8" -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== +axios@^1.6.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: - follow-redirects "^1.14.9" + follow-redirects "^1.15.0" form-data "^4.0.0" + proxy-from-env "^1.1.0" babel-loader@^8.2.5: version "8.3.0" @@ -4034,9 +4035,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001559" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz#95a982440d3d314c471db68d02664fb7536c5a30" - integrity sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA== + version "1.0.30001565" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz#a528b253c8a2d95d2b415e11d8b9942acc100c4f" + integrity sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w== caw@^2.0.0: version "2.0.1" @@ -4170,15 +4171,15 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.2.0: +ci-info@^3.2.0, ci-info@^3.8.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -ci-info@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== +ci-info@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" + integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== classnames@^2.3.1: version "2.3.2" @@ -4260,6 +4261,11 @@ clsx@^1.1.0, clsx@^1.2.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +clsx@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" + integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -4407,9 +4413,9 @@ concat-stream@^2.0.0: typedarray "^0.0.6" concurrently@^8.2.1: - version "8.2.1" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.1.tgz#bcab9cacc38c23c503839583151e0fa96fd5b584" - integrity sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ== + version "8.2.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" + integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== dependencies: chalk "^4.1.2" date-fns "^2.30.0" @@ -4530,21 +4536,21 @@ copyfiles@^2.4.1: yargs "^16.1.0" core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" - integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== + version "3.33.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" + integrity sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow== dependencies: browserslist "^4.22.1" core-js-pure@^3.30.2: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.33.2.tgz#644830db2507ef84d068a70980ccd99c275f5fa6" - integrity sha512-a8zeCdyVk7uF2elKIGz67AjcXOxjRbwOLz8SbklEso1V+2DoW4OkAMZN9S9GBgvZIaqQi/OemFX4OiSoQEmg1Q== + version "3.33.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.33.3.tgz#cbf9180ac4c4653823d784862bfb5c77eac0bf98" + integrity sha512-taJ00IDOP+XYQEA2dAe4ESkmHt1fL8wzYDo3mRWQey8uO9UojlBFMneA65kMyxfYP7106c6LzWaq7/haDT6BCQ== core-js@^3.23.3, core-js@^3.31.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.2.tgz#312bbf6996a3a517c04c99b9909cdd27138d1ceb" - integrity sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ== + version "3.33.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.3.tgz#3c644a323f0f533a0d360e9191e37f7fc059088d" + integrity sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw== core-util-is@~1.0.0: version "1.0.3" @@ -4790,6 +4796,11 @@ date-fns@^2.30.0: dependencies: "@babel/runtime" "^7.21.0" +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -5031,15 +5042,15 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -discord-api-types@0.37.50: - version "0.37.50" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.50.tgz#6059eb8c0b784ad8194655a8b8b7f540fcfac428" - integrity sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg== +discord-api-types@0.37.61: + version "0.37.61" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.61.tgz#9dd8e58c624237e6f1b23be2d29579af268b8c5b" + integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== discord-api-types@^0.37.35, discord-api-types@^0.37.41: - version "0.37.62" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.62.tgz#ace78d2cd09c63ad8c7066edd99fddb515a93f90" - integrity sha512-KpLQ6TiylGSSHj8AQW8Hz1ek1MkBbQUWs4gZhWH0rvSsWSj9tfav6EIitSxbFmqveqfu8oiPFI7vgFE4kBhTcQ== + version "0.37.65" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.65.tgz#68dcf9eaece271fb550370c2ba7fe71e927c56b2" + integrity sha512-CQHW3Nu04LEHIj1Xps/sfGhTdrowilxnek2tirpLhwvrmgmLr1C6A+4JFLs+0kJMH2IX2QgDyA9GfNehqN+xPQ== discord.js@14.8.0: version "14.8.0" @@ -5264,14 +5275,14 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.535: - version "1.4.572" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz#ed9876658998138fe9e3aa47ecfa0bf914192a86" - integrity sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA== + version "1.4.596" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.596.tgz#6752d1aa795d942d49dfc5d3764d6ea283fab1d7" + integrity sha512-zW3zbZ40Icb2BCWjm47nxwcFGYlIgdXkAx85XDO7cyky9J4QQfq8t0W19/TLZqq3JPQXtlv8BPIGmfa9Jb4scg== emoji-regex@^10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f" - integrity sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA== + version "10.3.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== emoji-regex@^8.0.0: version "8.0.0" @@ -5386,9 +5397,9 @@ es-abstract@^1.22.1: which-typed-array "^1.1.13" es-module-lexer@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz#c1b0dd5ada807a3b3155315911f364dc4e909db1" - integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== + version "1.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" + integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== es-set-tostringtag@^2.0.1: version "2.0.2" @@ -5613,14 +5624,14 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.0.1: - version "8.52.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" - integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== + version "8.54.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" + integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.52.0" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.54.0" "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -5883,21 +5894,10 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== +fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -6008,9 +6008,9 @@ file-type@5.2.0, file-type@^5.2.0: integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== file-type@^18.3.0: - version "18.5.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-18.5.0.tgz#604a001ba0d32577d4c3fa420ee104d656b914d2" - integrity sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ== + version "18.7.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-18.7.0.tgz#cddb16f184d6b94106cfc4bb56978726b25cb2a2" + integrity sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw== dependencies: readable-web-to-node-stream "^3.0.2" strtok3 "^7.0.0" @@ -6114,9 +6114,9 @@ find-up@^6.3.0: path-exists "^5.0.0" flat-cache@^3.0.4: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" - integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" keyv "^4.5.3" @@ -6140,7 +6140,7 @@ flux@~4.0.1: fbemitter "^3.0.0" fbjs "^3.0.1" -follow-redirects@^1.0.0, follow-redirects@^1.14.7, follow-redirects@^1.14.8, follow-redirects@^1.14.9: +follow-redirects@^1.0.0, follow-redirects@^1.14.7, follow-redirects@^1.14.8, follow-redirects@^1.15.0: version "1.15.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== @@ -6233,9 +6233,9 @@ fs-extra@^10.1.0: universalify "^2.0.0" fs-extra@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -6400,12 +6400,12 @@ glob@7.1.6: path-is-absolute "^1.0.0" glob@^10.0.0, glob@^10.2.2: - version "10.3.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.7.tgz#d5bd30a529c8c9b262fb4b217941f64ad90e25ac" - integrity sha512-wCMbE1m9Nx5yD9LYtgsVWq5VhHlk5WzJirw594qZR6AIvQYuHrdDtIktUVjQItalD53y7dqoedu9xP0u0WaxIQ== + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: foreground-child "^3.1.0" - jackspeak "^2.0.3" + jackspeak "^2.3.5" minimatch "^9.0.1" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" @@ -6900,6 +6900,11 @@ html-entities@^2.3.2: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== +html-escaper@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" @@ -7034,9 +7039,9 @@ http2-client@^1.2.5: integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== http2-wrapper@^2.1.10: - version "2.2.0" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" - integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== dependencies: quick-lru "^5.1.1" resolve-alpn "^1.2.0" @@ -7064,9 +7069,9 @@ ieee754@^1.1.13, ieee754@^1.2.1: integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.0.0, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== image-size@^1.0.1, image-size@^1.0.2: version "1.0.2" @@ -7104,9 +7109,14 @@ import-meta-resolve@^2.0.0: integrity sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA== import-meta-resolve@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz#94a6aabc623874fbc2f3525ec1300db71c6cbc11" - integrity sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg== + version "3.1.1" + resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-3.1.1.tgz#75d194ae465d17c15736f414734310c87d4c45d7" + integrity sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw== + +import-meta-resolve@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz#0b1195915689f60ab00f830af0f15cc841e8919e" + integrity sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA== imurmurhash@^0.1.4: version "0.1.4" @@ -7607,10 +7617,10 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jackspeak@^2.0.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.3.tgz#95e4cbcc03b3eb357bf6bcce14a903fb3d1151e1" - integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg== +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -7652,7 +7662,7 @@ jiti@^1.18.2, jiti@^1.19.1, jiti@^1.20.0: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== -joi@^17.4.0, joi@^17.6.0, joi@^17.7.0, joi@^17.9.2: +joi@^17.11.0, joi@^17.4.0, joi@^17.6.0, joi@^17.9.2: version "17.11.0" resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== @@ -7714,9 +7724,9 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-parse-even-better-errors@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" - integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" + integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== json-pointer@0.6.2, json-pointer@^0.6.2: version "0.6.2" @@ -7847,20 +7857,25 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.1.0: +lilconfig@^2.0.3, lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +lilconfig@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" + integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lines-and-columns@^2.0.2, lines-and-columns@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" - integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== load-plugin@^5.0.0: version "5.1.0" @@ -7870,6 +7885,14 @@ load-plugin@^5.0.0: "@npmcli/config" "^6.0.0" import-meta-resolve "^2.0.0" +load-plugin@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-6.0.1.tgz#ca30b33b40ec0e11c2f6b07d34cbcc78a70300dd" + integrity sha512-YZyxJaWfN4F1xfPCyKFNIOL26vlFukmJY7wegxsriav4y2/0ZiICota6uFvyy52GjUj+tsPSjGLX+2m7kiU0+g== + dependencies: + "@npmcli/config" "^8.0.0" + import-meta-resolve "^4.0.0" + loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" @@ -7933,26 +7956,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== -lodash.invokemap@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz#1748cda5d8b0ef8369c4eb3ec54c21feba1f2d62" - integrity sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w== - lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -7973,11 +7981,6 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.pullall@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.pullall/-/lodash.pullall-4.2.0.tgz#9d98b8518b7c965b0fae4099bd9fb7df8bbf38ba" - integrity sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg== - lodash.snakecase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" @@ -7988,11 +7991,6 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== - lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -8065,9 +8063,9 @@ lru-cache@^7.5.1: integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== lunr@^2.3.9: version "2.3.9" @@ -8922,15 +8920,15 @@ minimatch@^9.0.0, minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.0.0, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7: +minimist@^1.0.0, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" - integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== mkdirp@^1.0.4: version "1.0.4" @@ -8950,9 +8948,9 @@ mobx-react@^7.2.0: mobx-react-lite "^3.4.0" mobx@^6.8.0: - version "6.10.2" - resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.10.2.tgz#96e123deef140750360ca9a5b02a8b91fbffd4d9" - integrity sha512-B1UGC3ieK3boCjnMEcZSwxqRDMdzX65H/8zOHbuTY8ZhvrIjTUoLRR2TP2bPqIgYRfb3+dUigu8yMZufNjn0LQ== + version "6.12.0" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.12.0.tgz#72b2685ca5af031aaa49e77a4d76ed67fcbf9135" + integrity sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ== mrmime@^1.0.0: version "1.0.1" @@ -8991,15 +8989,10 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== - nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== natural-compare-lite@^1.4.0: version "1.4.0" @@ -9042,11 +9035,11 @@ node-emoji@^1.10.0: lodash "^4.17.21" node-emoji@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.1.0.tgz#93c99b0d3dfe7d5e37c056aded389e013c72d0c5" - integrity sha512-tcsBm9C6FmPN5Wo7OjFi9lgMyJjvkAeirmjR/ax8Ttfqy4N8PoFic26uqFTIgayHPNI5FH4ltUvfh9kHzwcK9A== + version "2.1.3" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.1.3.tgz#93cfabb5cc7c3653aa52f29d6ffb7927d8047c06" + integrity sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA== dependencies: - "@sindresorhus/is" "^3.1.2" + "@sindresorhus/is" "^4.6.0" char-regex "^1.0.2" emojilib "^2.4.0" skin-tone "^2.0.0" @@ -9556,9 +9549,9 @@ parse-json@^6.0.0: lines-and-columns "^2.0.2" parse-json@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.0.tgz#4cffd0ee00ffa597b995fd70a9811993c4f95023" - integrity sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg== + version "7.1.1" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.1.tgz#68f7e6f0edf88c54ab14c00eb700b753b14e2120" + integrity sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw== dependencies: "@babel/code-frame" "^7.21.4" error-ex "^1.3.2" @@ -9843,12 +9836,12 @@ postcss-js@^4.0.1: camelcase-css "^2.0.1" postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" + lilconfig "^3.0.0" + yaml "^2.3.4" postcss-loader@^7.0.0, postcss-loader@^7.3.3: version "7.3.3" @@ -10054,9 +10047,9 @@ postcss-selector-parser@6.0.10: util-deprecate "^1.0.2" postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -10093,16 +10086,7 @@ postcss-zindex@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== -postcss@^8.4.14, postcss@^8.4.17: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.26, postcss@^8.4.31: +postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.26, postcss@^8.4.31: version "8.4.31" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -10157,12 +10141,12 @@ prism-react-renderer@^1.3.5: integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== prism-react-renderer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.1.0.tgz#a2f418451647412ea73d18cfe363fea20e419f9d" - integrity sha512-I5cvXHjA1PVGbGm1MsWCpvBCRrYyxEri0MC7/JbfIfYfcXAxHyO5PaUjs3A8H5GW6kJcLhTHxxMaOZZpRZD2iQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.3.0.tgz#5f8f615af6af8201a0b734bd8c946df3d818ea54" + integrity sha512-UYRg2TkVIaI6tRVHC5OJ4/BxqPUxJkJvq/odLT/ykpt1zGYXooNperUxQcCvi87LyRnR4nCh81ceOA+e7nrydg== dependencies: "@types/prismjs" "^1.26.0" - clsx "^1.2.1" + clsx "^2.0.0" prismjs@^1.27.0, prismjs@^1.29.0: version "1.29.0" @@ -10211,9 +10195,9 @@ property-information@^5.0.0, property-information@^5.3.0: xtend "^4.0.0" property-information@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.3.0.tgz#ba4a06ec6b4e1e90577df9931286953cdf4282c3" - integrity sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg== + version "6.4.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.4.0.tgz#6bc4c618b0c2d68b3bb8b552cbb97f8e300a0f82" + integrity sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ== propose@0.0.5: version "0.0.5" @@ -10235,6 +10219,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +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" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -10391,12 +10380,21 @@ react-error-overlay@^6.0.11: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== -react-fast-compare@^3.2.0: +react-fast-compare@^3.2.0, react-fast-compare@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== -react-helmet-async@*, react-helmet-async@^1.3.0: +react-helmet-async@*: + version "2.0.1" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.1.tgz#c97e53d03bfe578011e4abbd61113321b0362471" + integrity sha512-SFvEqfhFpLr5xqU6fWFb8wjVPjOR4A5skkNVNN5gAr/QeHutfDe4m1Cdo521umTiFRAY8hDOcl4xJO8sXN1n2Q== + dependencies: + invariant "^2.2.4" + react-fast-compare "^3.2.2" + shallowequal "^1.1.0" + +react-helmet-async@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== @@ -11025,7 +11023,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.4, rxjs@^7.8.0, rxjs@^7.8.1: +rxjs@^7.5.4, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== @@ -11564,9 +11562,9 @@ statuses@2.0.1: integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== std-env@^3.0.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.4.3.tgz#326f11db518db751c83fd58574f449b7c3060910" - integrity sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q== + version "3.5.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.5.0.tgz#83010c9e29bd99bf6f605df87c19012d82d63b97" + integrity sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA== stickyfill@^1.1.1: version "1.1.1" @@ -12136,7 +12134,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0, tslib@^2.6.1: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -12242,9 +12240,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@*: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + version "5.3.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" + integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== typesense-docsearch-css@^0.4.1: version "0.4.1" @@ -12306,9 +12304,9 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici@^5.20.0, undici@^5.22.0: - version "5.27.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.0.tgz#789f2e40ce982b5507899abc2c2ddeb2712b4554" - integrity sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg== + version "5.28.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.1.tgz#1052d37bd1a2e8cf3e188d7caebff833fdc06fa7" + integrity sha512-xcIIvj1LOQH9zAL54iWFkuDEaIVEjLrru7qRpa3GrEEHk6OBhb/LycuUY2m7VCcTuDeLziXCxobQVyKExyGeIA== dependencies: "@fastify/busboy" "^2.0.0" @@ -12349,9 +12347,9 @@ unicode-property-aliases-ecmascript@^2.0.0: integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unified-args@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-11.0.0.tgz#891c1e2bfa29e0c0b65e7a844a69c2965a6b83b6" - integrity sha512-4q3OQ2EbNIaxVX1pMoB/QdFxw9BSOWBGUwn5LK3UJict+6i0ud18A1DZ177+2r5hC2nYFOw1jbCp27ydl44Zhg== + version "11.0.1" + resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-11.0.1.tgz#5c82564616288b8d99feed7326c2223097d30726" + integrity sha512-WEQghE91+0s3xPVs0YW6a5zUduNLjmANswX7YbBfksHNDGMjHxaWCql4SR7c9q0yov/XiIEdk6r/LqfPjaYGcw== dependencies: "@types/text-table" "^0.2.0" chalk "^5.0.0" @@ -12392,9 +12390,9 @@ unified-engine@^10.0.1: yaml "^2.0.0" unified-engine@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-11.1.0.tgz#0239c505d0b6559bb31ef0aec0b28bd8ebe1e0a1" - integrity sha512-RS3K5PgNjDRQN9eNIefLUDxpfyWIItmKcjBhD1VnYYT/h7xpheZoZBtb5gtwFyKWZlhKCGRVQknIm1M8qHZfIg== + version "11.1.1" + resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-11.1.1.tgz#6d59bca82f0002fa5cd70e44a93f4fec51ecd2df" + integrity sha512-uVx/R+Q8V5wv5EPdPzBPPscSKpbqWeqqIc0lMfDcn3aS+QDENTpDY+wdPQ5oswuQSpPn/miuP0FspIwo19++IA== dependencies: "@types/concat-stream" "^2.0.0" "@types/debug" "^4.0.0" @@ -12408,7 +12406,7 @@ unified-engine@^11.0.0: ignore "^5.0.0" is-empty "^1.0.0" is-plain-obj "^4.0.0" - load-plugin "^5.0.0" + load-plugin "^6.0.0" parse-json "^7.0.0" trough "^2.0.0" unist-util-inspect "^8.0.0" @@ -12646,9 +12644,9 @@ unist-util-visit@^5.0.0: unist-util-visit-parents "^6.0.0" universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" @@ -12953,15 +12951,15 @@ wait-on@^6.0.1: rxjs "^7.5.4" wait-on@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9" - integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog== + version "7.2.0" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.2.0.tgz#d76b20ed3fc1e2bebc051fae5c1ff93be7892928" + integrity sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ== dependencies: - axios "^0.27.2" - joi "^17.7.0" + axios "^1.6.1" + joi "^17.11.0" lodash "^4.17.21" - minimist "^1.2.7" - rxjs "^7.8.0" + minimist "^1.2.8" + rxjs "^7.8.1" walk-up-path@^3.0.1: version "3.0.1" @@ -12999,23 +12997,19 @@ webidl-conversions@^3.0.0: integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-bundle-analyzer@^4.5.0, webpack-bundle-analyzer@^4.9.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz#d00bbf3f17500c10985084f22f1a2bf45cb2f09d" - integrity sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w== + version "4.10.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz#84b7473b630a7b8c21c741f81d8fe4593208b454" + integrity sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ== dependencies: "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" commander "^7.2.0" + debounce "^1.2.1" escape-string-regexp "^4.0.0" gzip-size "^6.0.0" + html-escaper "^2.0.2" is-plain-object "^5.0.0" - lodash.debounce "^4.0.8" - lodash.escape "^4.0.1" - lodash.flatten "^4.4.0" - lodash.invokemap "^4.6.0" - lodash.pullall "^4.2.0" - lodash.uniqby "^4.7.0" opener "^1.5.2" picocolors "^1.0.0" sirv "^2.0.3" @@ -13302,15 +13296,10 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== - -yaml@^2.1.1: - version "2.3.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9" - integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ== +yaml@^2.0.0, yaml@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== yargs-parser@^20.2.2: version "20.2.9"