diff --git a/.cspell.json b/.cspell.json index 016b8ac..90fea11 100644 --- a/.cspell.json +++ b/.cspell.json @@ -41,7 +41,14 @@ "Thorén", "wakunode", "autoplay", - "classwide" + "classwide", + "devel", + "statusteam", + "myaddr", + "extip", + "staticnode", + "permissioned", + "Secp" ], "flagWords": [], "ignorePaths": [ @@ -49,7 +56,8 @@ "package-lock.json", "yarn.lock", "tsconfig.json", - "node_modules/**" + "node_modules/**", + "docs/guides/reference/node-config-options.md" ], "patterns": [ { diff --git a/diagrams/_predefined-nodes.md b/diagrams/_predefined-nodes.md deleted file mode 100644 index 7d1a0ec..0000000 --- a/diagrams/_predefined-nodes.md +++ /dev/null @@ -1,7 +0,0 @@ -```mermaid -sequenceDiagram -Alice->>Bob: Connect to Bob (predefined node details) -Alice->>Carol: Connect to Carol (predefined node details) -``` - -Alice establishes connections with Bob and Carol using their node details, which are predefined (hard-coded) into Alice's node. \ No newline at end of file diff --git a/diagrams/_static-peers.md b/diagrams/_static-peers.md new file mode 100644 index 0000000..9120956 --- /dev/null +++ b/diagrams/_static-peers.md @@ -0,0 +1,7 @@ +```mermaid +sequenceDiagram +Alice->>Bob: Connect to Bob (static peer details) +Alice->>Carol: Connect to Carol (static peer details) +``` + +Alice establishes connections with Bob and Carol using their node details, which are predefined (hard-coded) into Alice's node. \ No newline at end of file diff --git a/docs/contribute.md b/docs/contribute.md index 507a7c7..4820e2b 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -4,8 +4,9 @@ title: Contribute to Waku Get involved in Waku's open-source initiatives to improve the protocols, SDKs, developer tools and examples, and documentation. You can contribute by: -- [Operating a node](/guides/nodes-and-sdks#run-a-waku-node) within your application. +- [Running a node](/guides/nodes-and-sdks#run-a-waku-node) within your application. - [Reporting bugs](#report-a-bug) and [suggesting missing features](#suggest-a-feature) to the development team. +- Completing [Waku Bounties](#complete-waku-bounties) and participating in our [Bug Bounty Program](#submit-security-bug-reports). - Inspiring other developers to explore and use Waku for [various use cases](/overview/use-cases). Begin your journey by visiting the [Nodes and SDKs](/guides/nodes-and-sdks) guide and start building on Waku today! @@ -22,9 +23,14 @@ To suggest a new feature, create an issue in the appropriate [GitHub repository] Community pull requests (PRs) are highly encouraged, but we recommend [suggesting a feature](#suggest-a-feature) first to gauge interest and gather feedback before proceeding with a PR. +## Complete Waku Bounties + +To promote community contributions, we encourage members to complete bounties that benefit Waku and earn rewards while positively impacting the network. Join the bounty program at: . + + ## Submit Security Bug Reports -To improve Waku's security, we invite researchers to collaborate in identifying and resolving potential vulnerabilities. To participate, please review our bug bounty program's details and submit your reports at: . +To improve Waku's security, we invite researchers to collaborate in identifying and resolving potential vulnerabilities and earn rewards for their efforts. To participate, please review our bug bounty program's details and submit your reports at: . ## Contribute to Waku Research diff --git a/docs/guides/nodes-and-sdks.md b/docs/guides/nodes-and-sdks.md index 2bdf708..4e28dfd 100644 --- a/docs/guides/nodes-and-sdks.md +++ b/docs/guides/nodes-and-sdks.md @@ -6,7 +6,7 @@ title: Nodes and SDKs Waku has risks and limitations as it is still developing and preparing for extensive adoption. However, it is already demonstrating its capabilities by [powering various applications](/powered-by-waku). [Join our community](/community) to stay updated on our progress. ::: -Ready to integrate Waku into your application for private, secure, censorship-free communication? Explore the available SDKs and contribute by operating a node. +Ready to integrate Waku into your application for private, secure, censorship-free communication? Explore the available SDKs and contribute by running a node. ## Run a Waku Node @@ -42,6 +42,7 @@ Waku provides integrations tailored for mobile applications, enabling Waku to ru | | Description | Documentation | | - | - | - | +| JSON-RPC API | `JSON-RPC` API interface provided by `nwaku` and `go-waku` to interact with the Waku Network | | | [@waku/react](https://www.npmjs.com/package/@waku/react) | React components and UI adapters designed for seamless integration with `js-waku` | | | [@waku/create-app](https://www.npmjs.com/package/@waku/create-app) | Starter kit to bootstrap your next `js-waku` project from various example templates | | -| JSON-RPC API | `JSON-RPC` API interface provided by `nwaku` and `go-waku` to interact with the Waku Network | | \ No newline at end of file +| [nwaku-compose](https://github.com/alrevuelta/nwaku-compose) | Pre-configured `docker-compose` setup for running and monitoring a `nwaku` node using Prometheus and Grafana. | [Run Nwaku with Docker Compose](/guides/nwaku/run-docker-compose) | \ No newline at end of file diff --git a/docs/guides/nwaku/build-source.md b/docs/guides/nwaku/build-source.md new file mode 100644 index 0000000..f3c96ef --- /dev/null +++ b/docs/guides/nwaku/build-source.md @@ -0,0 +1,105 @@ +--- +title: Build Nwaku from Source +--- + +This guide provides detailed steps to build a `nwaku` node from the source code to access the latest development version or a specific commit or release of `nwaku`. For your convenience, [download a pre-compiled binary](https://github.com/waku-org/nwaku/tags) instead. + +:::info +- A minimum of 2GB of RAM is required to build `nwaku`. +- Nwaku is available for Linux and macOS, with experimental Windows support. +::: + +## Install Dependencies + +To build `nwaku`, you need the standard developer tools, including a C compiler, Make, Bash, and Git. + +```mdx-code-block +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +``` + + + + +```bash +sudo apt-get install build-essential git +``` + + + + +```bash +sudo dnf install @development-tools +``` + + + + +```bash +# Using your favorite AUR helper +[AUR HELPER] -S base-devel +``` + + + + +```bash +brew install cmake +``` + + + + +## Clone the Repository + +Get the source code from the GitHub repository. The default branch is `master`, the release candidate for major updates. + +```bash +git clone https://github.com/waku-org/nwaku +cd nwaku +``` + +:::tip +You can use `git tag -l` to check specific version tags. +::: + +## Build the Binary + +Build the `nwaku` binary: + +```bash +make wakunode2 +``` + +The first `make` invocation updates to all Git submodules. After each `git pull`, run `make update` to keep the submodules updated in the future. + +```bash +make update +``` + +## Run the Binary + +Nwaku will create the `wakunode2` binary in the `./build/` directory. + +```bash +# Run with default configuration +./build/wakunode2 + +# See available command line options +./build/wakunode2 --help +``` + +To learn more about running nwaku, please refer to: + +- [Run a Nwaku Node](/guides/run-nwaku-node#run-the-node) +- [Run Nwaku in a Docker Container](/guides/nwaku/run-docker) +- [Run Nwaku with Docker Compose](/guides/nwaku/run-docker-compose) +- [Node Configuration Methods](/guides/reference/node-config-methods) + +## Run Test Suite + +Run the tests for both `Waku v1` and `Waku v2`: + +```bash +make test +``` \ No newline at end of file diff --git a/docs/guides/nwaku/configure-discovery.md b/docs/guides/nwaku/configure-discovery.md new file mode 100644 index 0000000..348ca6f --- /dev/null +++ b/docs/guides/nwaku/configure-discovery.md @@ -0,0 +1,78 @@ +--- +title: Configure Peer Discovery +--- + +This guide provides detailed steps to configure a `nwaku` node to discover and connect with peers in the Waku Network. + +:::tip +You can configure a `nwaku` node to use multiple peer discovery mechanisms simultaneously. +::: + +## Configure Static Peers + +You can provide static peers to a `nwaku` node during startup using the `staticnode` configuration option. To connect to multiple peers on startup, repeat the `staticnode` option: + +```bash +./build/wakunode2 \ + --staticnode:[Libp2p MULTIADDR PEER 1] \ + --staticnode:[Libp2p MULTIADDR PEER 2] +``` + +For instance, consider a `nwaku` node that connects to two static peers on the same local host (IP: `0.0.0.0`) using TCP ports `60002` and `60003`: + +```bash +./build/wakunode2 \ + --staticnode:/ip4/0.0.0.0/tcp/60002/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H \ + --staticnode:/ip4/0.0.0.0/tcp/60003/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ +``` + +## Configure DNS Discovery + +To enable [DNS Discovery](/overview/concepts/dns-discovery) in a `nwaku` node, use the following configuration options: + +- `dns-discovery`: Enables DNS Discovery on the node (disabled by default). +- `dns-discovery-url`: URL for DNS node list in the format `enrtree://@` where `` is the fully qualified domain name and `` is the base32 encoding of the compressed 32-byte public key that signed the list at that location. +- `dns-discovery-name-server` (optional): DNS name server IPs to query. You can repeat this option to provide multiple DNS name servers. + +```bash +./build/wakunode2 \ + --dns-discovery:true \ + --dns-discovery-url:[DNS NODE LIST] \ + --dns-discovery-name-server:[DNS NAME SERVER IP] +``` + +For instance, consider a `nwaku` node that enables `DNS Discovery`, connects to a DNS node list, and queries the IPs `1.1.1.1` and `1.0.0.1`: + +```bash +./build/wakunode2 \ + --dns-discovery:true \ + --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im \ + --dns-discovery-name-server:1.1.1.1 \ + --dns-discovery-name-server:1.0.0.1 +``` + +## Configure Discv5 + +To enable [Discv5](/overview/concepts/discv5) in a `nwaku` node, use the following configuration options: + +- `discv5-discovery`: Enables Discv5 on the node (disabled by default). +- `discv5-bootstrap-node`: ENR for Discv5 routing table bootstrap node. You can repeat this option to provide multiple bootstrap entries. + +```bash +./build/wakunode2 \ + --discv5-discovery:true \ + --discv5-bootstrap-node:[DISCV5 ENR BOOTSTRAP ENTRY 1] \ + --discv5-bootstrap-node:[DISCV5 ENR BOOTSTRAP ENTRY 2] +``` + +For instance, consider a `nwaku` node that enables `Discv5` and bootstraps it's routing table using a static `ENR`: + +```bash +./build/wakunode2 \ + --discv5-discovery:true \ + --discv5-bootstrap-node:enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw +``` + +:::info +When Discv5 is enabled and used with [DNS Discovery](#configure-dns-discovery), the `nwaku` node will attempt to bootstrap the Discv5 routing table by extracting `ENRs` from peers discovered through DNS. +::: \ No newline at end of file diff --git a/docs/guides/nwaku/run-docker-compose.md b/docs/guides/nwaku/run-docker-compose.md new file mode 100644 index 0000000..c79d548 --- /dev/null +++ b/docs/guides/nwaku/run-docker-compose.md @@ -0,0 +1,43 @@ +--- +title: Run Nwaku with Docker Compose +--- + +`nwaku-compose` is a ready-to-use `docker-compose` setup that runs a nwaku node and monitors it with already configured [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/) instances. + +This guide provides detailed steps to build, configure, run, and monitor a `nwaku` node with [nwaku-compose](https://github.com/alrevuelta/nwaku-compose). + +## Prerequisites + +- [Git](https://git-scm.com/) or [GitHub Desktop](https://desktop.github.com/) +- [Docker](https://docs.docker.com/engine/install/) +- [Docker Compose](https://docs.docker.com/compose/install/) + +## Clone the Repository + +```bash +git clone https://github.com/alrevuelta/nwaku-compose +cd nwaku-compose +``` + +## Configure the Setup + +Modify the `docker-compose.yml` file to customize your node's configuration, including the [Docker image](https://hub.docker.com/r/statusteam/nim-waku/tags) and [nwaku arguments](/guides/reference/node-config-options). + +## Run Docker Compose + +Export your public IP (`MY_EXT_IP`) and run `nwaku-compose`: + +```bash +export MY_EXT_IP=$(dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}') +docker-compose up -d +``` + +## Monitor the Node + +Visit to view your node metrics in real-time. + +![nwaku compose dashboard](/img/nwaku-compose-dashboard.png) + +:::tip +To access Grafana from outside your machine, remove `127.0.0.1` and open the port. Consider setting up a password for Grafana to ensure security. +::: \ No newline at end of file diff --git a/docs/guides/nwaku/run-docker.md b/docs/guides/nwaku/run-docker.md new file mode 100644 index 0000000..9aad6ed --- /dev/null +++ b/docs/guides/nwaku/run-docker.md @@ -0,0 +1,62 @@ +--- +title: Run Nwaku in a Docker Container +--- + +This guide provides detailed steps to build and run a `nwaku` node in a Docker container. If you prefer a pre-configured setup that includes a monitoring dashboard, see the [Run Nwaku with Docker Compose](/guides/nwaku/run-docker-compose) guide. + +## Prerequisites + +Ensure [Docker](https://www.docker.com/) is installed on your system using the appropriate instructions provided in the [Docker documentation](https://docs.docker.com/engine/install/). + +## Get Docker Image + +The Nwaku Docker images are available on the Docker Hub public registry under the [statusteam/nim-waku](https://hub.docker.com/r/statusteam/nim-waku) repository. Please visit [statusteam/nim-waku/tags](https://hub.docker.com/r/statusteam/nim-waku/tags) for images of specific releases. + +Pull the latest docker image: + +```bash +docker pull statusteam/nim-waku +``` + +You can also build the Docker image locally: + +```bash +# Clone the repository +git clone --recurse-submodules https://github.com/waku-org/nwaku +cd nwaku + +# Build docker image +make docker-image +``` + +## Run Docker Container + +Run `nwaku` in a new Docker container: + +```bash +docker run [OPTIONS] [IMAGE] [ARG...] +``` + +- `OPTIONS` are your selected [Docker options](https://docs.docker.com/engine/reference/commandline/run/#options) +- `IMAGE` is the image and tag you pulled from the registry or built locally +- `ARG...` is the list of arguments for your [node configuration options](/guides/reference/node-config-options) + +Run `nwaku` using the most typical configuration: + +```bash +docker run -i -t -p 60000:60000 -p 9000:9000/udp statusteam/nim-waku \ + --dns-discovery:true \ + --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im \ + --discv5-discovery \ + --nat:extip:[YOUR PUBLIC IP] # or, if you are behind a nat: --nat=any +``` + +:::tip +To find your public IP, use: + +```bash +dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}' +``` + +We recommend using explicit port mappings (`-p`) when exposing ports accessible from outside the host (listening and discovery ports, API servers). +::: \ No newline at end of file diff --git a/docs/guides/reference/node-config-methods.md b/docs/guides/reference/node-config-methods.md new file mode 100644 index 0000000..a20d83e --- /dev/null +++ b/docs/guides/reference/node-config-methods.md @@ -0,0 +1,100 @@ +--- +title: Node Configuration Methods +--- + +Waku nodes can be configured using a combination of the following methods: + +1. Command line options and flags +2. Environment variables +3. TOML configuration files (currently the only supported format) +4. Default values + +:::info +Note the precedence order: Each configuration method overrides the one below it (e.g., command line options override environment variables and configuration files). +::: + +## Command Line Options + +Node configuration is primarily done using command line options, which override other methods. Specify [configuration options](/guides/reference/node-config-options) by providing them in this format after the binary name: + +```bash +./build/wakunode2 --tcp-port=65000 +``` + +When running your node with Docker, provide the command line options after the image name in this format: + +```bash +docker run statusteam/nim-waku --tcp-port=65000 +``` + +## Environment Variables + +Nodes can be configured using environment variables by prefixing the variable name with `WAKUNODE2_` and using the configuration option in [SCREAMING_SNAKE_CASE](https://en.wiktionary.org/wiki/screaming_snake_case) format. + +To set the `tcp-port` configuration, the `wakunode2` binary should be called in this format: + +```bash +WAKUNODE2_TCP_PORT=65000 ./build/wakunode2 +``` + +When running your node with Docker, start the node using the `-e` command option: + +```bash +docker run -e "WAKUNODE2_TCP_PORT=65000" statusteam/nim-waku +``` + +:::info +This is the second configuration method in order of precedence. [Command Line Options](#command-line-options) override environment variables. +::: + +## Configuration Files + +Nodes can be configured using a configuration file following the [TOML](https://toml.io/en/) format: + +```toml title="TOML Config File" showLineNumbers +log-level = "DEBUG" +tcp-port = 65000 +topic = ["/waku/2/default-waku/proto"] +metrics-logging = false +``` + +The `config-file` [configuration option](/guides/reference/node-config-options) lets you specify the configuration file path: + +```bash +./build/wakunode2 --config-file=[TOML CONFIGURATION FILE] +``` + +You can also specify the configuration file via environment variables: + +```bash +# Using environment variables +WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE] ./build/wakunode2 + +# Using environment variables with Docker +docker run -e "WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE]" statusteam/nim-waku +``` + +:::info +This is the third configuration method in order of precedence. [Command Line Options](#command-line-options) and [Environment Variables](#environment-variables) override configuration files. +::: + +## Default Configuration Values + +The default configuration is used when no other options are specified. By default, a `nwaku` node does the following: + +- Generate a new `Node Key` and `PeerID`. +- Listen for incoming libp2p connections on the default TCP port (`60000`). +- Subscribe to the default Pub/Sub topic (`/waku/2/default-waku/proto`). +- Start the `JSON-RPC` server on the default port (`8545`). +- Enable the `Relay` protocol for relaying messages. +- Enable the `Store` protocol as a client, allowing it to query peers for historical messages but not store any message itself. + +To see the default values of all [configuration options](/guides/reference/node-config-options), run `wakunode2 --help`: + +```bash +./build/wakunode2 --help +``` + +:::tip +To explore the available node configuration options, please refer to the [Node Configuration Options](/guides/reference/node-config-options) guide. +::: \ No newline at end of file diff --git a/docs/guides/reference/node-config-options.md b/docs/guides/reference/node-config-options.md new file mode 100644 index 0000000..642414b --- /dev/null +++ b/docs/guides/reference/node-config-options.md @@ -0,0 +1,165 @@ +--- +title: Node Configuration Options +--- + +Here are the available node configuration options, along with their default values and descriptions: + +## Application-Level Config + +| Name | Default Value | Description | +| - | - | - | +| `config-file` | | Loads configuration from a TOML file (cmd-line parameters take precedence) | +| `protected-topic` | `newSeq[ProtectedTopic](0)` | Topics and its public key to be used for message validation, topic:pubkey. Argument may be repeated | + +## Log Config + +| Name | Default Value | Description | +| - | - | - | +| `log-level` | `logging.LogLevel.INFO` | Sets the log level for process. Supported levels: TRACE, DEBUG, INFO, NOTICE, WARN, ERROR or FATAL | +| `log-format` | `logging.LogFormat.TEXT` | Specifies what kind of logs should be written to stdout. Suported formats: TEXT, JSON | + +## General Node Config + +| Name | Default Value | Description | +| - | - | - | +| `agent-string` | `nwaku` | Node agent string which is used as identifier in network | +| `nodekey` | | P2P node private key as 64 char hex string | +| `listen-address` | `defaultListenAddress()` | Listening address for LibP2P (and Discovery v5, if enabled) traffic | +| `tcp-port` | `60000` | TCP listening port | +| `ports-shift` | `0` | Add a shift to all port numbers | +| `nat` | any | Specify method to use for determining public address. Must be one of: any, none, upnp, pmp, extip: | +| `ext-multiaddr` | | External multiaddresses to advertise to the network. Argument may be repeated | +| `max-connections` | `50` | Maximum allowed number of libp2p connections | +| `peer-store-capacity` | | Maximum stored peers in the peerstore | +| `peer-persistence` | `false` | Enable peer persistence | + +## DNS Addrs Config + +| Name | Default Value | Description | +| - | - | - | +| `dns-addrs` | `true` | Enable resolution of `dnsaddr`, `dns4` or `dns6` multiaddrs | +| `dns-addrs-name-server` | `["1.1.1.1", "1.0.0.1"]` | DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated | +| `dns4-domain-name` | | The domain name resolving to the node's public IPv4 address | + +## Relay Config + +| Name | Default Value | Description | +| - | - | - | +| `relay` | `true` | Enable relay protocol: true\|false | +| `relay-peer-exchange` | `false` | Enable gossipsub peer exchange in relay protocol: true\|false | +| `rln-relay` | `false` | Enable spam protection through rln-relay: true\|false | +| `rln-relay-cred-path` | | The path for peristing rln-relay credential | +| `rln-relay-membership-index` | `0` | The index of credentials to use | +| `rln-relay-membership-group-index` | `0` | The index of credentials to use, within a specific rln membership set | +| `rln-relay-pubsub-topic` | `/waku/2/default-waku/proto` | The pubsub topic for which rln-relay gets enabled | +| `rln-relay-content-topic` | `/toy-chat/3/mingde/proto` | The content topic for which rln-relay gets enabled | +| `rln-relay-dynamic` | `false` | Enable waku-rln-relay with on-chain dynamic group management: true\|false | +| `rln-relay-id-key` | | Rln relay identity secret key as a Hex string | +| `rln-relay-id-commitment-key` | | Rln relay identity commitment key as a Hex string | +| `rln-relay-eth-account-address` | | Account address for the Ethereum testnet Sepolia | +| `rln-relay-eth-account-private-key` | | Account private key for the Ethereum testnet Sepolia | +| `rln-relay-eth-client-address` | `ws://localhost:8540/` | WebSocket address of an Ethereum testnet client e.g., ws://localhost:8540/ | +| `rln-relay-eth-contract-address` | | Address of membership contract on an Ethereum testnet | +| `rln-relay-cred-password` | | Password for encrypting RLN credentials | +| `rln-relay-tree-path` | | Path to the RLN merkle tree sled db (https://github.com/spacejam/sled) | +| `staticnode` | | Peer multiaddr to directly connect with. Argument may be repeated | +| `keep-alive` | `false` | Enable keep-alive for idle connections: true\|false | +| `topic` | `["/waku/2/default-waku/proto"]` | Default topic to subscribe to. Argument may be repeated | + +## Store and Message Store Config + +| Name | Default Value | Description | +| - | - | - | +| `store` | `false` | Enable/disable waku store protocol | +| `storenode` | | Peer multiaddress to query for storage | +| `store-message-retention-policy` | time:172800 | Message store retention policy. Time retention policy: 'time:'. Capacity retention policy: 'capacity:'. Set to 'none' to disable | +| `store-message-db-url` | `sqlite://store.sqlite3` | The database connection URL for peristent storage | +| `store-message-db-vacuum` | `false` | Enable database vacuuming at start. Only supported by SQLite database engine | +| `store-message-db-migration` | `true` | Enable database migration at start | +| `store-resume-peer` | | Peer multiaddress to resume the message store at boot | + +## Filter Config + +| Name | Default Value | Description | +| - | - | - | +| `filter` | `false` | Enable filter protocol: true\|false | +| `filternode` | | Peer multiaddr to request content filtering of messages | +| `filter-timeout` | `14400 # 4 hours` | Timeout for filter node in seconds | + +## Light Push Config + +| Name | Default Value | Description | +| - | - | - | +| `lightpush` | `false` | Enable lightpush protocol: true\|false | +| `lightpushnode` | | Peer multiaddr to request lightpush of published messages | + +## JSON-RPC Config + +| Name | Default Value | Description | +| - | - | - | +| `rpc` | `true` | Enable Waku JSON-RPC server: true\|false | +| `rpc-address` | `127.0.0.1` | Listening address of the JSON-RPC server | +| `rpc-port` | `8545` | Listening port of the JSON-RPC server | +| `rpc-admin` | `false` | Enable access to JSON-RPC Admin API: true\|false | +| `rpc-private` | `false` | Enable access to JSON-RPC Private API: true\|false | + +## REST HTTP Config + +| Name | Default Value | Description | +| - | - | - | +| `rest` | `false` | Enable Waku REST HTTP server: true\|false | +| `rest-address` | `127.0.0.1` | Listening address of the REST HTTP server | +| `rest-port` | `8645` | Listening port of the REST HTTP server | +| `rest-relay-cache-capacity` | `30` | Capacity of the Relay REST API message cache | +| `rest-admin` | `false` | Enable access to REST HTTP Admin API: true\|false | +| `rest-private` | `false` | Enable access to REST HTTP Private API: true\|false | + +## Metrics Config + +| Name | Default Value | Description | +| - | - | - | +| `metrics-server` | `false` | Enable the metrics server: true\|false | +| `metrics-server-address` | `127.0.0.1` | Listening address of the metrics server | +| `metrics-server-port` | `8008` | Listening HTTP port of the metrics server | +| `metrics-logging` | `true` | Enable metrics logging: true\|false | + +## DNS Discovery Config + +| Name | Default Value | Description | +| - | - | - | +| `dns-discovery` | `false` | Enable discovering nodes via DNS | +| `dns-discovery-url` | | URL for DNS node list in format 'enrtree://@' | +| `dns-discovery-name-server` | `["1.1.1.1", "1.0.0.1"]` | DNS name server IPs to query. Argument may be repeated | + +## Discv5 Config + +| Name | Default Value | Description | +| - | - | - | +| `discv5-discovery` | `false` | Enable discovering nodes via Node Discovery v5 | +| `discv5-udp-port` | `9000` | Listening UDP port for Node Discovery v5 | +| `discv5-bootstrap-node` | | Text-encoded ENR for bootstrap node. Used when connecting to the network. Argument may be repeated | +| `discv5-enr-auto-update` | `false` | Discovery can automatically update its ENR with the IP address | +| `discv5-table-ip-limit` | `10` | Maximum amount of nodes with the same IP in discv5 routing tables | +| `discv5-bucket-ip-limit` | `2` | Maximum amount of nodes with the same IP in discv5 routing table buckets | +| `discv5-bits-per-hop` | `1` | Kademlia's b variable, increase for less hops per lookup | + +## Waku Peer Exchange Config + +| Name | Default Value | Description | +| - | - | - | +| `peer-exchange` | `false` | Enable waku peer exchange protocol (responder side): true\|false | +| `peer-exchange-node` | | Peer multiaddr to send peer exchange requests to. (enables peer exchange protocol requester side) | + +## WebSocket Config + +| Name | Default Value | Description | +| - | - | - | +| `websocket-support` | `false` | Enable websocket: true\|false | +| `websocket-port` | `8000` | WebSocket listening port | +| `websocket-secure-support` | `false` | Enable secure websocket: true\|false | +| `websocket-secure-key-path` | | Secure websocket key path: '/path/to/key.txt' | +| `websocket-secure-cert-path` | | Secure websocket Certificate path: '/path/to/cert.txt' | + +:::tip +To configure your node using the provided configuration options, please refer to the [Node Configuration Methods](/guides/reference/node-config-methods) guide. +::: \ No newline at end of file diff --git a/docs/guides/run-nwaku-node.md b/docs/guides/run-nwaku-node.md index be47a40..e7ed322 100644 --- a/docs/guides/run-nwaku-node.md +++ b/docs/guides/run-nwaku-node.md @@ -2,29 +2,39 @@ title: Run a Nwaku Node --- -Nwaku (formerly `nim-waku`) is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the [protocols](/overview/concepts/protocols) they want to support based on their needs, motivations, and available resources. +Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the [protocols](/overview/concepts/protocols) they want to support based on their needs, motivations, and available resources. -This guide provides detailed steps to build, configure, and connect a `nwaku` node to the Waku Network. It also covers using existing tools to monitor and maintain the node. +This guide provides detailed steps to download, build, configure, and connect a `nwaku` node to the Waku Network. It also includes interacting with the node and finding its addresses. -## Build the Node +## Get the Binary -Before running a Nwaku node, it is necessary to build it. Nwaku provides multiple options for building a node: +To run a node, you must have the `nwaku` binary. Nwaku provides multiple options for acquiring the node binary: + +#### Download the Binary | | Description | Documentation | | - | - | - | -| Source Code | Build a `nwaku` node directly from the source code | [Build Nwaku from Source](https://github.com/waku-org/nwaku/blob/master/docs/operators/how-to/build.md) | | Precompiled Binary | Download a precompiled binary of the `nwaku` node | [Download Nwaku Binary](https://github.com/waku-org/nwaku/tags) | -| Nightly Release | Try out the latest `nwaku` updates without compiling the binaries | [Download Nightly Release](https://github.com/waku-org/nwaku/releases/tag/nightly) | -| Docker Container | Build and run a `nwaku` node in a Docker Container | [Run Nwaku in Docker Container](https://github.com/waku-org/nwaku/blob/master/docs/operators/docker-quickstart.md) | -| DigitalOcean Droplet | Build and run a `nwaku` node on a DigitalOcean Droplet | [Run Nwaku on DigitalOcean Droplet](https://github.com/waku-org/nwaku/blob/master/docs/operators/droplet-quickstart.md) | +| Nightly Release | Try the latest `nwaku` updates without compiling the binaries | [Download Nightly Release](https://github.com/waku-org/nwaku/releases/tag/nightly) | -:::info -Nwaku can be built and run on Linux and macOS, while Windows support is currently experimental. +#### Build the Binary + +You can build the node binary directly from the [nwaku source code](https://github.com/waku-org/nwaku). To learn more, please refer to the [Build Nwaku from Source](/guides/nwaku/build-source) guide. + +#### Run the Binary in Docker + +| | Description | Documentation | +| - | - | - | +| Docker Container | Run a `nwaku` node in a Docker Container | [Run Nwaku in a Docker Container](/guides/nwaku/run-docker) | +| Docker Compose | Run a `nwaku` node with Docker Compose | [Run Nwaku with Docker Compose](/guides/nwaku/run-docker-compose) | + +:::tip +You can run the `nwaku` binaries and Docker images on cloud service providers like [Google Cloud](https://cloud.google.com/), [Microsoft Azure](https://azure.microsoft.com/), [Amazon Web Services](https://aws.amazon.com/), and [DigitalOcean](https://www.digitalocean.com/). ::: ## Run the Node -Once you have built the `nwaku` node, run it using the default configuration: +Once you have gotten the `nwaku` binary, run it using the [default configuration](/guides/reference/node-config-methods#default-configuration-values): ```bash # Run with default configuration @@ -34,30 +44,21 @@ Once you have built the `nwaku` node, run it using the default configuration: ./build/wakunode2 --help ``` -By default, a `nwaku` node is configured to do the following: - -- Generate a new private key and `PeerID`. -- Listen for incoming libp2p connections on the default TCP port (`60000`). -- Subscribe to the default Pub/Sub topic (`/waku/2/default-waku/proto`). -- Start the `JSON-RPC` HTTP server on the default port (`8545`). -- Enable the `Relay` protocol for relaying messages. -- Enable the `Store` protocol as a client, allowing it to query peers for historical messages but not store any message itself. - -:::info -For more advanced configurations like enabling other protocols or maintaining a consistent `PeerID`, please refer to the [Configuration Methods](https://github.com/waku-org/nwaku/blob/master/docs/operators/how-to/configure.md) guide. +:::tip +For more advanced configurations like enabling other protocols or maintaining a consistent `PeerID`, please refer to the [Node Configuration Methods](/guides/reference/node-config-methods) guide. ::: -## Connect the Node +## Bootstrap the Node -To join the Waku Network, nodes must connect with peers. Nwaku provides multiple [peer discovery](/overview/concepts/peer-discovery) mechanisms for locating other peers: +To join the Waku Network, nodes must [bootstrap](/overview/reference/glossary#bootstrapping) for an entry point before discovering more peers. Nwaku provides multiple [peer discovery](/overview/concepts/peer-discovery) mechanisms: | | Description | Documentation | | - | - | - | -| Predefined Nodes | Configure the bootstrap nodes that `nwaku` should establish connections upon startup | [Configure Predefined Nodes](https://github.com/waku-org/nwaku/blob/master/docs/operators/how-to/connect.md#option-1-configure-peers-statically) | -| DNS Discovery | Enable `nwaku` to locate peers to connect to using the `DNS Discovery` mechanism | [Configure DNS Discovery](https://github.com/waku-org/nwaku/blob/master/docs/operators/how-to/configure-dns-disc.md) | -| Discv5 | Enable `nwaku` to locate peers to connect to using the `Discv5` mechanism | [Configure Discv5](https://github.com/waku-org/nwaku/blob/master/docs/operators/how-to/connect.md#option-3-discover-peers-using-waku-discovery-v5) | +| Static Peers | Configure the bootstrap nodes that `nwaku` should establish connections upon startup | [Configure Static Peers](/guides/nwaku/configure-discovery#configure-static-peers) | +| DNS Discovery | Enable `nwaku` to bootstrap nodes using the [DNS Discovery](/overview/concepts/dns-discovery) mechanism | [Configure DNS Discovery](/guides/nwaku/configure-discovery#configure-dns-discovery) | +| Discv5 | Enable `nwaku` to discover peers using the [Discv5](/overview/concepts/discv5) mechanism | [Configure Discv5](/guides/nwaku/configure-discovery#configure-discv5) | -:::info +:::tip You can configure a `nwaku` node to use multiple peer discovery mechanisms simultaneously. ::: @@ -104,5 +105,59 @@ curl --location --request GET 'http://localhost:8545' \ :::info -The `listenAddresses` field stores the transport addresses for accepting connections, while the `enrUri` field stores the `ENR` URI for peer discovery. -::: \ No newline at end of file +The `listenAddresses` field stores the node's listening address(es), while the `enrUri` field stores the discoverable `ENR` URI for peer discovery. +::: + +## Find the Node Addresses + +You can find the addresses of a running node through its logs or by calling the `get_waku_v2_debug_v1_info` method of the [JSON RPC API](https://rfc.vac.dev/spec/16/). + +:::tip +When starting the node, `nwaku` will display all the public listening and discovery addresses at the `INFO` log level. +::: + +### Listening Addresses + +Look for the log entry that begins with `Listening on`, for example: + +```txt title="Nwaku Log Output" +INF 2023-06-15 16:09:54.448+01:00 Listening on topics="waku node" tid=1623445 file=waku_node.nim:922 full=[/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn][/ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn] +``` + +```bash +# Listening TCP transport address +/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn + +# Listening WebSocket address +/ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn +``` + +### Discoverable ENR Addresses + +A `nwaku` node can encode its addressing information in an [Ethereum Node Record (ENR)](https://eips.ethereum.org/EIPS/eip-778) following the [WAKU2-ENR](https://rfc.vac.dev/spec/31/) specification, primarily for peer discovery. + +#### ENR for DNS discovery + +Look for the log entry that begins with `DNS: discoverable ENR`, for example: + +```txt title="Nwaku Log Output" +INF 2023-06-15 16:09:54.448+01:00 DNS: discoverable ENR topics="waku node" tid=1623445 file=waku_node.nim:923 enr=enr:-Iu4QBKYj8Ovxwz4fIalxZ_1a8dOCU2WC-1LQrcBCCb4Np93f9-UuSZXn3vagJL1S3k3hwRYfOp3JSbW7_VqwtqMIeMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQOrmyV59dAzY4ZKrvrj32VOoZbLby8dCKFnXnqhIdQ0NYN0Y3CC6mCFd2FrdTIB +``` + +```bash +# ENR the node addresses are encoded in +enr:-Iu4QBKYj8Ovxwz4fIalxZ_1a8dOCU2WC-1LQrcBCCb4Np93f9-UuSZXn3vagJL1S3k3hwRYfOp3JSbW7_VqwtqMIeMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQOrmyV59dAzY4ZKrvrj32VOoZbLby8dCKFnXnqhIdQ0NYN0Y3CC6mCFd2FrdTIB +``` + +#### ENR for Discv5 + +Look for the log entry that begins with `Discv5: discoverable ENR`, for example: + +```txt title="Nwaku Log Output" +INF 2023-06-15 16:09:54.448+01:00 Discv5: discoverable ENR topics="waku node" tid=1623445 file=waku_node.nim:924 enr=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw +``` + +```bash +# ENR the node addresses are encoded in +enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw +``` \ No newline at end of file diff --git a/docs/overview/concepts/content-topics.md b/docs/overview/concepts/content-topics.md index e03cbc9..cd03201 100644 --- a/docs/overview/concepts/content-topics.md +++ b/docs/overview/concepts/content-topics.md @@ -20,7 +20,7 @@ For instance, if your dApp is called `SuperCrypto` and it allows users to receiv - `/supercrypto/1/notification/proto` - `/supercrypto/1/private-message/proto` -:::info +:::tip While you can choose any encoding format for your `Content Topic`, we highly recommend using Protocol Buffers (`proto`) because of its efficiency. Choosing a lightweight format ensures optimal performance of your dApp. ::: diff --git a/docs/overview/concepts/discv5.md b/docs/overview/concepts/discv5.md index d1b4a17..ff2bf17 100644 --- a/docs/overview/concepts/discv5.md +++ b/docs/overview/concepts/discv5.md @@ -4,12 +4,12 @@ title: Discv5 `Discv5` is a decentralized and efficient peer discovery mechanism for the Waku Network. It uses a [Distributed Hash Table (DHT)](https://en.wikipedia.org/wiki/Distributed_hash_table) for storing `ENR` records, providing resistance to censorship. `Discv5` offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomized sets of nodes for mesh expansion. Please refer to the [Discv5](https://rfc.vac.dev/spec/33/) specification to learn more. -## Pros +#### Pros - Decentralized with random sampling from a global view. - Continuously researched and improved. -## Cons +#### Cons - Requires lots of connections and involves frequent churn. - Relies on User Datagram Protocol (UDP), which is not supported in web browsers. diff --git a/docs/overview/concepts/dns-discovery.md b/docs/overview/concepts/dns-discovery.md index 03a4a2a..2800633 100644 --- a/docs/overview/concepts/dns-discovery.md +++ b/docs/overview/concepts/dns-discovery.md @@ -6,13 +6,13 @@ Built upon the foundation of [EIP-1459: Node Discovery via DNS](https://eips.eth This bootstrapping method allows anyone to register and publish a domain name for the network, promoting increased decentralization. -## Pros +#### Pros - Low latency, low resource requirements. - Easy bootstrap list updates by modifying the domain name, eliminating the need for code changes. - Ability to reference a larger list of nodes by including other domain names in the code or ENR tree. -## Cons +#### Cons - Vulnerable to censorship: Domain names can be blocked or restricted. - Limited scalability: The listed nodes are at risk of being overwhelmed by receiving all queries. Also, operators must provide their `ENR` to the domain owner for listing. diff --git a/docs/overview/concepts/peer-discovery.md b/docs/overview/concepts/peer-discovery.md index 8ab6de3..0cf1641 100644 --- a/docs/overview/concepts/peer-discovery.md +++ b/docs/overview/concepts/peer-discovery.md @@ -12,7 +12,7 @@ Once a connection is established, the node must actively seek out additional pee Waku supports multiple peer discovery mechanisms, such as: -- [Configuring Predefined Nodes](/overview/concepts/predefined-nodes) +- [Configuring Static Peers](/overview/concepts/static-peers) - [Peer Discovery via DNS](/overview/concepts/dns-discovery) - [Discv5 Ambient Peer Discovery](/overview/concepts/discv5) - [Peer Exchange](/overview/concepts/peer-exchange) \ No newline at end of file diff --git a/docs/overview/concepts/peer-exchange.md b/docs/overview/concepts/peer-exchange.md index 9951f3c..7b3b51c 100644 --- a/docs/overview/concepts/peer-exchange.md +++ b/docs/overview/concepts/peer-exchange.md @@ -4,12 +4,12 @@ title: Peer Exchange The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices. The peer exchange protocol enables lightweight nodes to request peers from other nodes within the network. Light nodes can bootstrap and expand their mesh independently without relying on `Discv5`. Please refer to the [Peer Exchange](https://rfc.vac.dev/spec/34/) specification to learn more. -## Pros +#### Pros - Low resource requirements. - Decentralized with random sampling of nodes from a global view using `Discv5`. -## Cons +#### Cons - Decreased anonymity. - Imposes additional load on responder nodes. diff --git a/docs/overview/concepts/predefined-nodes.md b/docs/overview/concepts/static-peers.md similarity index 51% rename from docs/overview/concepts/predefined-nodes.md rename to docs/overview/concepts/static-peers.md index 040a987..ddfe7a8 100644 --- a/docs/overview/concepts/predefined-nodes.md +++ b/docs/overview/concepts/static-peers.md @@ -1,15 +1,15 @@ --- -title: Predefined Nodes +title: Static Peers --- -Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can use either the [predefined nodes by Status](https://github.com/waku-org/js-waku/blob/master/packages/core/src/lib/predefined_bootstrap_nodes.ts#L45) or [run a node](/guides/nodes-and-sdks#run-a-waku-node) per their preference. +Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can either use [static peers operated by Status](https://github.com/waku-org/js-waku/blob/master/packages/core/src/lib/predefined_bootstrap_nodes.ts#L45) or [run a node](/guides/nodes-and-sdks#run-a-waku-node). -## Pros +#### Pros - Low latency. - Low resource requirements. -## Cons +#### Cons - Vulnerable to censorship: Node IPs can be blocked or restricted. - Limited scalability: The number of nodes is fixed and cannot easily be expanded. @@ -18,7 +18,7 @@ Waku applications have the flexibility to embed bootstrap node addresses directl ## Overview ```mdx-code-block -import PredefinedNodes from "@site/diagrams/_predefined-nodes.md"; +import StaticPeers from "@site/diagrams/_static-peers.md"; - + ``` \ No newline at end of file diff --git a/docs/overview/index.md b/docs/overview/index.md index 8a8725b..7b5d9ec 100644 --- a/docs/overview/index.md +++ b/docs/overview/index.md @@ -15,7 +15,7 @@ Waku protocols ensure that users communication remains censorship-resistant and The Waku family of protocols is designed for diverse applications due to their properties, such as: -### Generalized Messaging +### Generalized Waku aims to solve the problem of ephemeral messaging between subsystems and nodes through a flexible, secure, and private protocol. It supports human-to-human and machine-to-machine messaging scenarios but is not designed for data storage. diff --git a/docs/overview/reference/glossary.md b/docs/overview/reference/glossary.md index 7fc3acc..89f933d 100644 --- a/docs/overview/reference/glossary.md +++ b/docs/overview/reference/glossary.md @@ -8,7 +8,7 @@ Definitions and usage of the terminology used in the Waku ecosystem. ### Bootstrapping -Bootstrapping is the initial entry point of a [node](#node) to the [Waku Network](#waku). Once connected, other [peer discovery](#peer-discovery) methods can be employed to establish connections with fellow peers. +Bootstrapping is the initial entry point of a [node](#node) to the [Waku Network](#waku). Once connected, other [peer discovery](#peer-discovery) methods can be employed to locate other [peers](#peer) in the network. ### [Content Topic](/overview/concepts/content-topics) @@ -58,6 +58,10 @@ Mostly offline devices refer to clients who spend most of their time offline or A node is a device or client that implements Waku [protocols](#protocol) and leverages the [Waku Network](#waku) to enable secure and private peer-to-peer Web3 communication. +### Node Key + +A node key is a [Secp256k1](https://en.bitcoin.it/wiki/Secp256k1) (64 char hex string) private key for generating the [PeerID](#peer-id), [listening](#transport) addresses, and [discovery](#peer-discovery) addresses of a Waku node. + ### Payload The payload field in a [Waku Message](#waku-message) contains the application data, serving as the business logic message transmitted between clients over Waku. Applications can encrypt the payload or employ encryption methods specified in [Waku Message Payload Encryption](#waku-message-payload-encryption). diff --git a/docs/powered-by-waku.mdx b/docs/powered-by-waku.mdx index 57b64d9..8bb8679 100644 --- a/docs/powered-by-waku.mdx +++ b/docs/powered-by-waku.mdx @@ -11,7 +11,7 @@ import { PoweredBy } from "@site/src/components/mdx"; { name: "Status", description: - "Status is a secure messaging app, crypto wallet, and Web3 browser built with state-of-the-art technology.", + "Waku powers many of the Status super app's features, including its private messaging.", logoSrc: "/img/status-mark-black.svg", logoSrcDark: "/img/status-mark-white.svg", link: "https://status.im", @@ -19,7 +19,7 @@ import { PoweredBy } from "@site/src/components/mdx"; { name: "RAILGUN", description: - "RAILGUN uses Waku to offer private gas payments to users, ensuring anonymity and privacy for their transactions.", + "The privacy-focused DeFi protocol Railgun anonymizes Ethereum transactions with Waku.", logoSrc: "/img/railgun-mark-black.svg", logoSrcDark: "/img/railgun-mark-white.svg", link: "https://railgun.org", @@ -35,7 +35,7 @@ import { PoweredBy } from "@site/src/components/mdx"; { name: "XMTP", description: - "XMTP uses the Waku network to enable secure Web3 messaging in their open protocol and network.", + "Inter-blockchain account messaging protocol XMTP uses Waku to facilitate communication between nodes in its currently permissioned network.", logoSrc: "/img/xmtp-mark-black.svg", logoSrcDark: "/img/xmtp-mark-white.svg", link: "https://xmtp.org", diff --git a/docusaurus.config.js b/docusaurus.config.js index 8e6cfad..a77902f 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -96,6 +96,10 @@ const config = { label: "Watch Our Presentations", to: "/presentations", }, + { + label: "Waku Bounties", + to: "https://github.com/waku-org/bounties", + }, { label: "Bug Bounty Program", to: "https://hackenproof.com/status-dot-im/waku", @@ -175,7 +179,6 @@ const config = { ], }, }, - themes: ["@docusaurus/theme-mermaid"], markdown: { mermaid: true, }, diff --git a/package.json b/package.json index abbe356..025fb6d 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "check:spell": "cspell \"**/*.{md,mdx}\"" }, "dependencies": { - "@acid-info/logos-docusaurus-preset": "^1.0.0-alpha.34", + "@acid-info/logos-docusaurus-preset": "^1.0.0-alpha.51", "@docusaurus/core": "^2.4.1", "@docusaurus/preset-classic": "^2.4.1", "@docusaurus/theme-mermaid": "^2.4.1", diff --git a/scripts/config-table-generator.py b/scripts/config-table-generator.py new file mode 100644 index 0000000..90c9121 --- /dev/null +++ b/scripts/config-table-generator.py @@ -0,0 +1,83 @@ +import re +import requests +from typing import Tuple, Dict, Any + +def extract_config_param(line: str, param: str) -> str: + return re.split(f'{param}: ', line)[1].strip()[1:].split('"')[0].strip() + +def remove_extra_char(string: str, char: str) -> str: + return string[:-1] if string[-1] == char else string + +def parse_table_heading(line: str) -> Tuple[str, bool]: + table_heading = re.split('##', line)[1].strip() + if 'config' not in table_heading or 'Application-level' in table_heading: + return None, False + table_heading = table_heading.title() + + word_replace_re = re.compile('|'.join([ + r'(Configuration)', r'(And)', r'(Lightpush)', + r'(Json-Rpc)', r'(Rest Http)', r'(Dns)', + r'(Discovery V5)', r'(Websocket)' + ])) + word_replace_dict = { + 'Configuration': 'Config', 'And': 'and', 'Lightpush': 'Light Push', + 'Json-Rpc': 'JSON-RPC', 'Rest Http': 'REST HTTP', 'Dns': 'DNS', + 'Discovery V5': 'Discv5', 'Websocket': 'WebSocket' + } + table_heading = word_replace_re.sub(lambda match: word_replace_dict[match.group(0)], table_heading) + return '## ' + table_heading, True + +def fetch_config_file(config_path: str) -> str: + config_file = requests.get(config_path) + if config_file.status_code == 200: + return config_file.text.split("\n") + else: + exit("An error occurred while fetching the config file") + +def extract_config(config_path: str) -> str: + config_data = fetch_config_file(config_path) + + config_table = "## Application-Level Config\n\n| Name | Default Value | Description |\n| - | - | - |\n" + row = {"name": None, "default": "", "description": None} + for line in config_data: + line = line.strip() + + if line == "": + if row["description"] is not None and row["name"] != "topics": + if row["name"] == "store-message-retention-policy": + row["default"] = "time:172800" + if row["name"] is None: + row["name"], row["default"] = "nat", "any" + row["description"] += ". Must be one of: any, none, upnp, pmp, extip:" + config_table += f"| `{row['name']}` | {row['default']} | {row['description']} |\n" + row = {"name": None, "default": "", "description": None} + + if line.startswith("## "): + table_heading, is_valid_heading = parse_table_heading(line) + if is_valid_heading: + config_table += f"\n{table_heading}\n\n| Name | Default Value | Description |\n| - | - | - |\n" + + if line.startswith("name:"): + row["name"] = extract_config_param(line, "name") + + if line.startswith("defaultValue:"): + default_value = re.split("defaultValue: ", line)[1].strip() + if '""' not in default_value: + default_value = f"`{remove_extra_char(default_value, ',')}`".replace("@", "") + if "[" not in default_value: + default_value = default_value.replace('"', "") + if "ValidIpAddress.init" in default_value: + default_value = default_value.replace("ValidIpAddress.init(", "").replace(")", "") + row["default"] = default_value + + if line.startswith("desc:"): + description = remove_extra_char(extract_config_param(line, "desc"), ".").replace("|", "\|") + row["description"] = description[0].upper() + description[1:] + + return config_table.replace(">", "\>") + + +if __name__ == "__main__": + config_path = "https://raw.githubusercontent.com/waku-org/nwaku/master/apps/wakunode2/config.nim" + table_data = extract_config(config_path) + print(table_data) \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 47913a8..44cf9c4 100644 --- a/sidebars.js +++ b/sidebars.js @@ -18,11 +18,11 @@ const sidebars = { { type: "category", label: "Concepts", - collapsed: false, items: [ "overview/concepts/protocols", "overview/concepts/content-topics", "overview/concepts/network-domains", + "overview/concepts/transports", { type: "category", label: "Peer Discovery", @@ -31,13 +31,12 @@ const sidebars = { id: "overview/concepts/peer-discovery", }, items: [ - "overview/concepts/predefined-nodes", + "overview/concepts/static-peers", "overview/concepts/dns-discovery", "overview/concepts/discv5", "overview/concepts/peer-exchange", ] }, - "overview/concepts/transports", ] }, { @@ -53,13 +52,38 @@ const sidebars = { ], guides: [ "guides/nodes-and-sdks", - "guides/run-nwaku-node", + { + type: "category", + label: "Run a Nwaku Node", + link: { + type: "doc", + id: "guides/run-nwaku-node", + }, + items: [ + "guides/nwaku/build-source", + "guides/nwaku/run-docker", + "guides/nwaku/run-docker-compose", + "guides/nwaku/configure-discovery", + ] + }, + { + type: "category", + label: "Reference", + items: [ + "guides/reference/node-config-methods", + "guides/reference/node-config-options", + ] + }, ], community: [ "powered-by-waku", "community", "contribute", "presentations", + { + type: 'html', + value: 'Waku Bounties', + }, { type: 'html', value: 'Bug Bounty Program', diff --git a/static/img/nwaku-compose-dashboard.png b/static/img/nwaku-compose-dashboard.png new file mode 100644 index 0000000..ce852d5 Binary files /dev/null and b/static/img/nwaku-compose-dashboard.png differ diff --git a/static/img/railgun-logo.png b/static/img/railgun-logo.png deleted file mode 100644 index 62ed163..0000000 Binary files a/static/img/railgun-logo.png and /dev/null differ diff --git a/static/img/status-logo.svg b/static/img/status-logo.svg deleted file mode 100644 index 799e00e..0000000 --- a/static/img/status-logo.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/static/img/the-graph-logo.svg b/static/img/the-graph-logo.svg deleted file mode 100644 index b6ed0c5..0000000 --- a/static/img/the-graph-logo.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/static/img/xmtp-logo.svg b/static/img/xmtp-logo.svg deleted file mode 100644 index 9ce73b7..0000000 --- a/static/img/xmtp-logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/yarn.lock b/yarn.lock index 0038c31..ca8a5a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,28 +2,10 @@ # yarn lockfile v1 -"@acid-info/logos-docusaurus-preset@^1.0.0-alpha.34": - version "1.0.0-alpha.34" - resolved "https://registry.yarnpkg.com/@acid-info/logos-docusaurus-preset/-/logos-docusaurus-preset-1.0.0-alpha.34.tgz#714aa2f0de27ad285d3b1655bf9e9e8e924aadc9" - integrity sha512-P15D3v8hc1+wVpvR1pgFo4Kz7pFlE3hJtTC+XeSE6hCITNeIkyNkVhbNF+Q4YP/ODbSSjnCHw0qtQg8aTR4+8Q== - dependencies: - "@acid-info/logos-docusaurus-search-local" "^1.0.0-alpha.19" - "@acid-info/logos-docusaurus-theme" "^1.0.0-alpha.34" - "@docusaurus/core" "^2.4.1" - "@docusaurus/module-type-aliases" "^2.4.1" - "@docusaurus/preset-classic" "^2.4.1" - "@docusaurus/types" "^2.4.1" - "@docusaurus/utils" "^2.4.1" - "@docusaurus/utils-common" "^2.4.1" - "@docusaurus/utils-validation" "^2.4.1" - docusaurus-plugin-sass "^0.2.3" - fs-extra "^10.1.0" - lodash "^4.17.21" - -"@acid-info/logos-docusaurus-search-local@^1.0.0-alpha.19": - version "1.0.0-alpha.19" - resolved "https://registry.yarnpkg.com/@acid-info/logos-docusaurus-search-local/-/logos-docusaurus-search-local-1.0.0-alpha.19.tgz#32137c892c55db41edf6bc4311d382af7510607c" - integrity sha512-hu9equU9vzIaH6PM03VmDmlbUSUvWTAZEU0thoV0P169YzsLjgh6ad8IJetfP56rsj8FF3rUgfSWBT3JqVVq/g== +"@acid-info/docusaurus-og@^1.0.0-alpha.48": + version "1.0.0-alpha.48" + resolved "https://registry.yarnpkg.com/@acid-info/docusaurus-og/-/docusaurus-og-1.0.0-alpha.48.tgz#e7adec4062096170a0c9447a863491379859e6ef" + integrity sha512-8S+cvy8H6DF5iR5Fm+J9g8PuYN432WXq2s3AXV9J+RFxN36Ej3xg1JxskWxu1P29dfoKqA0GxJ2kwPXi+KPSwg== dependencies: "@docusaurus/core" "^2.4.1" "@docusaurus/module-type-aliases" "^2.4.1" @@ -34,12 +16,50 @@ "@easyops-cn/docusaurus-search-local" "^0.33.6" lodash "^4.17.21" -"@acid-info/logos-docusaurus-theme@^1.0.0-alpha.34": - version "1.0.0-alpha.34" - resolved "https://registry.yarnpkg.com/@acid-info/logos-docusaurus-theme/-/logos-docusaurus-theme-1.0.0-alpha.34.tgz#b8c78266139435892053bb5e848465bf6d97707a" - integrity sha512-Poe4y4mNjKwUWODl7O1fAUgFYq8fbbSNPnfMfu/zBi6cLn40ksZAWaJPGueDbrePRkK2bKEMMgad8qj1YZnTHw== +"@acid-info/logos-docusaurus-preset@^1.0.0-alpha.51": + version "1.0.0-alpha.51" + resolved "https://registry.yarnpkg.com/@acid-info/logos-docusaurus-preset/-/logos-docusaurus-preset-1.0.0-alpha.51.tgz#9a7a569eca6a065ab3c271bf7eff092be13f4cd7" + integrity sha512-fwySpcnWxljU5qbR/5HqrEqqlbwHOUALsn7Gh/A2xxQI69i1ItrhMVQP8sVdLElPz/RuNIcc6QEItcR5euiMWg== dependencies: - "@acid-info/lsd-react" "^0.1.0-alpha.13" + "@acid-info/docusaurus-og" "^1.0.0-alpha.48" + "@acid-info/logos-docusaurus-search-local" "^1.0.0-alpha.47" + "@acid-info/logos-docusaurus-theme" "^1.0.0-alpha.51" + "@docusaurus/core" "^2.4.1" + "@docusaurus/module-type-aliases" "^2.4.1" + "@docusaurus/preset-classic" "^2.4.1" + "@docusaurus/theme-mermaid" "^2.4.1" + "@docusaurus/types" "^2.4.1" + "@docusaurus/utils" "^2.4.1" + "@docusaurus/utils-common" "^2.4.1" + "@docusaurus/utils-validation" "^2.4.1" + docusaurus-plugin-sass "^0.2.3" + fs-extra "^10.1.0" + lodash "^4.17.21" + +"@acid-info/logos-docusaurus-search-local@^1.0.0-alpha.47": + version "1.0.0-alpha.47" + resolved "https://registry.yarnpkg.com/@acid-info/logos-docusaurus-search-local/-/logos-docusaurus-search-local-1.0.0-alpha.47.tgz#cf8cf55023f072671e53af570626f48fe4ba9063" + integrity sha512-InZPmF3f4nbqdVknXpNxG2OFLfOzudo9o4o5NDfJwXxGoaEq/rr+absLvHZmcNJVtdjRKlGcxudwwtfKXs2fIQ== + dependencies: + "@docusaurus/core" "^2.4.1" + "@docusaurus/module-type-aliases" "^2.4.1" + "@docusaurus/types" "^2.4.1" + "@docusaurus/utils" "^2.4.1" + "@docusaurus/utils-common" "^2.4.1" + "@docusaurus/utils-validation" "^2.4.1" + lodash "^4.17.21" + node-html-parser "^6.1.5" + object-hash "^3.0.0" + satori "^0.10.1" + sharp "^0.32.1" + +"@acid-info/logos-docusaurus-theme@^1.0.0-alpha.51": + version "1.0.0-alpha.51" + resolved "https://registry.yarnpkg.com/@acid-info/logos-docusaurus-theme/-/logos-docusaurus-theme-1.0.0-alpha.51.tgz#3d4bfed9cdee75effc21d023fb3ff2a542c0052d" + integrity sha512-N+sYA++Ao9BwZQ1+meRYXs7TSqHFoTfAu5+GwD4xl9Vc8C5o2RWGDkWiQCNysyAlObXsIB5RdBD+aj2DrsXZ9w== + dependencies: + "@acid-info/docusaurus-og" "^1.0.0-alpha.48" + "@acid-info/lsd-react" "^0.1.0-alpha.15" "@docusaurus/core" "^2.4.1" "@docusaurus/mdx-loader" "^2.4.1" "@docusaurus/module-type-aliases" "^2.4.1" @@ -48,6 +68,7 @@ "@docusaurus/plugin-content-pages" "^2.4.1" "@docusaurus/theme-classic" "^2.4.1" "@docusaurus/theme-common" "^2.4.1" + "@docusaurus/theme-mermaid" "^2.4.1" "@docusaurus/theme-translations" "^2.4.1" "@docusaurus/types" "^2.4.1" "@docusaurus/utils" "^2.4.1" @@ -69,15 +90,17 @@ prism-react-renderer "^1.3.5" react "^17.0.2" react-dom "^17.0.2" + react-quick-pinch-zoom "^4.9.0" react-use "^17.4.0" + sharp "^0.32.1" three "^0.152.2" three-stdlib "^2.23.4" utility-types "^3.10.0" -"@acid-info/lsd-react@^0.1.0-alpha.13": - version "0.1.0-alpha.13" - resolved "https://registry.yarnpkg.com/@acid-info/lsd-react/-/lsd-react-0.1.0-alpha.13.tgz#83a947aef6bf0597bb94389382bce72eda9d262e" - integrity sha512-bEtCygGvEabxr7a/0s2n9LLbs7RUY5YXFIEzxKeDH52UNhzLODY6hpOELWfpDxfd2Q0yxnMKSaG+yI7/FqjnlA== +"@acid-info/lsd-react@^0.1.0-alpha.15": + version "0.1.0-alpha.16" + resolved "https://registry.yarnpkg.com/@acid-info/lsd-react/-/lsd-react-0.1.0-alpha.16.tgz#cf635df44bc6ec63990d16fee38908d646a47701" + integrity sha512-U91Hp3Km/tAeExsMhAJvsocg37wImXlNN4Xo4R+lVJD3oTTF0cTLsB+32IbyimqELyXluUv2gwsyo2nHtEcY4Q== dependencies: "@emotion/react" "^11.10.5" "@emotion/styled" "^11.10.5" @@ -2735,6 +2758,14 @@ utility-types "^3.10.0" zustand "^3.5.1" +"@shuding/opentype.js@1.4.0-beta.0": + version "1.4.0-beta.0" + resolved "https://registry.yarnpkg.com/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz#5d1e7e9e056f546aad41df1c5043f8f85d39e24b" + integrity sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA== + dependencies: + fflate "^0.7.3" + string.prototype.codepointat "^0.2.1" + "@sideway/address@^4.1.3": version "4.1.4" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" @@ -3688,6 +3719,16 @@ base16@^1.0.0: resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -3710,6 +3751,15 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + body-parser@1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -3801,6 +3851,14 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -3855,6 +3913,11 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +camelize@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -3972,6 +4035,11 @@ chevrotain@^10.1.2: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -4094,11 +4162,27 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@~1.1.4: +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + colord@^2.9.1: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" @@ -4469,6 +4553,21 @@ cspell@^6.16.0: strip-ansi "^6.0.1" vscode-uri "^3.0.7" +css-background-parser@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/css-background-parser/-/css-background-parser-0.1.0.tgz#48a17f7fe6d4d4f1bca3177ddf16c5617950741b" + integrity sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA== + +css-box-shadow@1.0.0-3: + version "1.0.0-3" + resolved "https://registry.yarnpkg.com/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz#9eaeb7140947bf5d649fc49a19e4bbaa5f602713" + integrity sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg== + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== + css-declaration-sorter@^6.3.1: version "6.4.0" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" @@ -4529,6 +4628,15 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" +css-to-react-native@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" + integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -4932,6 +5040,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -5022,6 +5137,11 @@ detect-gpu@^4.0.14: dependencies: webgl-constants "^1.1.1" +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -5191,6 +5311,11 @@ elkjs@^0.8.2: resolved "https://registry.yarnpkg.com/elkjs/-/elkjs-0.8.2.tgz#c37763c5a3e24e042e318455e0147c912a7c248e" integrity sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ== +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== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -5216,7 +5341,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5393,6 +5518,11 @@ execa@^7.0.0: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -5541,6 +5671,11 @@ fflate@^0.6.9: resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.6.10.tgz#5f40f9659205936a2d18abf88b2e7781662b6d43" integrity sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg== +fflate@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50" + integrity sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw== + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -5687,6 +5822,11 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -5774,6 +5914,11 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + github-slugger@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" @@ -6024,7 +6169,7 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -he@^1.2.0: +he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -6034,6 +6179,11 @@ heap@^0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== +hex-rgb@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776" + integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw== + history@^4.9.0: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" @@ -6222,6 +6372,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.1.4, ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -6290,7 +6445,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6368,6 +6523,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -6748,6 +6908,14 @@ lilconfig@2.1.0, lilconfig@^2.0.3: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -7101,6 +7269,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + mini-css-extract-plugin@^2.6.1: version "2.7.5" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5" @@ -7120,11 +7293,16 @@ minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mmd-parser@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mmd-parser/-/mmd-parser-1.0.4.tgz#87cc05782cb5974ca854f0303fc5147bc9d690e7" @@ -7193,6 +7371,11 @@ nanoid@^3.3.6: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -7211,6 +7394,18 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-abi@^3.3.0: + version "3.45.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5" + integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== + dependencies: + semver "^7.3.5" + +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + node-emoji@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -7237,6 +7432,14 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-html-parser@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.5.tgz#c819dceb13a10a7642ff92f94f870b4f77968097" + integrity sha512-fAaM511feX++/Chnhe475a0NHD8M7AxDInsqQpz6x63GRF7xYNdS8Vo5dKsIVPgsOvG7eioRRTZQnWBrhDHBSg== + dependencies: + css-select "^5.1.0" + he "1.2.0" + node-releases@^2.0.8: version "2.0.10" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" @@ -7298,6 +7501,11 @@ object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" @@ -7448,6 +7656,11 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -7470,6 +7683,14 @@ parent-module@^2.0.0: dependencies: callsites "^3.1.0" +parse-css-color@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/parse-css-color/-/parse-css-color-0.2.1.tgz#b687a583f2e42e66ffdfce80a570706966e807c9" + integrity sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg== + dependencies: + color-name "^1.1.4" + hex-rgb "^4.1.0" + parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -7888,7 +8109,7 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -7912,6 +8133,24 @@ potpack@^1.0.1: resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14" integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -8077,7 +8316,7 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -rc@1.2.8, rc@^1.2.8: +rc@1.2.8, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -8196,6 +8435,13 @@ react-merge-refs@^1.1.0: resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz#73d88b892c6c68cbb7a66e0800faa374f4c38b06" integrity sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ== +react-quick-pinch-zoom@^4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/react-quick-pinch-zoom/-/react-quick-pinch-zoom-4.9.0.tgz#13d91adb7ea2e75c5a2ff43d71d2a0e04a56cf62" + integrity sha512-gCPnZu5+rkYDNvewi/d7A2wgLs7izQNMuC6kjt+KLC1qqHnRU27Ed8AgcEcnWAZKdMr3ZKoKhSvjlZSVZI0fuw== + dependencies: + tslib ">=2.0.0" + react-reconciler@^0.26.2: version "0.26.2" resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.26.2.tgz#bbad0e2d1309423f76cf3c3309ac6c96e05e9d91" @@ -8307,7 +8553,7 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -8621,7 +8867,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8651,6 +8897,22 @@ sass@^1.62.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +satori@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/satori/-/satori-0.10.1.tgz#41d4f86acd5b67ab00580766ea7a09523850b2f3" + integrity sha512-F4bTCkDp931tLb7+UCNPBuSQwXhikrUkI4fBQo6fA8lF0Evqqgg3nDyUpRktQpR5Ry1DIiIVqLyEwkAms87ykg== + dependencies: + "@shuding/opentype.js" "1.4.0-beta.0" + css-background-parser "^0.1.0" + css-box-shadow "1.0.0-3" + css-to-react-native "^3.0.0" + emoji-regex "^10.2.1" + escape-html "^1.0.3" + linebreak "^1.1.0" + parse-css-color "^0.2.1" + postcss-value-parser "^4.2.0" + yoga-wasm-web "^0.3.3" + sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -8750,6 +9012,13 @@ semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: dependencies: lru-cache "^6.0.0" +semver@^7.3.5, semver@^7.5.0: + version "7.5.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" + integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -8845,6 +9114,20 @@ shallowequal@^1.1.0: resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== +sharp@^0.32.1: + version "0.32.1" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.1.tgz#41aa0d0b2048b2e0ee453d9fcb14ec1f408390fe" + integrity sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg== + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^6.1.0" + prebuild-install "^7.1.1" + semver "^7.5.0" + simple-get "^4.0.1" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -8885,6 +9168,27 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + sirv@^1.0.7: version "1.0.19" resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" @@ -9258,6 +9562,27 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: version "5.3.7" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" @@ -9326,7 +9651,7 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tiny-inflate@^1.0.3: +tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== @@ -9423,11 +9748,23 @@ ts-easing@^0.2.0: resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== +tslib@>=2.0.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -9499,6 +9836,14 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + unified@9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" @@ -10067,6 +10412,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoga-wasm-web@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba" + integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA== + zstddec@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.0.2.tgz#57e2f28dd1ff56b750e07d158a43f0611ad9eeb4"