diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index a511ece..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "external/libsushi"] - path = external/libsushi - url = https://github.com/manifoldfinance/libsushi diff --git a/.prettierrc.js b/.prettierrc.js index c421e48..cd09ec4 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -4,8 +4,6 @@ module.exports = { arrowParens: 'always', bracketSpacing: true, endOfLine: 'lf', - jsxBracketSameLine: false, - jsxSingleQuote: false, printWidth: 120, proseWrap: 'never', quoteProps: 'as-needed', @@ -14,4 +12,19 @@ module.exports = { tabWidth: 2, trailingComma: 'all', useTabs: false, + semi: true, + overrides: [ + { + files: '*.md', + options: { + parser: 'markdown', + proseWrap: 'preserve', + printWidth: 100, + tabWidth: 4, + useTabs: false, + singleQuote: false, + bracketSpacing: true, + }, + }, + ], }; diff --git a/docs/Contributing-Guidelines.md b/docs/Contributing-Guidelines.md index 8f3f2cf..7aef58a 100644 --- a/docs/Contributing-Guidelines.md +++ b/docs/Contributing-Guidelines.md @@ -1,5 +1,5 @@ --- -title: Contributing and Community Guidelines +title: Contributing and Community Guidelines version: v2022.06.26 author: The OpenMEV Contributors license: CC-SA-3.0 @@ -7,17 +7,17 @@ license: CC-SA-3.0 # OpenMEV Contributing and Community Guidelines -- [OpenMEV Contributing and Community Guidelines](#openmev-contributing-and-community-guidelines) - * [Preface](#preface) - * [Motivation](#motivation) - * [Principles](#principles) - + [Pro Community](#pro-community) - + [Pro Professionalism](#pro-professionalism) - + [The Ethereum Ecosystem](#the-ethereum-ecosystem) - * [Social Rules](#social-rules) - + [Why have social rules?](#why-have-social-rules) - * [License](#license) - * [Citations / Attributions](#citations) +- [OpenMEV Contributing and Community Guidelines](#openmev-contributing-and-community-guidelines) + - [Preface](#preface) + - [Motivation](#motivation) + - [Principles](#principles) + - [Pro Community](#pro-community) + - [Pro Professionalism](#pro-professionalism) + - [The Ethereum Ecosystem](#the-ethereum-ecosystem) + - [Social Rules](#social-rules) + - [Why have social rules?](#why-have-social-rules) + - [License](#license) + - [Citations / Attributions](#citations) ## Preface @@ -25,15 +25,16 @@ This document is **largely** taken from/inspired by John A. De Goes. More specif ## Motivation -OpenMEV supports the right of every OSS engineer/developer to contribute on their terms, whatever those terms may be. Non-paying users of free software should not get to dictate these terms. Moreover, OpenMEV's stated objective of being a credible neutral org means that we must formalize a Contributing Guideline so that as it expands, there is a codified expectation of behavior from any and all contributors. +OpenMEV supports the right of every OSS engineer/developer to contribute on their terms, whatever those terms may be. Non-paying users of free software should not get to dictate these terms. Moreover, OpenMEV's stated objective of being a credible neutral org means that we must formalize a Contributing Guideline so that as it expands, there is a codified expectation of behavior from any and all contributors. ## Principles + We must recognize that the actions of other organizations, protocols, etc. may have undesirable side effects on the OpenMEV community (and Ethereum at large): -- They undermine the trust that end-users and companies place in Ethereum -- They increase the risk involved in deploying solutions based on Ethereum -- They decrease the network value of Ethereum -- They make OpenMEV look unprofessional to many developers, especially compared within the Ethereum/other ecosystems where major OSS projects would never behave in such a fashion +- They undermine the trust that end-users and companies place in Ethereum +- They increase the risk involved in deploying solutions based on Ethereum +- They decrease the network value of Ethereum +- They make OpenMEV look unprofessional to many developers, especially compared within the Ethereum/other ecosystems where major OSS projects would never behave in such a fashion Effective immediately, OpenMEV shall codify and will support the following: @@ -41,15 +42,15 @@ Effective immediately, OpenMEV shall codify and will support the following: - **Pro-Community**. All OpenMEV projects will gladly accept and host integrations for Flashbots, Eden Network, and other MEV or EVM ecosystems, without consideration of the relationships, dispositions, or politics between these projects and those ecosystems, and they will provide non-discriminatory support for end-users, regardless of their disposition to or affiliation or association with other OpenMEV community members or ecosystems. -- _pro-community_, as OpenMEV hosts integrations for Sushiswap projects _swaps_ and _bentobox_, and hosts integrations for _OlympusDAO_,_LayerZero_ to date. Conflicting incentives should be considered and debated if it is possible that adding support for another project would conflict with existing integrations. However, I believe that making this behavior official will further increase trust and expand integrations, and also clearly set expectations for new projects being integrated into the OpenMEV solution sets. +- _pro-community_, as OpenMEV hosts integrations for Sushiswap projects *swaps* and *bentobox*, and hosts integrations for *OlympusDAO*,_LayerZero_ to date. Conflicting incentives should be considered and debated if it is possible that adding support for another project would conflict with existing integrations. However, I believe that making this behavior official will further increase trust and expand integrations, and also clearly set expectations for new projects being integrated into the OpenMEV solution sets. -### Pro Professionalism +### Pro Professionalism - **Pro-Professionalism**. Although behavior within the OpenMEV organization projects is already governed by the [OpenMEV Code of Conduct](#), I want to strengthen this code of conduct by making it clear that ad hominem and career sabotage have no place within the community. Projects in the OpenMEV organization exist only to help engineers and developers solve problems, regardless of their religion, political affiliation, race, or disposition to or affiliation or association with other OpenMEV community members or ecosystems. -- _pro-professionalism_, within OpenMEV official spaces (Github, Discourse, etc.), I have only ever seen welcoming, inclusive, and non-discriminatory behavior, without ad hominem or career sabotage. But explicitly committing to this high standard of professionalism can only help to set expectations and provide guidance for everyone as the organization continues to grow. +- *pro-professionalism*, within OpenMEV official spaces (Github, Discourse, etc.), I have only ever seen welcoming, inclusive, and non-discriminatory behavior, without ad hominem or career sabotage. But explicitly committing to this high standard of professionalism can only help to set expectations and provide guidance for everyone as the organization continues to grow. -### The Ethereum Ecosystem +### The Ethereum Ecosystem It is not necessary that open source contributors have the same views or even like each other. We must put Ethereum first, and by being pro-community and pro-professionalism, we can find a way to co-exist peacefully inside this big tent, and together, we can, in different ways and with different audiences, show the world that Ethereum is a force to reckon with. @@ -57,11 +58,11 @@ It is not necessary that open source contributors have the same views or even li [These rules are adopted from recurse.com/manual#sec-environment](https://www.recurse.com/manual#sec-environment) -- No well-actually's -- No feigning surprise -- No back-seat driving -- No subtle -isms -- Remember that everyone was new to Ethereum at some point. +- No well-actually's +- No feigning surprise +- No back-seat driving +- No subtle -isms +- Remember that everyone was new to Ethereum at some point. ### Why have social rules? @@ -71,16 +72,15 @@ These rules are designed to help all of us build a pleasant, productive, and rob This document is distributed under a [Creative Commons Attribution-ShareAlike license](https://creativecommons.org/licenses/by-sa/3.0/). - ## Citations > Citations and Attributions The Recurse Community, https://www.recurse.com/about; 2022 June 10 <br /> The Scala Community, https://scala-lang.org/conduct/; 2022 June 10 <br /> -The ZIO Community, https://github.com/zio; 2022 June 10 <br /> -The Rust Code of Conduct, https://www.rust-lang.org/policies/code-of-conduct 2022 June 10 <br /> +The ZIO Community, https://github.com/zio; 2022 June 10 <br /> +The Rust Code of Conduct, https://www.rust-lang.org/policies/code-of-conduct 2022 June 10 <br /> The Node.js Policy on Trolling, https://blog.izs.me/post/30036893703/policy-on-trolling <br /> -["ZIO Professionalism"](https://degoes.net/articles/zio-professionalism), 2022 June 10 <br /> -["Big Tent"](https://degoes.net/articles/big-tent). 2022 June 10 <br /> -["Travis Brown, Abuser"](https://degoes.net/articles/travis-brown-abuser). 2022 June 10 <br /> +["ZIO Professionalism"](https://degoes.net/articles/zio-professionalism), 2022 June 10 <br /> +["Big Tent"](https://degoes.net/articles/big-tent). 2022 June 10 <br /> +["Travis Brown, Abuser"](https://degoes.net/articles/travis-brown-abuser). 2022 June 10 <br /> diff --git a/docs/Ethereum-API/eth_getTransactionCount.md b/docs/Ethereum-API/eth_getTransactionCount.md deleted file mode 100644 index 4faeb34..0000000 --- a/docs/Ethereum-API/eth_getTransactionCount.md +++ /dev/null @@ -1,35 +0,0 @@ -#### eth_getTransactionCount - -##### Description - -Returns the number of transactions sent from an address - -##### Parameters - -| # | Type | Description | -| --- | --- | --- | -| 1 | {[`Data`](#data)} | address to query for sent transactions | -| 2 | {[`Quantity`](#quantity)\|`string`\|[`Block Identifier`](#block-identifier)} | block number, or one of `"latest"`, `"earliest"` or `"pending"`, or a block identifier as described in [`Block Identifier`](#block-identifier) | - -##### Returns - -{[`Quantity`](#quantity)} - number of transactions sent from the specified address - -##### Example - -```sh -# Request -curl -X POST --data '{ - "id": 1337, - "jsonrpc": "2.0", - "method": "eth_getTransactionCount", - "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"] -}' <url> - -# Response -{ - "id": 1337, - "jsonrpc": "2.0", - "result": "0x1" -} -``` diff --git a/docs/RPC-Methods.md b/docs/RPC-Methods.md index 4a406d4..47f8ed7 100644 --- a/docs/RPC-Methods.md +++ b/docs/RPC-Methods.md @@ -10,32 +10,32 @@ version: v2022.05 Transactions that you submit to OpenMEV won't be observable in the public mempool. We provide a flashbots-compatible status api endpoint for both end-users and integrators to use to populate / query user submissions for both transactions and bundles. -- [OpenMEV RPC Status and Responses](#openmev-rpc-status-and-responses) - * [Potential statuses](#potential-statuses) - * [Privacy](#privacy) - * [Response Message](#response-message) - * [`manifold_sendBundle`](#-manifold-sendbundle-) - + [Description](#description) - + [Returns](#returns) - + [Example](#example) - * [`manifold_sendMegabundle`](#-manifold-sendmegabundle-) - + [Description](#description-1) - + [Returns](#returns-1) - + [Example](#example-1) - - [Response](#response) - * [`manifold_sendPrivateRawTransaction`](#-manifold-sendprivaterawtransaction-) - + [Returns](#returns-2) - + [Example](#example-2) - * [`manifold_callBundle`](#-manifold-callbundle-) - + [Returns](#returns-3) - * [Validation and Types](#validation-and-types) - + [`Quantity`](#-quantity-) - + [`Data`](#-data-) - + [`Block Identifier`](#-block-identifier-) - * [Errors](#errors) - * [Authorization Error Codes](#authorization-error-codes) - * [Ethereum Error Codes](#ethereum-error-codes) - + [References](#references) +- [OpenMEV RPC Status and Responses](#openmev-rpc-status-and-responses) + - [Potential statuses](#potential-statuses) + - [Privacy](#privacy) + - [Response Message](#response-message) + - [`manifold_sendBundle`](#-manifold-sendbundle-) + - [Description](#description) + - [Returns](#returns) + - [Example](#example) + - [`manifold_sendMegabundle`](#-manifold-sendmegabundle-) + - [Description](#description-1) + - [Returns](#returns-1) + - [Example](#example-1) + - [Response](#response) + - [`manifold_sendPrivateRawTransaction`](#-manifold-sendprivaterawtransaction-) + - [Returns](#returns-2) + - [Example](#example-2) + - [`manifold_callBundle`](#-manifold-callbundle-) + - [Returns](#returns-3) + - [Validation and Types](#validation-and-types) + - [`Quantity`](#-quantity-) + - [`Data`](#-data-) + - [`Block Identifier`](#-block-identifier-) + - [Errors](#errors) + - [Authorization Error Codes](#authorization-error-codes) + - [Ethereum Error Codes](#ethereum-error-codes) + - [References](#references) ## Potential statuses @@ -61,18 +61,18 @@ To check the status of your transactions query either SecureRPC or the OpenMEV A ```json { - "status": "PENDING", - "hash": "YOUR_TX_HASH", - "maxBlockNumber": "latest", - "transaction": { - "from": "<SENDER>", - "to": "<RECEIVER>", - "gasLimit": "23000", - "maxFeePerGas": "300", - "maxPriorityFeePerGas": "10", - "nonce": "42", - "value": "1333333333337" - } + "status": "PENDING", + "hash": "YOUR_TX_HASH", + "maxBlockNumber": "latest", + "transaction": { + "from": "<SENDER>", + "to": "<RECEIVER>", + "gasLimit": "23000", + "maxFeePerGas": "300", + "maxPriorityFeePerGas": "10", + "nonce": "42", + "value": "1333333333337" + } } ``` @@ -82,12 +82,12 @@ To check the status of your transactions query either SecureRPC or the OpenMEV A Sends a bundle of transactions to the miner. The bundle has to be executed at the beginning of the block (before any other transactions), with bundle transactions executed exactly in the same order as provided in the bundle. -| **Name** | **Type** | **Description** | **Comment** | -| --- | --- | --- | --- | -| `txs` | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | a no-op in the light mode | -| `blockNumber` | `Quantity` | Exact block number at which the bundle can be included. | bundle is evicted after the block | -| `minTimestamp` | `Quantity` | Minimum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | -| `maxTimestamp` | `Quantity` | Maximum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | +| **Name** | **Type** | **Description** | **Comment** | +| ------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| `txs` | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | a no-op in the light mode | +| `blockNumber` | `Quantity` | Exact block number at which the bundle can be included. | bundle is evicted after the block | +| `minTimestamp` | `Quantity` | Minimum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | +| `maxTimestamp` | `Quantity` | Maximum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | | `revertingTxHashes` | Array<`Data`> | Array of tx hashes within the bundle that are allowed to cause the EVM execution to revert without preventing the bundle inclusion in a block. | ### Returns @@ -130,14 +130,14 @@ curl -X POST -H 'Content-Type: application/json' --data '{ Sends a megabundle to the miner. The megabundle has to be executed at the beginning of the block (before any other transactions), with bundle transactions executed exactly in the same order as provided in the bundle. Can only be called by a relay listed in the `miner.trustedrelays` config. -| **Name** | **Type** | **Description** | **Comment** | -| --- | --- | --- | --- | -| `txs` | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | a no-op in the light mode | -| `blockNumber` | `Quantity` | Exact block number at which the bundle can be included. | bundle is evicted after the block | -| `minTimestamp` | `Quantity` | Minimum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | -| `maxTimestamp` | `Quantity` | Maximum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | -| `revertingTxHashes` | Array<`Data`> | Array of tx hashes within the bundle that are allowed to cause the EVM execution to revert without preventing the bundle inclusion in a block. | -| `relaySignature` | Array<`Data`> | An secp256k1 signature signed with an address from the `miner.trustedrelays`. Message signed is a Keccak hash of RLP serialized sequence that contains the following items: array of txs (a sequence of byte arrays representing RLP serialized txs); `minTimestamp` serialized as an int256, like in the devp2p specification; `maxTimestamp` serialized as an int256, like in the devp2p specification; `revertingTxHashes` serialized as an array of byte arrays. | +| **Name** | **Type** | **Description** | **Comment** | +| ------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| `txs` | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | a no-op in the light mode | +| `blockNumber` | `Quantity` | Exact block number at which the bundle can be included. | bundle is evicted after the block | +| `minTimestamp` | `Quantity` | Minimum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | +| `maxTimestamp` | `Quantity` | Maximum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | +| `revertingTxHashes` | Array<`Data`> | Array of tx hashes within the bundle that are allowed to cause the EVM execution to revert without preventing the bundle inclusion in a block. | +| `relaySignature` | Array<`Data`> | An secp256k1 signature signed with an address from the `miner.trustedrelays`. Message signed is a Keccak hash of RLP serialized sequence that contains the following items: array of txs (a sequence of byte arrays representing RLP serialized txs); `minTimestamp` serialized as an int256, like in the devp2p specification; `maxTimestamp` serialized as an int256, like in the devp2p specification; `revertingTxHashes` serialized as an array of byte arrays. | ### Returns @@ -171,9 +171,9 @@ curl -X POST -H 'Content-Type: application/json' --data '{ ```json { - "id": 1337, - "jsonrpc": "2.0", - "result": true + "id": 1337, + "jsonrpc": "2.0", + "result": true } ``` @@ -216,112 +216,107 @@ Simulate a bundle of transactions at the top of a block. After retrieving the block specified in the `blockNrOrHash` it takes the same `blockhash`, `gasLimit`, `difficulty`, same `timestamp` unless the `blockTimestamp` property is specified, and increases the block number by `1`. `manifold_callBundle` will timeout after `5` seconds. -| **Name** | **Type** | **Description** | -| --- | --- | --- | -| `txs` | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | -| `blockNumber` | `Quantity` | A hex encoded block number for which this bundle is valid on | +| **Name** | **Type** | **Description** | +| ------------------ | ------------------------------------ | ----------------------------------------------------------------------------------------------- | +| `txs` | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | +| `blockNumber` | `Quantity` | A hex encoded block number for which this bundle is valid on | | `stateBlockNumber` | `Quantity\|string\|Block Identifier` | Either a hex encoded number or a {Block Identifier} for which state to base this simulation on. | -| `timestamp` | `Quantity` | Block timestamp to be used in replacement of the timestamp taken from the parent block. | +| `timestamp` | `Quantity` | Block timestamp to be used in replacement of the timestamp taken from the parent block. | ### Returns Map<`Data`, "error|value" : `Data`> - a mapping from transaction hashes to execution results with error or output (value) for each of the transactions - ## Validation and Types Below type description can also be found in [EIP-1474](https://eips.ethereum.org/EIPS/eip-1474) - ### `Quantity` Values of a field of `QUANTITY` type **MUST** be encoded as a hexadecimal string with a `0x` prefix and the leading 0s stripped (except for the case of encoding the value `0`) matching the regular expression `^0x(?:0|(?:[a-fA-F1-9][a-fA-F0-9]*))$`. -- A `Quantity` value **MUST** be hex-encoded. -- A `Quantity` value **MUST** be "0x"-prefixed. -- A `Quantity` value **MUST** be expressed using the fewest possible hex digits per byte. -- A `Quantity` value **MUST** express zero as "0x0". +- A `Quantity` value **MUST** be hex-encoded. +- A `Quantity` value **MUST** be "0x"-prefixed. +- A `Quantity` value **MUST** be expressed using the fewest possible hex digits per byte. +- A `Quantity` value **MUST** express zero as "0x0". ### `Data` Values of a field of `DATA` type **MUST** be encoded as a hexadecimal string with a `0x` prefix matching the regular expression `^0x(?:[a-fA-F0-9]{2})*$`. -- A `Data` value **MUST** be hex-encoded. -- A `Data` value **MUST** be “0x”-prefixed. -- A `Data` value **MUST** be expressed using two hex digits per byte. +- A `Data` value **MUST** be hex-encoded. +- A `Data` value **MUST** be “0x”-prefixed. +- A `Data` value **MUST** be expressed using two hex digits per byte. ### `Block Identifier` Since there is no way to clearly distinguish between a `Data` parameter and a `Quantity` parameter, [EIP-1898](https://eips.ethereum.org/EIPS/eip-1898) provides a format to specify a block either using the block hash or block number. The block identifier is a JSON `object` with the following fields: -| **Position** | **Name** | **Type** | **Description** | -| --- | --- | --- | --- | -| `0A` | `blockNumber` | `Quantity` | The block in the canonical chain with this number | -| `0B` | `blockHash` | `Data` | The block uniquely identified by this hash. The blockNumber and blockHash properties are mutually exclusive; exactly one of them must be set. | -| `1B` | `requireCanonical` | `boolean` | (optional) Whether to throw an error if the block is not in the canonical chain as described below. Only allowed in conjunction with the blockHash tag. Defaults to false. | +| **Position** | **Name** | **Type** | **Description** | +| ------------ | ------------------ | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `0A` | `blockNumber` | `Quantity` | The block in the canonical chain with this number | +| `0B` | `blockHash` | `Data` | The block uniquely identified by this hash. The blockNumber and blockHash properties are mutually exclusive; exactly one of them must be set. | +| `1B` | `requireCanonical` | `boolean` | (optional) Whether to throw an error if the block is not in the canonical chain as described below. Only allowed in conjunction with the blockHash tag. Defaults to false. | If the block is not found, the callee SHOULD raise a JSON-RPC error (the recommended error code is `-32001: Resource not found`. If the tag is `blockHash` and `requireCanonical` is `true`, the callee SHOULD additionally raise a JSON-RPC error if the block is not in the canonical chain (the recommended error code is `-32000: Invalid input` and in any case should be different than the error code for the block not found case so that the caller can distinguish the cases). The block-not-found check SHOULD take precedence over the block-is-canonical check, so that if the block is not found the callee raises block-not-found rather than block-not-canonical. - ## Errors The list of error codes introduced by this specification can be found below. -| Code | Message | Meaning | -| - | - | - | -| -32700 | Parse error | Invalid JSON was received by the server. | -| -32600 | Invalid Request | The JSON sent is not a valid Request object. | -| -32601 | Method not found | The method does not exist / is not available. | -| -32602 | Invalid params | Invalid method parameter(s). | -| -32603 | Internal error | Internal JSON-RPC error. | -| -32000 | Server error | Generic client error while processing request. | -| -38001 | Unknown payload | Payload does not exist / is not available. | +| Code | Message | Meaning | +| ------ | -------------------------- | ---------------------------------------------- | +| -32700 | Parse error | Invalid JSON was received by the server. | +| -32600 | Invalid Request | The JSON sent is not a valid Request object. | +| -32601 | Method not found | The method does not exist / is not available. | +| -32602 | Invalid params | Invalid method parameter(s). | +| -32603 | Internal error | Internal JSON-RPC error. | +| -32000 | Server error | Generic client error while processing request. | +| -38001 | Unknown payload | Payload does not exist / is not available. | | -38002 | Invalid payload attributes | Payload attributes are invalid / inconsistent. | Each error returns a `null` `data` value, except `-32000` which returns the `data` object with a `err` member that explains the error encountered. - - ## Authorization Error Codes -| Code | Possible Return message | Description | -| --- | --- | --- | -| 1 | Unauthorized | Should be used when some action is not authorized, e.g. sending from a locked account. | -| 2 | Action not allowed | Should be used when some action is not allowed, e.g. preventing an action, while another depending action is processing on, like sending again when a confirmation popup is shown to the user (?). | -| 3 | Execution error | Will contain a subset of custom errors in the data field. See below. | +| Code | Possible Return message | Description | +| ---- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | Unauthorized | Should be used when some action is not authorized, e.g. sending from a locked account. | +| 2 | Action not allowed | Should be used when some action is not allowed, e.g. preventing an action, while another depending action is processing on, like sending again when a confirmation popup is shown to the user (?). | +| 3 | Execution error | Will contain a subset of custom errors in the data field. See below. | ## Ethereum Error Codes Custom error `3` can contain custom error(s) to further explain what went wrong. They will be contained in the `data` field of the RPC error message as follows: -| Code | Possible Return message | Description | -| --- | --- | --- | -| 100 | X doesn’t exist | Should be used when something which should be there is not found. (Doesn’t apply to eth_getTransactionBy\_ and eth_getBlock\_. They return a success with value `null`) | -| 101 | Requires ether | Should be used for actions which require somethin else, e.g. gas or a value. | -| 102 | Gas too low | Should be used when a to low value of gas was given. | -| 103 | Gas limit exceeded | Should be used when a limit is exceeded, e.g. for the gas limit in a block. | -| 104 | Rejected | Should be used when an action was rejected, e.g. because of its content (too long contract code, containing wrong characters ?, should differ from `-32602` - Invalid params). | -| 105 | Ether too low | Should be used when a to low value of Ether was given. | +| Code | Possible Return message | Description | +| ---- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 100 | X doesn’t exist | Should be used when something which should be there is not found. (Doesn’t apply to eth_getTransactionBy\_ and eth_getBlock\_. They return a success with value `null`) | +| 101 | Requires ether | Should be used for actions which require somethin else, e.g. gas or a value. | +| 102 | Gas too low | Should be used when a to low value of gas was given. | +| 103 | Gas limit exceeded | Should be used when a limit is exceeded, e.g. for the gas limit in a block. | +| 104 | Rejected | Should be used when an action was rejected, e.g. because of its content (too long contract code, containing wrong characters ?, should differ from `-32602` - Invalid params). | +| 105 | Ether too low | Should be used when a to low value of Ether was given. | | Code | Possible Return message | Description | | ---- | ----------------------- | ----------------------------------------------------------------------- | | 106 | Timeout | Should be used when an action timedout. | | 107 | Conflict | Should be used when an action conflicts with another (ongoing?) action. | -| **Parameters** | **Description** | -| --- | --- | -| txs | Array[String], A list of signed transactions to execute in an atomic bundle | -| blockNumber | String, a hex encoded block number for which this bundle is valid on | -| minTimestamp(Optional) | Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch | -| maxTimestamp(Optional) | Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch | -| revertingTxHashes(Optional) | Array[String], list of tx hashes within the bundle that are allowed to revert | +| **Parameters** | **Description** | +| --------------------------- | --------------------------------------------------------------------------------------------- | +| txs | Array[String], A list of signed transactions to execute in an atomic bundle | +| blockNumber | String, a hex encoded block number for which this bundle is valid on | +| minTimestamp(Optional) | Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch | +| maxTimestamp(Optional) | Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch | +| revertingTxHashes(Optional) | Array[String], list of tx hashes within the bundle that are allowed to revert | ### References -- [EIP-1474](https://eips.ethereum.org/EIPS/eip-1474) -- [Flashbots v0.6](https://github.com/flashbots/flashbots-docs/blob/main/docs/flashbots-auction/miners/mev-geth-spec/v06-rpc.mdx) -- [EIP 1474 Remote procedure call specification](https://eips.ethereum.org/EIPS/eip-1474) -- [v0.6.0, flashbots documentation](https://raw.githubusercontent.com/flashbots/flashbots-docs/main/docs/flashbots-auction/miners/mev-geth-spec/v06-rpc.mdx) +- [EIP-1474](https://eips.ethereum.org/EIPS/eip-1474) +- [Flashbots v0.6](https://github.com/flashbots/flashbots-docs/blob/main/docs/flashbots-auction/miners/mev-geth-spec/v06-rpc.mdx) +- [EIP 1474 Remote procedure call specification](https://eips.ethereum.org/EIPS/eip-1474) +- [v0.6.0, flashbots documentation](https://raw.githubusercontent.com/flashbots/flashbots-docs/main/docs/flashbots-auction/miners/mev-geth-spec/v06-rpc.mdx) -- [v1.0.0-alpha.9, Ethereum Execution API](https://github.com/ethereum/execution-apis) +- [v1.0.0-alpha.9, Ethereum Execution API](https://github.com/ethereum/execution-apis) diff --git a/docs/guides/bundles-adv.md b/docs/guides/bundles-adv.md index 6f1a7e4..0ddceff 100644 --- a/docs/guides/bundles-adv.md +++ b/docs/guides/bundles-adv.md @@ -36,12 +36,12 @@ Typescript function `getDefaultRelaySigningKey` searches for your key, if unable ```typescript export function getDefaultRelaySigningKey(): string { - console.warn( - '[#Error]: BUNDLE_SIGNING_KEY environment variable. Creating random signing key, this searcher will not be building a reputation for next run', - ); - const key = Wallet.createRandom().privateKey; - console.log(key); - return key; + console.warn( + "[#Error]: BUNDLE_SIGNING_KEY environment variable. Creating random signing key, this searcher will not be building a reputation for next run", + ); + const key = Wallet.createRandom().privateKey; + console.log(key); + return key; } ``` diff --git a/docs/guides/cheatsheet.md b/docs/guides/cheatsheet.md index cf7d97b..b6a0067 100644 --- a/docs/guides/cheatsheet.md +++ b/docs/guides/cheatsheet.md @@ -82,7 +82,11 @@ Simulate bundle: ```ts const signedTransactions = await flashbotsProvider.signBundle(transactionBundle); -const simulation = await flashbotsProvider.simulate(signedTransactions, targetBlockNumber, targetBlockNumber + 1); +const simulation = await flashbotsProvider.simulate( + signedTransactions, + targetBlockNumber, + targetBlockNumber + 1, +); console.log(JSON.stringify(simulation, null, 2)); ``` @@ -93,10 +97,10 @@ Get conflicting bundles for a prior block: ```ts const signedTransactions = await flashbotsProvider.signBundle(transactionBundle); console.log( - await flashbotsProvider.getConflictingBundle( - signedTransactions, - 13140328, // blockNumber - ), + await flashbotsProvider.getConflictingBundle( + signedTransactions, + 13140328, // blockNumber + ), ); ``` @@ -106,9 +110,9 @@ Get submission time data and compare to block time: ```ts console.log( - await flashbotsProvider.getBundleStats( - '0x123456789abcdef123456789abcdef123456789abcdef123456789abcdef1234', - 13509887, - ), + await flashbotsProvider.getBundleStats( + "0x123456789abcdef123456789abcdef123456789abcdef123456789abcdef1234", + 13509887, + ), ); ``` diff --git a/docs/guides/creating-bundles.md b/docs/guides/creating-bundles.md index 14b8257..3d01fda 100644 --- a/docs/guides/creating-bundles.md +++ b/docs/guides/creating-bundles.md @@ -26,10 +26,10 @@ X-Manifold-Signature: 0x1234:0xabcd" \ ```json { - "jsonrpc": "2.0", - "method": "eth_sendBundle", - "params": [], - "id": 1 + "jsonrpc": "2.0", + "method": "eth_sendBundle", + "params": [], + "id": 1 } ``` @@ -40,11 +40,11 @@ The signature is calculated by taking the [EIP-191](https://eips.ethereum.org/EI Here's an example using ethers.js: ```ts twoslash -import { Wallet, utils } from 'ethers'; -const privateKey = '0x1234'; +import { Wallet, utils } from "ethers"; +const privateKey = "0x1234"; const wallet = new Wallet(privateKey); const body = '{"jsonrpc":"2.0","method":"eth_sendBundle","params":[{see above}],"id":1}'; // ^? -const signature = wallet.address + ':' + wallet.signMessage(utils.id(body)); +const signature = wallet.address + ":" + wallet.signMessage(utils.id(body)); // ^? ``` diff --git a/docs/guides/gas-pricing.md b/docs/guides/gas-pricing.md index 34e26da..a19d79b 100644 --- a/docs/guides/gas-pricing.md +++ b/docs/guides/gas-pricing.md @@ -21,10 +21,10 @@ curl -s -L api.txprice.com | jq .blockPrices[0].estimatedPrices[1] ```json { - "confidence": 95, - "price": 107, - "maxPriorityFeePerGas": 2.52, - "maxFeePerGas": 212.92 + "confidence": 95, + "price": 107, + "maxPriorityFeePerGas": 2.52, + "maxFeePerGas": 212.92 } ``` @@ -36,51 +36,51 @@ Returns a range of confidence intervals for gas prices needed to qualify a trans ```jsonc { - "system": "ethereum", - "network": "main", - "unit": "gwei", - "maxPrice": 123, - "currentBlockNumber": 13005095, - "msSinceLastBlock": 3793, - "blockPrices": [ - { - "blockNumber": 13005096, - "baseFeePerGas": 94.647990462, - "estimatedTransactionCount": 137, - "estimatedPrices": [ - // json.blockPrices[0].estimatedPrices[0] + "system": "ethereum", + "network": "main", + "unit": "gwei", + "maxPrice": 123, + "currentBlockNumber": 13005095, + "msSinceLastBlock": 3793, + "blockPrices": [ { - "confidence": 99, // json.blockPrices[0].estimatedPrices[0].confidence - "price": 104, // json.blockPrices[0].estimatedPrices[0].price - "maxPriorityFeePerGas": 9.86, // json.blockPrices[0].estimatedPrices[0].maxFeePerGas - "maxFeePerGas": 199.16 // json.blockPrices[0].estimatedPrices[0].maxFeePerGas - }, - { - "confidence": 95, - "price": 99, - "maxPriorityFeePerGas": 5.06, - "maxFeePerGas": 194.35 - }, - { - "confidence": 90, - "price": 98, - "maxPriorityFeePerGas": 4.16, - "maxFeePerGas": 193.45 - }, - { - "confidence": 80, - "price": 97, - "maxPriorityFeePerGas": 2.97, - "maxFeePerGas": 192.27 - }, - { - "confidence": 70, - "price": 96, - "maxPriorityFeePerGas": 1.74, - "maxFeePerGas": 191.04 + "blockNumber": 13005096, + "baseFeePerGas": 94.647990462, + "estimatedTransactionCount": 137, + "estimatedPrices": [ + // json.blockPrices[0].estimatedPrices[0] + { + "confidence": 99, // json.blockPrices[0].estimatedPrices[0].confidence + "price": 104, // json.blockPrices[0].estimatedPrices[0].price + "maxPriorityFeePerGas": 9.86, // json.blockPrices[0].estimatedPrices[0].maxFeePerGas + "maxFeePerGas": 199.16 // json.blockPrices[0].estimatedPrices[0].maxFeePerGas + }, + { + "confidence": 95, + "price": 99, + "maxPriorityFeePerGas": 5.06, + "maxFeePerGas": 194.35 + }, + { + "confidence": 90, + "price": 98, + "maxPriorityFeePerGas": 4.16, + "maxFeePerGas": 193.45 + }, + { + "confidence": 80, + "price": 97, + "maxPriorityFeePerGas": 2.97, + "maxFeePerGas": 192.27 + }, + { + "confidence": 70, + "price": 96, + "maxPriorityFeePerGas": 1.74, + "maxFeePerGas": 191.04 + } + ] } - ] - } - ] + ] } ``` diff --git a/docs/guides/rpc-spec.md b/docs/guides/rpc-spec.md index fa28fe7..16ed35a 100644 --- a/docs/guides/rpc-spec.md +++ b/docs/guides/rpc-spec.md @@ -7,7 +7,7 @@ version: v2022.05 > Documentation for both SecureRpc/OpenMEV -This API aims to be flashbots **compatible** and ethereum execution API **compatible**. +This API aims to be flashbots **compatible** and ethereum execution API **compatible**. ## eth_sendBundle @@ -15,12 +15,12 @@ This API aims to be flashbots **compatible** and ethereum execution API **compat Sends a bundle of transactions to the miner. The bundle has to be executed at the beginning of the block (before any other transactions), with bundle transactions executed exactly in the same order as provided in the bundle. During the Flashbots Alpha this is only called by the Flashbots relay. -| Name | Type | Description | Comment | -| --- | --- | --- | --- | -| txs | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | a no-op in the light mode | -| blockNumber | `Quantity` | Exact block number at which the bundle can be included. | bundle is evicted after the block | -| minTimestamp | `Quantity` | Minimum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | -| maxTimestamp | `Quantity` | Maximum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | +| Name | Type | Description | Comment | +| ----------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| txs | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | a no-op in the light mode | +| blockNumber | `Quantity` | Exact block number at which the bundle can be included. | bundle is evicted after the block | +| minTimestamp | `Quantity` | Minimum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | +| maxTimestamp | `Quantity` | Maximum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | | revertingTxHashes | Array<`Data`> | Array of tx hashes within the bundle that are allowed to cause the EVM execution to revert without preventing the bundle inclusion in a block. | ### Returns @@ -63,14 +63,14 @@ curl -X POST -H 'Content-Type: application/json' --data '{ Sends a megabundle to the miner. The megabundle has to be executed at the beginning of the block (before any other transactions), with bundle transactions executed exactly in the same order as provided in the bundle. Can only be called by a relay listed in the `miner.trustedrelays` config. -| Name | Type | Description | Comment | -| --- | --- | --- | --- | -| txs | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | a no-op in the light mode | -| blockNumber | `Quantity` | Exact block number at which the bundle can be included. | bundle is evicted after the block | -| minTimestamp | `Quantity` | Minimum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | -| maxTimestamp | `Quantity` | Maximum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | -| revertingTxHashes | Array<`Data`> | Array of tx hashes within the bundle that are allowed to cause the EVM execution to revert without preventing the bundle inclusion in a block. | -| relaySignature | Array<`Data`> | An secp256k1 signature signed with an address from the `miner.trustedrelays`. Message signed is a Keccak hash of RLP serialized sequence that contains the following items: array of txs (a sequence of byte arrays representing RLP serialized txs); minTimestamp serialized as an int256, like in the devp2p specification; maxTimestamp serialized as an int256, like in the devp2p specification; revertingTxHashes serialized as an array of byte arrays. | +| Name | Type | Description | Comment | +| ----------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| txs | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | a no-op in the light mode | +| blockNumber | `Quantity` | Exact block number at which the bundle can be included. | bundle is evicted after the block | +| minTimestamp | `Quantity` | Minimum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | +| maxTimestamp | `Quantity` | Maximum (inclusive) block timestamp at which the bundle can be included. If this value is 0 then any timestamp is acceptable. | +| revertingTxHashes | Array<`Data`> | Array of tx hashes within the bundle that are allowed to cause the EVM execution to revert without preventing the bundle inclusion in a block. | +| relaySignature | Array<`Data`> | An secp256k1 signature signed with an address from the `miner.trustedrelays`. Message signed is a Keccak hash of RLP serialized sequence that contains the following items: array of txs (a sequence of byte arrays representing RLP serialized txs); minTimestamp serialized as an int256, like in the devp2p specification; maxTimestamp serialized as an int256, like in the devp2p specification; revertingTxHashes serialized as an array of byte arrays. | ### Returns @@ -150,12 +150,12 @@ Simulate a bundle of transactions at the top of a block. After retrieving the block specified in the `blockNrOrHash` it takes the same `blockhash`, `gasLimit`, `difficulty`, same `timestamp` unless the `blockTimestamp` property is specified, and increases the block number by `1`. `eth_callBundle` will timeout after `5` seconds. -| Name | Type | Description | -| --- | --- | --- | -| txs | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | -| blockNumber | `Quantity` | A hex encoded block number for which this bundle is valid on | +| Name | Type | Description | +| ---------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------- | +| txs | `Array<Data>` | Array of signed transactions (`eth_sendRawTransaction` style, signed and RLP-encoded) | +| blockNumber | `Quantity` | A hex encoded block number for which this bundle is valid on | | stateBlockNumber | `Quantity\|string\|Block Identifier` | Either a hex encoded number or a {Block Identifier} for which state to base this simulation on. | -| timestamp | `Quantity` | Block timestamp to be used in replacement of the timestamp taken from the parent block. | +| timestamp | `Quantity` | Block timestamp to be used in replacement of the timestamp taken from the parent block. | ### Returns @@ -220,6 +220,7 @@ curl -X POST -H 'Content-Type: application/json' --data '{ } } ``` + ## Validation and Types Below type description can also be found in [EIP-1474](https://eips.ethereum.org/EIPS/eip-1474) @@ -228,32 +229,31 @@ Below type description can also be found in [EIP-1474](https://eips.ethereum.org Values of a field of `QUANTITY` type **MUST** be encoded as a hexadecimal string with a `0x` prefix and the leading 0s stripped (except for the case of encoding the value `0`) matching the regular expression `^0x(?:0|(?:[a-fA-F1-9][a-fA-F0-9]*))$`. -- A `Quantity` value **MUST** be hex-encoded. -- A `Quantity` value **MUST** be "0x"-prefixed. -- A `Quantity` value **MUST** be expressed using the fewest possible hex digits per byte. -- A `Quantity` value **MUST** express zero as "0x0". +- A `Quantity` value **MUST** be hex-encoded. +- A `Quantity` value **MUST** be "0x"-prefixed. +- A `Quantity` value **MUST** be expressed using the fewest possible hex digits per byte. +- A `Quantity` value **MUST** express zero as "0x0". ### `Data` Values of a field of `DATA` type **MUST** be encoded as a hexadecimal string with a `0x` prefix matching the regular expression `^0x(?:[a-fA-F0-9]{2})*$`. -- A `Data` value **MUST** be hex-encoded. -- A `Data` value **MUST** be “0x”-prefixed. -- A `Data` value **MUST** be expressed using two hex digits per byte. +- A `Data` value **MUST** be hex-encoded. +- A `Data` value **MUST** be “0x”-prefixed. +- A `Data` value **MUST** be expressed using two hex digits per byte. ### `Block Identifier` Since there is no way to clearly distinguish between a `Data` parameter and a `Quantity` parameter, [EIP-1898](https://eips.ethereum.org/EIPS/eip-1898) provides a format to specify a block either using the block hash or block number. The block identifier is a JSON `object` with the following fields: -| Position | Name | Type | Description | -| --- | --- | --- | --- | -| 0A | blockNumber | `Quantity` | The block in the canonical chain with this number | -| 0B | blockHash | `Data` | The block uniquely identified by this hash. The blockNumber and blockHash properties are mutually exclusive; exactly one of them must be set. | -| 1B | requireCanonical | `boolean` | (optional) Whether or not to throw an error if the block is not in the canonical chain as described below. Only allowed in conjunction with the blockHash tag. Defaults to false. | +| Position | Name | Type | Description | +| -------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0A | blockNumber | `Quantity` | The block in the canonical chain with this number | +| 0B | blockHash | `Data` | The block uniquely identified by this hash. The blockNumber and blockHash properties are mutually exclusive; exactly one of them must be set. | +| 1B | requireCanonical | `boolean` | (optional) Whether or not to throw an error if the block is not in the canonical chain as described below. Only allowed in conjunction with the blockHash tag. Defaults to false. | If the block is not found, the callee SHOULD raise a JSON-RPC error (the recommended error code is `-32001: Resource not found`. If the tag is `blockHash` and `requireCanonical` is `true`, the callee SHOULD additionally raise a JSON-RPC error if the block is not in the canonical chain (the recommended error code is `-32000: Invalid input` and in any case should be different than the error code for the block not found case so that the caller can distinguish the cases). The block-not-found check SHOULD take precedence over the block-is-canonical check, so that if the block is not found the callee raises block-not-found rather than block-not-canonical. - ## Errors The list of error codes introduced by this specification can be found below. @@ -262,7 +262,7 @@ The list of error codes introduced by this specification can be found below. | -32700 | Parse error | Invalid JSON was received by the server. | | -32600 | Invalid Request | The JSON sent is not a valid Request object. | | -32601 | Method not found | The method does not exist / is not available. | -| -32602 | Invalid params | Invalid method parameter(s). | +| -32602 | Invalid params | Invalid method parameter(s). | | -32603 | Internal error | Internal JSON-RPC error. | | -32000 | Server error | Generic client error while processing request. | | -38001 | Unknown payload | Payload does not exist / is not available. | @@ -270,20 +270,19 @@ The list of error codes introduced by this specification can be found below. Each error returns a `null` `data` value, except `-32000` which returns the `data` object with a `err` member that explains the error encountered. -| **Parameters** | **Description** | -| --- | --- | -| txs | Array[String], A list of signed transactions to execute in an atomic bundle | -| blockNumber | String, a hex encoded block number for which this bundle is valid on | -| minTimestamp(Optional) | Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch | -| maxTimestamp(Optional) | Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch | -| revertingTxHashes(Optional) | Array[String], list of tx hashes within the bundle that are allowed to revert | - +| **Parameters** | **Description** | +| --------------------------- | --------------------------------------------------------------------------------------------- | +| txs | Array[String], A list of signed transactions to execute in an atomic bundle | +| blockNumber | String, a hex encoded block number for which this bundle is valid on | +| minTimestamp(Optional) | Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch | +| maxTimestamp(Optional) | Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch | +| revertingTxHashes(Optional) | Array[String], list of tx hashes within the bundle that are allowed to revert | -### References +### References -- [EIP-1474](https://eips.ethereum.org/EIPS/eip-1474) -- [Flashbots v0.6](https://github.com/flashbots/flashbots-docs/blob/main/docs/flashbots-auction/miners/mev-geth-spec/v06-rpc.mdx) -- [EIP 1474 Remote procedure call specification](https://eips.ethereum.org/EIPS/eip-1474) -- [v0.6.0, flashbots documentation](https://raw.githubusercontent.com/flashbots/flashbots-docs/main/docs/flashbots-auction/miners/mev-geth-spec/v06-rpc.mdx) +- [EIP-1474](https://eips.ethereum.org/EIPS/eip-1474) +- [Flashbots v0.6](https://github.com/flashbots/flashbots-docs/blob/main/docs/flashbots-auction/miners/mev-geth-spec/v06-rpc.mdx) +- [EIP 1474 Remote procedure call specification](https://eips.ethereum.org/EIPS/eip-1474) +- [v0.6.0, flashbots documentation](https://raw.githubusercontent.com/flashbots/flashbots-docs/main/docs/flashbots-auction/miners/mev-geth-spec/v06-rpc.mdx) -- [v1.0.0-alpha.9, Ethereum Execution API](https://github.com/ethereum/execution-apis) +- [v1.0.0-alpha.9, Ethereum Execution API](https://github.com/ethereum/execution-apis) diff --git a/docs/guides/send-private-tx.md b/docs/guides/send-private-tx.md index 41dcd66..ee8ce15 100644 --- a/docs/guides/send-private-tx.md +++ b/docs/guides/send-private-tx.md @@ -15,32 +15,32 @@ These methods are currently implemented in the `libmev` library. ```javascript // ethers.js const signer = Wallet.createRandom(); -const provider = new providers.JsonRpcProvider('http://localhost:8545'); +const provider = new providers.JsonRpcProvider("http://localhost:8545"); const flashbotsProvider = await FlashbotsBundleProvider.create(provider, signer); const transaction = { - from: signer.address, - to: signer.address, - value: '0x42', - gasPrice: BigNumber.from(99).mul(1e9), - gasLimit: BigNumber.from(21000), + from: signer.address, + to: signer.address, + value: "0x42", + gasPrice: BigNumber.from(99).mul(1e9), + gasLimit: BigNumber.from(21000), }; const res = await flashbotsProvider.sendPrivateTransaction( - { - transaction, - signer, - }, - { - maxBlockNumber: (await provider.getBlockNumber()) + 5, // only allow tx to be mined for the next 5 blocks - }, + { + transaction, + signer, + }, + { + maxBlockNumber: (await provider.getBlockNumber()) + 5, // only allow tx to be mined for the next 5 blocks + }, ); const waitRes = await res.wait(); if (waitRes === FlashbotsTransactionResolution.TransactionIncluded) { - console.log('Private transaction successfully mined.'); + console.log("Private transaction successfully mined."); } else if (waitRes === FlashbotsTransactionResolution.TransactionDropped) { - console.log('Private transaction was not mined and has been removed from the system.'); + console.log("Private transaction was not mined and has been removed from the system."); } ``` @@ -50,15 +50,15 @@ To send a _single_ transaction without having to send it as a bundle, use the `s ```js const tx = { - from: wallet.address, - to: wallet.address, - value: '0x42', - gasPrice: BigNumber.from(99).mul(1e9), // 99 gwei - gasLimit: BigNumber.from(21000), + from: wallet.address, + to: wallet.address, + value: "0x42", + gasPrice: BigNumber.from(99).mul(1e9), // 99 gwei + gasLimit: BigNumber.from(21000), }; const privateTx = { - transaction: tx, - signer: wallet, + transaction: tx, + signer: wallet, }; const res = await flashbotsProvider.sendPrivateTransaction(privateTx); ``` @@ -70,5 +70,8 @@ Optionally, you can set the following parameters to fine-tune your submission: const maxBlockNumber = (await provider.getBlockNumber()) + 10; // timestamp for simulations const minTimestamp = 1645753192; -const res = await flashbotsProvider.sendPrivateTransaction(privateTx, { maxBlockNumber, minTimestamp }); +const res = await flashbotsProvider.sendPrivateTransaction(privateTx, { + maxBlockNumber, + minTimestamp, +}); ``` diff --git a/docs/introduction.md b/docs/introduction.md index a665655..d10dff8 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -14,22 +14,22 @@ OpenMEV aims to provide a credible neutral platform for facilitating both aggreg #### Example use cases include: -- Users that would like to communicate their preferred transaction order within a block. -- Account abstraction via private mempool +- Users that would like to communicate their preferred transaction order within a block. +- Account abstraction via private mempool -#### SecureRpc.com +#### SecureRpc.com OpenMEV is built on top of SecureRPC. SecureRPC provides users with an accessible, convenient and secure infrastructure for transaction routing and execution. -- Accessible: allow ordinary users to easily discover the trading risk and value on the network. -- Convenient: enable backrunning swaps automatically so that more opportunities to capture profits at a lower cost. -- Secure: make transactions on the blockchain network more secure and private. +- Accessible: allow ordinary users to easily discover the trading risk and value on the network. +- Convenient: enable backrunning swaps automatically so that more opportunities to capture profits at a lower cost. +- Secure: make transactions on the blockchain network more secure and private. ### What is `credible neutrality`? > "...that it is not just neutrality that is required here, it is credible neutrality. That is, it is not just enough for a mechanism to not be designed to favor specific people or outcomes over others; it's also crucially important for a mechanism to be able to convince a large and diverse group of people that the mechanism at least makes that basic effort to be fair." > -> - Vitalik Buterin, [credible neutrality as a guiding principle](https://nakamoto.com/credible-neutrality/) +> - Vitalik Buterin, [credible neutrality as a guiding principle](https://nakamoto.com/credible-neutrality/) This ethos is at the heart of OpenMEV. Part of establishing credible neutrality is having a clear and comprehensive rule book that regulates off-chain behavior and activities. Our assumption concerning governance is that methods and processes that work in legacy markets may not be applicable in adversarial environments such as permissionless blockchains. With that understanding it is important not to rely solely on such systems and mechanics long term. @@ -37,7 +37,7 @@ This ethos is at the heart of OpenMEV. Part of establishing credible neutrality :::info [MEV or Maximal Extractable Value](https://medium.com/-research/we-live-in-a-mempool-backrunning-the-mev-crisis-a4ea0b493b05) is the value of the ability to order transactions within a block or blocks. -- Tom Schmidt, Dragonfly Capital ::: +- Tom Schmidt, Dragonfly Capital ::: <br /> diff --git a/docs/resources.md b/docs/resources.md index 5e8c0a5..e8dc550 100644 --- a/docs/resources.md +++ b/docs/resources.md @@ -6,14 +6,14 @@ sidebar_position: 9 ## Github repositories -- Organization: https://github.com/manifoldfinance -- libsushi - SushiGuard Typescript library: https://github.com/manifoldfinance/libsushi -- OpenMEV Documentation: https://github.com/openmev/docs +- Organization: https://github.com/manifoldfinance +- libsushi - SushiGuard Typescript library: https://github.com/manifoldfinance/libsushi +- OpenMEV Documentation: https://github.com/openmev/docs -- Contracts: https://github.com/manifoldfinance/openmev-contracts -- Reputation service: https://github.com/manifoldfinance/openmev-zkrep +- Contracts: https://github.com/manifoldfinance/openmev-contracts +- Reputation service: https://github.com/manifoldfinance/openmev-zkrep ## Chat -- Telegram: https://t.me/manifoldfinance -- Forums and Governance: https://forum.manifoldfinance.com +- Telegram: https://t.me/manifoldfinance +- Forums and Governance: https://forum.manifoldfinance.com diff --git a/docs/router/OpenMevLibrary.md b/docs/router/OpenMevLibrary.md new file mode 100644 index 0000000..ae4e3c8 --- /dev/null +++ b/docs/router/OpenMevLibrary.md @@ -0,0 +1,45 @@ +# OpenMevLibrary + +_CommodityStream, Inc_ + +> OpenMevLibrary + +Optimal MEV library to support OpenMevRouter + +## Errors + +### IdenticalAddresses + +```solidity +error IdenticalAddresses() +``` + +### InsufficientLiquidity + +```solidity +error InsufficientLiquidity() +``` + +### InvalidPath + +```solidity +error InvalidPath() +``` + +### Overflow + +```solidity +error Overflow() +``` + +### ZeroAddress + +```solidity +error ZeroAddress() +``` + +### ZeroAmount + +```solidity +error ZeroAmount() +``` diff --git a/docs/router/OpenMevRouter.md b/docs/router/OpenMevRouter.md new file mode 100644 index 0000000..4a569de --- /dev/null +++ b/docs/router/OpenMevRouter.md @@ -0,0 +1,868 @@ +# OpenMevRouter + +_Sandy Bradley <sandy@commoditystream.com>, Sam Bacha <sam@commoditystream.com>, ControlCandP_ + +> OpenMevRouter + +Optimal MEV router contract (IUniswapV2Router compatible) + +## Methods + +### acceptOwnership + +```solidity +function acceptOwnership() external nonpayable +``` + +_Transfers ownership of the contract to the caller. Can only be called by a new potential owner set by the current +owner._ + +### addLiquidity + +```solidity +function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external nonpayable returns (uint256 amountA, uint256 amountB, uint256 liquidity) +``` + +Adds liquidity to an ERC-20⇄ERC-20 pool. msg.sender should have already given the router an allowance of at least +amountADesired/amountBDesired on tokenA/tokenB + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------------------------------------------------------------- | +| tokenA | address | Token in pool | +| tokenB | address | Token in pool | +| amountADesired | uint256 | Amount of token A desired to add to pool | +| amountBDesired | uint256 | Amount of token B desired to add to pool | +| amountAMin | uint256 | Minimum amount of token A, can be 0 | +| amountBMin | uint256 | Minimum amount of token B, can be 0 | +| to | address | Address to receive liquidity token | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ------------------------------------- | +| amountA | uint256 | exact amount of token A added to pool | +| amountB | uint256 | exact amount of token B added to pool | +| liquidity | uint256 | amount of liquidity token received | + +### addLiquidityETH + +```solidity +function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) +``` + +Adds liquidity to an ERC-20⇄WETH pool with ETH. msg.sender should have already given the router an allowance of at least +amountTokenDesired on token. msg.value is treated as a amountETHDesired. Leftover ETH, if any, is returned to msg.sender + +#### Parameters + +| Name | Type | Description | +| ------------------ | ------- | ----------------------------------------------------------------- | +| token | address | Token in pool | +| amountTokenDesired | uint256 | Amount of token desired to add to pool | +| amountTokenMin | uint256 | Minimum amount of token, can be 0 | +| amountETHMin | uint256 | Minimum amount of ETH, can be 0 | +| to | address | Address to receive liquidity token | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------------------------------- | +| amountToken | uint256 | exact amount of token added to pool | +| amountETH | uint256 | exact amount of ETH added to pool | +| liquidity | uint256 | amount of liquidity token received | + +### cancelOwnershipTransfer + +```solidity +function cancelOwnershipTransfer() external payable +``` + +_Cancel a transfer of ownership to a new account. Can only be called by the current owner._ + +### executeOperation + +```solidity +function executeOperation(address[] assets, uint256[] amounts, uint256[] premiums, address initiator, bytes params) external nonpayable returns (bool) +``` + +Called from Aave Lending pool after contract has received the flash loaned amount +(https://docs.aave.com/developers/v/2.0/guides/flash-loans) + +_Reverts if not profitable._ + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | ------------------------------------------ | +| assets | address[] | Array of tokens to loan | +| amounts | uint256[] | Array of amounts to loan | +| premiums | uint256[] | Array of premiums to repay on loan amounts | +| initiator | address | Address of flashloan initiator | +| params | bytes | Encoded factories and tokens | + +#### Returns + +| Name | Type | Description | +| ---- | ---- | -------------------------- | +| \_0 | bool | success indicating success | + +### getAmountIn + +```solidity +function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amountOut | uint256 | undefined | +| reserveIn | uint256 | undefined | +| reserveOut | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| -------- | ------- | ----------- | +| amountIn | uint256 | undefined | + +### getAmountOut + +```solidity +function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amountIn | uint256 | undefined | +| reserveIn | uint256 | undefined | +| reserveOut | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountOut | uint256 | undefined | + +### getAmountsIn + +```solidity +function getAmountsIn(uint256 amountOut, address[] path) external view returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| path | address[] | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### getAmountsOut + +```solidity +function getAmountsOut(uint256 amountIn, address[] path) external view returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | --------- | ----------- | +| amountIn | uint256 | undefined | +| path | address[] | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### harvest + +```solidity +function harvest(uint256 percentage, address[] tokens, address[] receivers) external payable +``` + +Multi-sig consensus call to distribute a given percentage of specified tokens to specified receivers. + +#### Parameters + +| Name | Type | Description | +| ---------- | --------- | --------------------------------------------- | +| percentage | uint256 | Percentage of balance to distribute | +| tokens | address[] | Array of token addresses to distribute | +| receivers | address[] | Array of addresses for receiving distribution | + +### isOwner + +```solidity +function isOwner() external view returns (bool) +``` + +_Returns true if the caller is the current owner._ + +#### Returns + +| Name | Type | Description | +| ---- | ---- | ----------- | +| \_0 | bool | undefined | + +### onFlashLoan + +```solidity +function onFlashLoan(address sender, address token, uint256 amount, uint256 fee, bytes data) external nonpayable +``` + +Called from BentoBox Lending pool after contract has received the flash loaned amount + +_Reverts if not profitable._ + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ------------------------------ | +| sender | address | Address of flashloan initiator | +| token | address | Token to loan | +| amount | uint256 | Amount to loan | +| fee | uint256 | Fee to repay on loan amount | +| data | bytes | Encoded factories and tokens | + +### owner + +```solidity +function owner() external view returns (address) +``` + +_Returns the address of the current owner._ + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### quote + +```solidity +function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | ------- | ----------- | +| amountA | uint256 | undefined | +| reserveA | uint256 | undefined | +| reserveB | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountB | uint256 | undefined | + +### removeLiquidity + +```solidity +function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external nonpayable returns (uint256 amountA, uint256 amountB) +``` + +Removes liquidity from an ERC-20⇄ERC-20 pool. msg.sender should have already given the router an allowance of at least +liquidity on the pool. + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------------------------------------------------------------- | +| tokenA | address | Token in pool | +| tokenB | address | Token in pool | +| liquidity | uint256 | Amount of liquidity tokens to remove | +| amountAMin | uint256 | Minimum amount of token A, can be 0 | +| amountBMin | uint256 | Minimum amount of token B, can be 0 | +| to | address | Address to receive pool tokens | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | -------------------------- | +| amountA | uint256 | Amount of token A received | +| amountB | uint256 | Amount of token B received | + +### removeLiquidityETH + +```solidity +function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external nonpayable returns (uint256 amountToken, uint256 amountETH) +``` + +Removes liquidity from an ERC-20⇄WETH pool and receive ETH. msg.sender should have already given the router an allowance +of at least liquidity on the pool. + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------------------------------------------------------------- | +| token | address | Token in pool | +| liquidity | uint256 | Amount of liquidity tokens to remove | +| amountTokenMin | uint256 | Minimum amount of token, can be 0 | +| amountETHMin | uint256 | Minimum amount of ETH, can be 0 | +| to | address | Address to receive pool tokens | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ------------------------ | +| amountToken | uint256 | Amount of token received | +| amountETH | uint256 | Amount of ETH received | + +### removeLiquidityETHSupportingFeeOnTransferTokens + +```solidity +function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external nonpayable returns (uint256 amountETH) +``` + +Identical to removeLiquidityETH, but succeeds for tokens that take a fee on transfer. msg.sender should have already +given the router an allowance of at least liquidity on the pool. + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------------------------------------------------------------- | +| token | address | Token in pool | +| liquidity | uint256 | Amount of liquidity tokens to remove | +| amountTokenMin | uint256 | Minimum amount of token, can be 0 | +| amountETHMin | uint256 | Minimum amount of ETH, can be 0 | +| to | address | Address to receive pool tokens | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ---------------------- | +| amountETH | uint256 | Amount of ETH received | + +### removeLiquidityETHWithPermit + +```solidity +function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountToken, uint256 amountETH) +``` + +Removes liquidity from an ERC-20⇄WETTH pool and receive ETH without pre-approval, thanks to permit + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | -------------------------------------------------------------------------------- | +| token | address | Token in pool | +| liquidity | uint256 | Amount of liquidity tokens to remove | +| amountTokenMin | uint256 | Minimum amount of token, can be 0 | +| amountETHMin | uint256 | Minimum amount of ETH, can be 0 | +| to | address | Address to receive pool tokens | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | +| approveMax | bool | Whether or not the approval amount in the signature is for liquidity or uint(-1) | +| v | uint8 | The v component of the permit signature | +| r | bytes32 | The r component of the permit signature | +| s | bytes32 | The s component of the permit signature | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ------------------------ | +| amountToken | uint256 | Amount of token received | +| amountETH | uint256 | Amount of ETH received | + +### removeLiquidityETHWithPermitSupportingFeeOnTransferTokens + +```solidity +function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountETH) +``` + +Identical to removeLiquidityETHWithPermit, but succeeds for tokens that take a fee on transfer. + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | -------------------------------------------------------------------------------- | +| token | address | Token in pool | +| liquidity | uint256 | Amount of liquidity tokens to remove | +| amountTokenMin | uint256 | Minimum amount of token, can be 0 | +| amountETHMin | uint256 | Minimum amount of ETH, can be 0 | +| to | address | Address to receive pool tokens | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | +| approveMax | bool | Whether or not the approval amount in the signature is for liquidity or uint(-1) | +| v | uint8 | The v component of the permit signature | +| r | bytes32 | The r component of the permit signature | +| s | bytes32 | The s component of the permit signature | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ---------------------- | +| amountETH | uint256 | Amount of ETH received | + +### removeLiquidityWithPermit + +```solidity +function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountA, uint256 amountB) +``` + +Removes liquidity from an ERC-20⇄ERC-20 pool without pre-approval, thanks to permit. + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | -------------------------------------------------------------------------------- | +| tokenA | address | Token in pool | +| tokenB | address | Token in pool | +| liquidity | uint256 | Amount of liquidity tokens to remove | +| amountAMin | uint256 | Minimum amount of token A, can be 0 | +| amountBMin | uint256 | Minimum amount of token B, can be 0 | +| to | address | Address to receive pool tokens | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | +| approveMax | bool | Whether or not the approval amount in the signature is for liquidity or uint(-1) | +| v | uint8 | The v component of the permit signature | +| r | bytes32 | The r component of the permit signature | +| s | bytes32 | The s component of the permit signature | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | -------------------------- | +| amountA | uint256 | Amount of token A received | +| amountB | uint256 | Amount of token B received | + +### swapETHForExactTokens + +```solidity +function swapETHForExactTokens(uint256 amountOut, address[] path, address to, uint256 deadline) external payable returns (uint256[] amounts) +``` + +Receive an exact amount of tokens for as little ETH as possible, along the route determined by the path. The first +element of path must be WETH9. Leftover ETH, if any, is returned to msg.sender. amountInMax = msg.value + +_Require has been replaced with revert for gas optimization. Fallback alternate router check for insufficient output +amount. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountOut | uint256 | Amount of output tokens that must be received | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------- | +| amounts | uint256[] | Array of input token amount and all subsequent output token amounts | + +### swapExactETHForTokens + +```solidity +function swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) external payable returns (uint256[] amounts) +``` + +Swaps an exact amount of ETH for as many output tokens as possible, along the route determined by the path. The first +element of path must be WETH9, the last is the output token. amountIn = msg.value + +_Require has been replaced with revert for gas optimization. Fallback alternate router check for insufficient output +amount. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountOutMin | uint256 | Minimum amount of output tokens that must be received | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------- | +| amounts | uint256[] | Array of input token amount and all subsequent output token amounts | + +### swapExactETHForTokensSupportingFeeOnTransferTokens + +```solidity +function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) external payable +``` + +Identical to swapExactETHForTokens, but succeeds for tokens that take a fee on transfer. amountIn = msg.value + +_Require has been replaced with revert for gas optimization. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountOutMin | uint256 | Minimum amount of output tokens that must be received | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +### swapExactTokensForETH + +```solidity +function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +Swaps an exact amount of tokens for as much ETH as possible, along the route determined by the path. The first element +of path is the input token, the last must be WETH9. + +_Require has been replaced with revert for gas optimization. Fallback alternate router check for insufficient output +amount. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountIn | uint256 | Amount of input tokens to send. | +| amountOutMin | uint256 | Minimum amount of ETH that must be received | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------- | +| amounts | uint256[] | Array of input token amount and all subsequent output token amounts | + +### swapExactTokensForETHSupportingFeeOnTransferTokens + +```solidity +function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable +``` + +Identical to swapExactTokensForETH, but succeeds for tokens that take a fee on transfer. + +_Require has been replaced with revert for gas optimization. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountIn | uint256 | Amount of input tokens to send. | +| amountOutMin | uint256 | Minimum amount of ETH that must be received | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +### swapExactTokensForTokens + +```solidity +function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +Swaps an exact amount of input tokens for as many output tokens as possible, along the route determined by the path. The +first element of path is the input token, the last is the output token, and any intermediate elements represent +intermediate pairs to trade through. msg.sender should have already given the router an allowance of at least amountIn +on the input token. + +_Require has been replaced with revert for gas optimization. Fallback alternate router check for insufficient output +amount. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountIn | uint256 | Amount of input tokens to send. | +| amountOutMin | uint256 | Minimum amount of output tokens that must be received | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------- | +| amounts | uint256[] | Array of input token amount and all subsequent output token amounts | + +### swapExactTokensForTokensSupportingFeeOnTransferTokens + +```solidity +function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable +``` + +Identical to swapExactTokensForTokens, but succeeds for tokens that take a fee on transfer. msg.sender should have +already given the router an allowance of at least amountIn on the input token. + +_Require has been replaced with revert for gas optimization. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountIn | uint256 | Amount of input tokens to send. | +| amountOutMin | uint256 | Minimum amount of output tokens that must be received | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +### swapTokensForExactETH + +```solidity +function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +Receive an exact amount of ETH for as few input tokens as possible, along the route determined by the path. The first +element of path is the input token, the last must be WETH9. msg.sender should have already given the router an allowance +of at least amountInMax on the input token. + +_Require has been replaced with revert for gas optimization. Fallback alternate router check for insufficient output +amount. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| ----------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountOut | uint256 | Amount of ETH to receive | +| amountInMax | uint256 | Maximum amount of input tokens | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------- | +| amounts | uint256[] | Array of input token amount and all subsequent output token amounts | + +### swapTokensForExactTokens + +```solidity +function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +Receive an exact amount of output tokens for as few input tokens as possible, along the route determined by the path. +msg.sender should have already given the router an allowance of at least amountInMax on the input token. + +_Require has been replaced with revert for gas optimization. Fallback alternate router check for insufficient output +amount. Attempt to back-run swaps._ + +#### Parameters + +| Name | Type | Description | +| ----------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| amountOut | uint256 | Amount of output tokens to receive | +| amountInMax | uint256 | Maximum amount of input tokens | +| path | address[] | Array of token addresses. path.length must be >= 2. Pools for each consecutive pair of addresses must exist and have liquidity | +| to | address | Address of receiver | +| deadline | uint256 | Unix timestamp in seconds after which the transaction will revert | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------- | +| amounts | uint256[] | Array of input token amount and all subsequent output token amounts | + +### transferOwnership + +```solidity +function transferOwnership(address newOwner) external payable +``` + +_Allows a new account (`newOwner`) to accept ownership. Can only be called by the current owner._ + +#### Parameters + +| Name | Type | Description | +| -------- | ------- | ----------- | +| newOwner | address | undefined | + +### updateAaveAsset + +```solidity +function updateAaveAsset(bool isActive, address asset) external payable +``` + +Update internal Aave asset flag + +#### Parameters + +| Name | Type | Description | +| -------- | ------- | ------------------------------------------------------------- | +| isActive | bool | Boolean flagging whether to use the asset for Aave flashloans | +| asset | address | Address of asset | + +### updateAllAaveAssets + +```solidity +function updateAllAaveAssets() external payable +``` + +Update all internal Aave assets + +## Events + +### LoanError + +```solidity +event LoanError(address indexed token, uint256 amountIn) +``` + +#### Parameters + +| Name | Type | Description | +| --------------- | ------- | ----------- | +| token `indexed` | address | undefined | +| amountIn | uint256 | undefined | + +### MEV + +```solidity +event MEV(address indexed user, address indexed token, uint256 value) +``` + +#### Parameters + +| Name | Type | Description | +| --------------- | ------- | ----------- | +| user `indexed` | address | undefined | +| token `indexed` | address | undefined | +| value | uint256 | undefined | + +### OwnershipTransferred + +```solidity +event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------- | ------- | ----------- | +| previousOwner `indexed` | address | undefined | +| newOwner `indexed` | address | undefined | + +## Errors + +### ExcessiveInputAmount + +```solidity +error ExcessiveInputAmount() +``` + +### ExecuteNotAuthorized + +```solidity +error ExecuteNotAuthorized() +``` + +### Expired + +```solidity +error Expired() +``` + +### IdenticalAddresses + +```solidity +error IdenticalAddresses() +``` + +### InsufficientAAmount + +```solidity +error InsufficientAAmount() +``` + +### InsufficientAllowance + +```solidity +error InsufficientAllowance() +``` + +### InsufficientBAmount + +```solidity +error InsufficientBAmount() +``` + +### InsufficientLiquidity + +```solidity +error InsufficientLiquidity() +``` + +### InsufficientOutputAmount + +```solidity +error InsufficientOutputAmount() +``` + +### InvalidPath + +```solidity +error InvalidPath() +``` + +### NoReceivers + +```solidity +error NoReceivers() +``` + +### NoTokens + +```solidity +error NoTokens() +``` + +### NotPercent + +```solidity +error NotPercent() +``` + +### Overflow + +```solidity +error Overflow() +``` + +### TokenIsFeeOnTransfer + +```solidity +error TokenIsFeeOnTransfer() +``` + +### TransferFailed + +```solidity +error TransferFailed() +``` + +### Unauthorized + +```solidity +error Unauthorized() +``` + +### ZeroAddress + +```solidity +error ZeroAddress() +``` + +### ZeroAmount + +```solidity +error ZeroAmount() +``` diff --git a/docs/router/OpenMevZapper.md b/docs/router/OpenMevZapper.md new file mode 100644 index 0000000..3c54b6f --- /dev/null +++ b/docs/router/OpenMevZapper.md @@ -0,0 +1,157 @@ +# OpenMevZapper + +> OpenMevZapper + +Optimal UniswapV2Pair Liquidity deposits and withdrawls with a single token / eth (or relevant native currency) + +## Methods + +### router + +```solidity +function router() external view returns (contract IOpenMevRouter) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ----------------------- | ----------- | +| \_0 | contract IOpenMevRouter | undefined | + +### swapAndStakeLiquidity + +```solidity +function swapAndStakeLiquidity(address tokenA, address tokenB, uint256 amountA, uint256 amountBMin) external nonpayable returns (uint256 liquidity) +``` + +Adds liquidity to an ERC-20⇄ERC-20 pool from a single token. msg.sender should have already given the router an +allowance of at least amountA on tokenA + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | -------------------------------------------------------------------------- | +| tokenA | address | Token in pool | +| tokenB | address | Token in pool | +| amountA | uint256 | Amount of token A desired to add to pool, inclusive of swap half to tokenB | +| amountBMin | uint256 | Minimum amount of token B on swap, can be 0 | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ------------------------------------------------------ | +| liquidity | uint256 | amount of liquidity token received, sent to msg.sender | + +### swapETHAndStakeLiquidity + +```solidity +function swapETHAndStakeLiquidity(address tokenB, uint256 amountBMin) external payable returns (uint256 liquidity) +``` + +Adds liquidity to an ERC-20⇄ERC-20 pool from eth. msg.value is treated as a amountETHDesired. Leftover ETH, if any, is +returned to msg.sender + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ------------------------------------------- | +| tokenB | address | Token in pool | +| amountBMin | uint256 | Minimum amount of token B on swap, can be 0 | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ------------------------------------------------------ | +| liquidity | uint256 | amount of liquidity token received, sent to msg.sender | + +### withdrawLiquidityAndSwap + +```solidity +function withdrawLiquidityAndSwap(address pairAddress, uint256 withdrawAmount, address desiredToken, uint256 desiredTokenOutMin) external nonpayable returns (uint256 amountOut) +``` + +Removes liquidity from an ERC-20⇄ERC-20 pool into a single token / ETH . msg.sender should have already given the zapper +an allowance of at least liquidity on the pool. + +#### Parameters + +| Name | Type | Description | +| ------------------ | ------- | ---------------------------------------------- | +| pairAddress | address | Address of V2 pool | +| withdrawAmount | uint256 | Amount of liquidity to withdraw | +| desiredToken | address | Withdrawl token desired | +| desiredTokenOutMin | uint256 | Minimum amount of total desiredToken, can be 0 | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ------------------------------- | +| amountOut | uint256 | Amount of desiredToken received | + +## Errors + +### IdenticalAddresses + +```solidity +error IdenticalAddresses() +``` + +### InsufficientAAmount + +```solidity +error InsufficientAAmount() +``` + +### InsufficientAllowance + +```solidity +error InsufficientAllowance() +``` + +### InsufficientBAmount + +```solidity +error InsufficientBAmount() +``` + +### InsufficientLiquidity + +```solidity +error InsufficientLiquidity() +``` + +### InsufficientOutputAmount + +```solidity +error InsufficientOutputAmount() +``` + +### InvalidPath + +```solidity +error InvalidPath() +``` + +### Overflow + +```solidity +error Overflow() +``` + +### TransferFailed + +```solidity +error TransferFailed() +``` + +### ZeroAddress + +```solidity +error ZeroAddress() +``` + +### ZeroAmount + +```solidity +error ZeroAmount() +``` diff --git a/docs/router/audit.md b/docs/router/audit.md index ffbbb5b..e00a764 100644 --- a/docs/router/audit.md +++ b/docs/router/audit.md @@ -1,195 +1,194 @@ --- title: yAcademy OpenMEV SushiGuard Router Audit version: 8648277c0a89d0091f959948682543bdcf0c280b -authors: ['Jackson', 'engn33r', 'sjkelleyjr'] +authors: ["Jackson", "engn33r", "sjkelleyjr"] --- # yAcademy OpenMEV review - **Review Resources:** [Wiki](/manifoldfinance/OpenMevRouter/wiki) [Docs and whitepaper](/manifoldfinance/OpenMevRouter/tree/main/docs) **Residents:** - - Jackson - - engn33r + +- Jackson +- engn33r <!-- TOC --> -- [yAcademy OpenMEV review](#yacademy-openmev-review) - - [Review Summary](#review-summary) - - [Scope](#scope) - - [Code Evaluation Matrix](#code-evaluation-matrix) - - [Findings Explanation](#findings-explanation) - - [High Findings](#high-findings) - - [High - The swap and stake mechanisms in OpenMevZapper leave funds in the contract Jackson](#high---the-swap-and-stake-mechanisms-in-openmevzapper-leave-funds-in-the-contract-jackson) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [High - Using normal functions for fee-on-transfer tokens causes value loss engn33r](#high---using-normal-functions-for-fee-on-transfer-tokens-causes-value-loss-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [High - Backrun arb not designed for fee-on-transfer tokens engn33r](#high---backrun-arb-not-designed-for-fee-on-transfer-tokens-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Medium Findings](#medium-findings) - - [Medium - Failed flashloan arbitrage reverts the original swap Jackson](#medium---failed-flashloan-arbitrage-reverts-the-original-swap-jackson) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Low Findings](#low-findings) - - [Low - Edge case suboptimal arb profit engn33r](#low---edge-case-suboptimal-arb-profit-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Low - One failed arb can revert otherwise profitable arb engn33r](#low---one-failed-arb-can-revert-otherwise-profitable-arb-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Low - Max approval granted to spender Jackson](#low---max-approval-granted-to-spender-jackson) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Low - No check For Aave flashloan balance Jackson](#low---no-check-for-aave-flashloan-balance-jackson) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas Savings Findings](#gas-savings-findings) - - [Gas - Use _isNonZero for gas savings engn33r](#gas---use-_isnonzero-for-gas-savings-engn33r) - - [Proof of Concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Use _inc instead of ++ and _dec instead of -- engn33r](#gas---use-_inc-instead-of--and-_dec-instead-of----engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Bitshifting is cheaper than multiplication or division engn33r](#gas---bitshifting-is-cheaper-than-multiplication-or-division-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Unnecessary zero initialization engn33r](#gas---unnecessary-zero-initialization-engn33r) - - [Proof of Concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Payable functions can save gas engn33r](#gas---payable-functions-can-save-gas-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Avoid && logic in require statements engn33r](#gas---avoid--logic-in-require-statements-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Declare constant internal when possible engn33r](#gas---declare-constant-internal-when-possible-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Replace require with errors in OpenMevRouter Jackson](#gas---replace-require-with-errors-in-openmevrouter-jackson) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Remove unused code Jackson](#gas---remove-unused-code-jackson) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Use simple comparison engn33r](#gas---use-simple-comparison-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Combine reserve value checks engn33r](#gas---combine-reserve-value-checks-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Use msg global vars directly engn33r](#gas---use-msg-global-vars-directly-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Remove duplicate internal function call engn33r](#gas---remove-duplicate-internal-function-call-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - deadline special case not aligned with permit engn33r](#gas---deadline-special-case-not-aligned-with-permit-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Replace pair.swap with _asmSwap engn33r](#gas---replace-pairswap-with-_asmswap-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Remove a sortTokens call engn33r](#gas---remove-a-sorttokens-call-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Missing curly brace engn33r](#gas---missing-curly-brace-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - More efficient variable swap engn33r](#gas---more-efficient-variable-swap-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Reduce number of swaps engn33r](#gas---reduce-number-of-swaps-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Gas - Revert if zero flashloan profit engn33r](#gas---revert-if-zero-flashloan-profit-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational Findings](#informational-findings) - - [Informational - OpenMevRouter should inherit from IFlashBorrower and IOpenMevRouter Jackson](#informational---openmevrouter-should-inherit-from-iflashborrower-and-iopenmevrouter-jackson) - - [Impact](#impact) - - [Informational - The ETHERSCAN_API key is present in plaintext Jackson](#informational---the-etherscan_api-key-is-present-in-plaintext-jackson) - - [Impact](#impact) - - [Informational - SafeTransferLib does not match Solmate's main branch Jackson](#informational---safetransferlib-does-not-match-solmates-main-branch-jackson) - - [Impact](#impact) - - [Informational - Incorrect comment engn33r, Jackson](#informational---incorrect-comment-engn33r-jackson) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational - Replace magic numbers with constants engn33r](#informational---replace-magic-numbers-with-constants-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational - Typos engn33r](#informational---typos-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational - Hard coded Aave token list engn33r](#informational---hard-coded-aave-token-list-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational - Inconsistency in WETH transfers engn33r](#informational---inconsistency-in-weth-transfers-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational - safeApprove vulnerable to double withdraw engn33r](#informational---safeapprove-vulnerable-to-double-withdraw-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational - Same frontrunning weaknesses as Uniswap/SushiSwap engn33r](#informational---same-frontrunning-weaknesses-as-uniswapsushiswap-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational - Kashi flashloanable tokens assumed same as aave engn33r](#informational---kashi-flashloanable-tokens-assumed-same-as-aave-engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Informational - engn33r](#informational----engn33r) - - [Proof of concept](#proof-of-concept) - - [Impact](#impact) - - [Recommendation](#recommendation) - - [Final remarks](#final-remarks) - - [engn33r](#engn33r) - - [Jackson](#jackson) - - [About yAcademy](#about-yacademy) - - [Appendix and FAQ](#appendix-and-faq) +- [yAcademy OpenMEV review](#yacademy-openmev-review) + - [Review Summary](#review-summary) + - [Scope](#scope) + - [Code Evaluation Matrix](#code-evaluation-matrix) + - [Findings Explanation](#findings-explanation) + - [High Findings](#high-findings) + - [High - The swap and stake mechanisms in OpenMevZapper leave funds in the contract Jackson](#high---the-swap-and-stake-mechanisms-in-openmevzapper-leave-funds-in-the-contract-jackson) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [High - Using normal functions for fee-on-transfer tokens causes value loss engn33r](#high---using-normal-functions-for-fee-on-transfer-tokens-causes-value-loss-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [High - Backrun arb not designed for fee-on-transfer tokens engn33r](#high---backrun-arb-not-designed-for-fee-on-transfer-tokens-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Medium Findings](#medium-findings) + - [Medium - Failed flashloan arbitrage reverts the original swap Jackson](#medium---failed-flashloan-arbitrage-reverts-the-original-swap-jackson) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Low Findings](#low-findings) + - [Low - Edge case suboptimal arb profit engn33r](#low---edge-case-suboptimal-arb-profit-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Low - One failed arb can revert otherwise profitable arb engn33r](#low---one-failed-arb-can-revert-otherwise-profitable-arb-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Low - Max approval granted to spender Jackson](#low---max-approval-granted-to-spender-jackson) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Low - No check For Aave flashloan balance Jackson](#low---no-check-for-aave-flashloan-balance-jackson) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas Savings Findings](#gas-savings-findings) + - [Gas - Use \_isNonZero for gas savings engn33r](#gas---use-_isnonzero-for-gas-savings-engn33r) + - [Proof of Concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Use \_inc instead of ++ and \_dec instead of -- engn33r](#gas---use-_inc-instead-of--and-_dec-instead-of----engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Bitshifting is cheaper than multiplication or division engn33r](#gas---bitshifting-is-cheaper-than-multiplication-or-division-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Unnecessary zero initialization engn33r](#gas---unnecessary-zero-initialization-engn33r) + - [Proof of Concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Payable functions can save gas engn33r](#gas---payable-functions-can-save-gas-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Avoid && logic in require statements engn33r](#gas---avoid--logic-in-require-statements-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Declare constant internal when possible engn33r](#gas---declare-constant-internal-when-possible-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Replace require with errors in OpenMevRouter Jackson](#gas---replace-require-with-errors-in-openmevrouter-jackson) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Remove unused code Jackson](#gas---remove-unused-code-jackson) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Use simple comparison engn33r](#gas---use-simple-comparison-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Combine reserve value checks engn33r](#gas---combine-reserve-value-checks-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Use msg global vars directly engn33r](#gas---use-msg-global-vars-directly-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Remove duplicate internal function call engn33r](#gas---remove-duplicate-internal-function-call-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - deadline special case not aligned with permit engn33r](#gas---deadline-special-case-not-aligned-with-permit-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Replace pair.swap with \_asmSwap engn33r](#gas---replace-pairswap-with-_asmswap-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Remove a sortTokens call engn33r](#gas---remove-a-sorttokens-call-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Missing curly brace engn33r](#gas---missing-curly-brace-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - More efficient variable swap engn33r](#gas---more-efficient-variable-swap-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Reduce number of swaps engn33r](#gas---reduce-number-of-swaps-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Gas - Revert if zero flashloan profit engn33r](#gas---revert-if-zero-flashloan-profit-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational Findings](#informational-findings) + - [Informational - OpenMevRouter should inherit from IFlashBorrower and IOpenMevRouter Jackson](#informational---openmevrouter-should-inherit-from-iflashborrower-and-iopenmevrouter-jackson) + - [Impact](#impact) + - [Informational - The ETHERSCAN_API key is present in plaintext Jackson](#informational---the-etherscan_api-key-is-present-in-plaintext-jackson) + - [Impact](#impact) + - [Informational - SafeTransferLib does not match Solmate's main branch Jackson](#informational---safetransferlib-does-not-match-solmates-main-branch-jackson) + - [Impact](#impact) + - [Informational - Incorrect comment engn33r, Jackson](#informational---incorrect-comment-engn33r-jackson) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational - Replace magic numbers with constants engn33r](#informational---replace-magic-numbers-with-constants-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational - Typos engn33r](#informational---typos-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational - Hard coded Aave token list engn33r](#informational---hard-coded-aave-token-list-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational - Inconsistency in WETH transfers engn33r](#informational---inconsistency-in-weth-transfers-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational - safeApprove vulnerable to double withdraw engn33r](#informational---safeapprove-vulnerable-to-double-withdraw-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational - Same frontrunning weaknesses as Uniswap/SushiSwap engn33r](#informational---same-frontrunning-weaknesses-as-uniswapsushiswap-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational - Kashi flashloanable tokens assumed same as aave engn33r](#informational---kashi-flashloanable-tokens-assumed-same-as-aave-engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Informational - engn33r](#informational----engn33r) + - [Proof of concept](#proof-of-concept) + - [Impact](#impact) + - [Recommendation](#recommendation) + - [Final remarks](#final-remarks) + - [engn33r](#engn33r) + - [Jackson](#jackson) + - [About yAcademy](#about-yacademy) + - [Appendix and FAQ](#appendix-and-faq) <!-- /TOC --> - ## Review Summary **OpenMEV** @@ -199,6 +198,7 @@ The purpose of OpenMEVRouter is to offer a drop-in replacement to a similar Unis The main branch of the OpenMEV [Repo](/manifoldfinance/OpenMevRouter) was reviewed over 22 days, 4 of which were used to create an initial overview of the contract. The code review was performed between May 12 and June 3, 2022. The code was reviewed by 2 residents for a total of 59 man hours (engn33r: 34 hours, and Jackson 25 hours). The repository was under active development during the review, but the review was limited to [one specific commit](/manifoldfinance/OpenMevRouter/commit/8648277c0a89d0091f959948682543bdcf0c280b). ## Scope + [Code Repo](/manifoldfinance/OpenMevRouter) [Commit](/manifoldfinance/OpenMevRouter/commit/8648277c0a89d0091f959948682543bdcf0c280b) @@ -210,51 +210,51 @@ The review was a time-limited review to provide rapid feedback on potential vuln yAcademy and the residents make no warranties regarding the security of the code and do not warrant that the code is free from defects. yAcademy and the residents do not represent nor imply to third parties that the code has been audited nor that the code is free from defects. Manifold and third parties should use the code at their own risk. -Code Evaluation Matrix ---- +## Code Evaluation Matrix -| Category | Mark | Description | -| ------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Access Control | Good | The onlyOwner modifier was only applied to the `harvest()` function. Access controls existed on the relevant callback functions in OpenMevRouter.sol for flashloans. msg.sender is properly used so that the user cannot perform actions they should not be able to. Access controls are applied where needed. | -| Mathematics | Average | Solidity 0.8.13 is used, which provides overflow and underflow protect. There was no unusually complex math beyond the Uint512 library. The `sqrt512()` function using the Karatsuba Square Root method is an unusual and potentially custom implementation. | -| Complexity | Average | Many function names and implementations are borrowed from UniswapV2 contracts and BeefySwap's zapper. This reduces the amount of custom development work necessary. The primary source of complexity is the backrun swap arb process and the equations derived for that purpose. | -| Libraries | Good | A custom OpenMevLibrary contract is based heavily on the UniswapV2Library contract. The Uint512 contract supports math operations for uint512 integers comprised of two uint256 integers. SafeTransferLib and ERC20 libraries are imported by OpenMevRouter but are commonly used contracts. | -| Decentralization | Good | The onlyOwner modifier on the `harvest()` function indicates there is some centralization risk, but it is expected that Sushi governance will take this role and can be considered a trusted party. | -| Code stability | Good | Changes were reviewed at a specific commit hash and the scope was not expanded after the review was started. The code reviewed had nearly all features implemented. | -| Documentation | Good | Comments existed in many places, but were lacking in key areas. As one example, identically named _updateReward functions existed in Gauge.sol, ExtraReward.sol and VeYfiRewards.sol, but no comments existed on either function and no explanation of the differences of these identically-named function existed. It would be best if more thorough comments and documentation was added throughout the code to better explain the purpose of different functions and specific math that is performed. No developer documentation like gitbooks was observed for veYFI at the time of review. | -| Monitoring | Average | Only `_backrunSwaps()` emitted an event. However, the UniswapV2 Router does not emit any events and the OpenMevRouter contracts prioritize gas savings, so additional events may not be necessary. | -| Testing and verification | Average | Brownie tests and foundry tests were written. The foundry tests were more comprehensive that the brownie tests, but getting the exact test coverage numbers with foundry is still [a work in progress](/foundry-rs/foundry/issues/99) at the time this review was performed. The coverage could be improved to test for the edge cases introduced by modifications to the forked Uniswap and BeefySwap contracts as demonstrated by the findings. | +| Category | Mark | Description | +| ------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Access Control | Good | The onlyOwner modifier was only applied to the `harvest()` function. Access controls existed on the relevant callback functions in OpenMevRouter.sol for flashloans. msg.sender is properly used so that the user cannot perform actions they should not be able to. Access controls are applied where needed. | +| Mathematics | Average | Solidity 0.8.13 is used, which provides overflow and underflow protect. There was no unusually complex math beyond the Uint512 library. The `sqrt512()` function using the Karatsuba Square Root method is an unusual and potentially custom implementation. | +| Complexity | Average | Many function names and implementations are borrowed from UniswapV2 contracts and BeefySwap's zapper. This reduces the amount of custom development work necessary. The primary source of complexity is the backrun swap arb process and the equations derived for that purpose. | +| Libraries | Good | A custom OpenMevLibrary contract is based heavily on the UniswapV2Library contract. The Uint512 contract supports math operations for uint512 integers comprised of two uint256 integers. SafeTransferLib and ERC20 libraries are imported by OpenMevRouter but are commonly used contracts. | +| Decentralization | Good | The onlyOwner modifier on the `harvest()` function indicates there is some centralization risk, but it is expected that Sushi governance will take this role and can be considered a trusted party. | +| Code stability | Good | Changes were reviewed at a specific commit hash and the scope was not expanded after the review was started. The code reviewed had nearly all features implemented. | +| Documentation | Good | Comments existed in many places, but were lacking in key areas. As one example, identically named \_updateReward functions existed in Gauge.sol, ExtraReward.sol and VeYfiRewards.sol, but no comments existed on either function and no explanation of the differences of these identically-named function existed. It would be best if more thorough comments and documentation was added throughout the code to better explain the purpose of different functions and specific math that is performed. No developer documentation like gitbooks was observed for veYFI at the time of review. | +| Monitoring | Average | Only `_backrunSwaps()` emitted an event. However, the UniswapV2 Router does not emit any events and the OpenMevRouter contracts prioritize gas savings, so additional events may not be necessary. | +| Testing and verification | Average | Brownie tests and foundry tests were written. The foundry tests were more comprehensive that the brownie tests, but getting the exact test coverage numbers with foundry is still [a work in progress](/foundry-rs/foundry/issues/99) at the time this review was performed. The coverage could be improved to test for the edge cases introduced by modifications to the forked Uniswap and BeefySwap contracts as demonstrated by the findings. | ## Findings Explanation Findings are broken down into sections by their respective impact: - - Critical, High, Medium, Low impact - - These are findings that range from attacks that may cause loss of funds, impact control/ownership of the contracts, or cause any unintended consequences/actions that are outside the scope of the requirements, - - Gas savings - - Findings that can improve the gas efficiency of the contracts - - Informational - - Findings including recommendations and best practices + +- Critical, High, Medium, Low impact + - These are findings that range from attacks that may cause loss of funds, impact control/ownership of the contracts, or cause any unintended consequences/actions that are outside the scope of the requirements, +- Gas savings + - Findings that can improve the gas efficiency of the contracts +- Informational + - Findings including recommendations and best practices + --- ## High Findings ### 1. High - The swap and stake mechanisms in OpenMevZapper leave funds in the contract (Jackson) -Half of the input amount in both `swapAndStakeLiquidity` and `swapETHAndStakeLiquidity` is used as the `swapAmountIn` when atomically swapping and staking. However, this leaves funds in the contract due to the reserve asset ratio change post-swap. See ["Optimal One-sided Supply to Uniswap"](https://blog.alphaventuredao.io/onesideduniswap/) for more information. +Half of the input amount in both `swapAndStakeLiquidity` and `swapETHAndStakeLiquidity` is used as the `swapAmountIn` when atomically swapping and staking. However, this leaves funds in the contract due to the reserve asset ratio change post-swap. See ["Optimal One-sided Supply to Uniswap"](https://blog.alphaventuredao.io/onesideduniswap/) for more information. #### Proof of concept -Both [`swapAdStakeLiquidity`] [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol#L126-L159) and [`swapETHAndStakeLiquidity`] [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol)-L195) take the input tokens or ETH sent by a user, divide it by 2, swap it into the B token, and stake these tokens as a pair. However, this approach leaves some of the B token in the contract due to the reserve asset ratio change before and after the swap. +Both [`swapAdStakeLiquidity`] [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol#L126-L159) and [`swapETHAndStakeLiquidity`] [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol)-L195) take the input tokens or ETH sent by a user, divide it by 2, swap it into the B token, and stake these tokens as a pair. However, this approach leaves some of the B token in the contract due to the reserve asset ratio change before and after the swap. #### Impact -High. The funds are not returned to the user, and will likely be swept by Sushi governance during a call to `harvest`. +High. The funds are not returned to the user, and will likely be swept by Sushi governance during a call to `harvest`. #### Recommendation Use the formula found in ["Optimal One-sided Supply to Uniswap"](https://blog.alphaventuredao.io/onesideduniswap/) for the `swapAmountIn`, rather than ` / 2`. - ```solidity sqrt( reserveIn.mul(userIn.mul(3988000) + reserveIn.mul(3988009))) @@ -268,6 +268,7 @@ Uniswap's code relies on the assumption that functions without direct support fo #### Proof of concept The NatSpec comment for `removeLiquidityETHSupportingFeeOnTransferTokens()` includes + ``` Identical to removeLiquidityETH, but succeeds for tokens that take a fee on transfer ``` @@ -275,8 +276,9 @@ Identical to removeLiquidityETH, but succeeds for tokens that take a fee on tran The only difference in these functions, and what is implied to cause the revert condition in `removeLiquidityETH()`, is the amount used in `safeTransfer()`. `removeLiquidityETH()` has an amount of `amountToken`, while `removeLiquidityETHSupportingFeeOnTransferTokens()` uses `ERC20(token).balanceOf(address(this)) - balanceBefore`. This does cause a revert in Uniswap's code because of the Uniswap assumption that the router holds no token balance, but OpenMevRouter can hold a token balance. The process of value loss is: + 1. Fee-on-transfer token is held by the router. This can happen either with an initial deposit by the Manifold team or from backrun arbitrage profits. The devs suggested the tokens that will be sent to the router will likely be tokens that Aave does not support flashloans for, which could include lesser known tokens with fee-on-transfer support. -2. User wants to remove liquidity from WETH-ERC20 pair where the ERC20 has a non-zero fee-on-transfer. Instead of using `removeLiquidityETHSupportingFeeOnTransferTokens()`, the user calls `removeLiquidityETH()`. +2. User wants to remove liquidity from WETH-ERC20 pair where the ERC20 has a non-zero fee-on-transfer. Instead of using `removeLiquidityETHSupportingFeeOnTransferTokens()`, the user calls `removeLiquidityETH()`. 3. The code of `removeLiquidityETHSupportingFeeOnTransferTokens()` and `removeLiquidityETH()` is identical except for the amount in `ERC20(token).safeTransfer()`. The `amountToken` value used in `removeLiquidityETH()` is greater than the amount of fee-on-transfer tokens received from the `removeLiquidity()` call, so the amount transferred to the user will include some of the token balance that was held by the router before the user's remove liquidity interaction. 4. Result: The router lost value in the form of the transfer-on-fee token @@ -313,18 +315,19 @@ SafeTransferLib.safeTransferETH(to, amountETH); The backrun process is performed for any swap, but the backrun process is not designed for fee-on-transfer tokens. Because the router contract may hold fee-on-transfer tokens, the router contract may lose some of this stored value to fees when performing an arb involving a fee-on-transfer token. -#### Proof of concept +#### Proof of concept While Aave and Kashi do not currently allow flashloans on any fee-on-transfer tokens, this call of `_arb()` using internal router contract funds is problematic: [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) The two swaps are performed with `_asmSwap()`, which have a `safeTransfer()` performed first to send the token to the pair address. -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) It is assumed that the `amountOut` value calculated by `OpenMevLibrary.getAmountOut()` accurately stores the amount of tokens that the router contract receives from the swap process. Instead, to support fee-on-transfer tokens, a calculation of `ERC20(token).balanceOf(address(this)) - balanceBefore` as found in the router function `removeLiquidityETHSupportingFeeOnTransferTokens()` should be used. -The `_arb()` fuction can even cause problems when neither the first nor last token is a fee-on-transfer token, but one of the intermediate swaps uses a fee-on-transfer token. Because the `_backrunSwaps()` function [loops through the array of swaps]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)), any of the backrun swaps that involve a fee-on-transfer token could be problematic. +The `_arb()` fuction can even cause problems when neither the first nor last token is a fee-on-transfer token, but one of the intermediate swaps uses a fee-on-transfer token. Because the `_backrunSwaps()` function [loops through the array of swaps](<[link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)>), any of the backrun swaps that involve a fee-on-transfer token could be problematic. #### Impact @@ -333,10 +336,10 @@ High. The router contract can lose funds when paying fees for fee-on-transfer to #### Recommendation If the router is redesigned to not hold fee-on-transfer tokens, the backrun would likely revert because the math is not designed for fee-on-transfer tokens. The easiest solution is to remove the `_backrunSwaps()` calls when a fee-on-transfer swap is involved. Another option is to write a new `_arb()` function that supports fee-on-transfer arbitrage. -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) ## Medium Findings @@ -344,12 +347,12 @@ If the router is redesigned to not hold fee-on-transfer tokens, the backrun woul If one of the backrun flashloan arbitrages fails to return a profit, the original swap is reverted. -#### Proof of concept +#### Proof of concept -These nes include the revert for each flashloan [[1]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)), [2]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol))]. +These nes include the revert for each flashloan [[1](<[link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)>), [2](<[link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)>)]. #### Impact - + Medium. While this will not involve a loss of user funds, it will result it a poor user experience when user swaps are unecessarily reverted. #### Recommendation @@ -381,7 +384,7 @@ The `_backrunSwaps()` function may loop through multiple swaps to arbitrage each #### Proof of concept -The `_bacruSwaps()` function [loops through the array of swaps]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol#L877). Imagine a scenario where `_backrunSwaps()` is called with a swaps array of length 4. Assume the 1st, 2nd, and 4th backrun swaps are profitable, but the 3rd backrun swap is not. Performing this series of four backrun swaps can still be net profitable even if one of the individual backrun swaps is not. The reason the 3rd backrun swap is not profitable may be because the flashloan fee costs more than the profit of this arb, which reverts [here]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol#L966) or [here]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)), or [a similar revert can happen]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)) if the router contract funds are used for the arb and the amount received is less than expected. +The `_bacruSwaps()` function [loops through the array of swaps]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol#L877). Imagine a scenario where `_backrunSwaps()` is called with a swaps array of length 4. Assume the 1st, 2nd, and 4th backrun swaps are profitable, but the 3rd backrun swap is not. Performing this series of four backrun swaps can still be net profitable even if one of the individual backrun swaps is not. The reason the 3rd backrun swap is not profitable may be because the flashloan fee costs more than the profit of this arb, which reverts [here]([link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol#L966) or [here](<[link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)>), or [a similar revert can happen](<[link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)>) if the router contract funds are used for the arb and the amount received is less than expected. The result is the transaction reverts and OpenMevRouter will miss out on the arb profits if the swaps had been completed even if one individual backrun swap wasn't profitable. @@ -403,7 +406,7 @@ Maximum approvals should be avoided, particularly when the necessary amount is k #### Impact -Low. Assuming nothing problematic occurs this is not a problem. However, it is a level of protection in case of attack. +Low. Assuming nothing problematic occurs this is not a problem. However, it is a level of protection in case of attack. #### Recommendation @@ -427,7 +430,6 @@ Low. It is unlikely that Aave will not have the necessary liquidity for the flas Check that Aave contains the necessary liquidity at the time of the flashloan as is done for Kashi. A fix is underway in [PR #40](/manifoldfinance/OpenMevRouter/pull/40). - ## Gas Savings Findings ### 1. Gas - Use `_isNonZero()` for gas savings (engn33r) @@ -437,8 +439,9 @@ There is a gas efficient `_isNonZero()` function that is not used in two places. #### Proof of Concept Two instances of this were found: -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol#L68) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol#L68) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) #### Impact @@ -455,11 +458,13 @@ Gas efficient functions `_inc()` and `_dec()` should be used to replace normal i #### Proof of concept There is one instance of an increment improvement: -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol#L66) + +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol#L66) There are two instances of a double decrement that could be replaced with `_dec(_decr())` or with `unchecked { length - 2; }`: -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/OpenMevLibrary.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/OpenMevLibrary.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/OpenMevLibrary.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/OpenMevLibrary.sol) #### Impact @@ -476,10 +481,11 @@ Bitshifting is cheaper than multiplication or division. Multiplication and divis #### Proof of concept There are two instance of divide by 2 operations that can use bitshifting for gas efficiency: -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/Uint512.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/Uint512.sol) #### Impact @@ -496,8 +502,9 @@ Initializing an int or uint to zero is unnecessary, because solidity defaults in #### Proof of Concept Several instances of this were found: -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libstd/OpenMevErrors.sol#L71 -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libstd/OpenMevErrors.sol#L71 +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) #### Impact @@ -514,9 +521,10 @@ If there is no risk of a function accidentally receiving ether, such as a functi #### Proof of concept The following functions have the onlyOwner modifier and can be marked as payable -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/TwoStepOwnable.sol#L66) -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/TwoStepOwnable.sol#L80) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/TwoStepOwnable.sol#L66) +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/TwoStepOwnable.sol#L80) #### Impact @@ -533,7 +541,8 @@ Using && logic in require statements uses more gas than using separate require s #### Proof of concept One instance of require with && logic was found: -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/ERC20.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/ERC20.sol) #### Impact @@ -550,7 +559,8 @@ Declaring constant with internal visibility is cheaper than public constants. Th #### Proof of concept The `bento` constant should be internal if possible: -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol#L89) + +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol#L89) #### Impact @@ -569,8 +579,9 @@ Custom errors are already used elsewhere in OpenMevRouter and are more gas-effic #### Proof of concept One in `_addLiquidity` (`require(amountAOptimal <= amountADesired);`) and another in `addLiquidityETH` (`require(IWETH(weth).transfer(pair, amountETH));`, which can be replaced with `safeTransfer` as is done in `swapExactETHForTokens`). -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) #### Impact @@ -686,12 +697,14 @@ Using msg.sender and msg.value without caching is slightly more gas efficient th #### Proof of concept msg.value is unnecessarily cached in: -- `addiquidityETH()` [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- `swapETHForExactToens()` [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- `swapETHAdStakeLiquidity()` [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) + +- `addiquidityETH()` [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- `swapETHForExactToens()` [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- `swapETHAdStakeLiquidity()` [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) msg.value can replace swaps[0].amountIn -- `swapExactETHForToens()` [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol#L564 and [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- `swapExactETHForToens()` [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol#L564 and [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) #### Impact @@ -722,6 +735,7 @@ Remove the `ensure()` call at the start of the ETH-related functions in OpenMevR ### 14. Gas - deadline special case not aligned with permit (engn33r) From EIP-2612: + ``` The deadline argument can be set to uint(-1) to create Permits that effectively never expire. ``` @@ -807,6 +821,7 @@ Gas savings #### Recommendation The revised code should read + ```solidity if (desiredTokenOutMin > ERC20(desiredToken).balanceOf(address(this))) { desiredSwapAmount = desiredTokenOutMin - ERC20(desiredToken).balanceOf(address(this)); @@ -841,6 +856,7 @@ Gas savings #### Recommendation Swap the variables around in line 1128 like this: + ```solidity (amount0Out, amount1Out) = (amount1Out, amount0Out); ``` @@ -872,11 +888,13 @@ If there is no profit realized from the flashloan arb, the flashloan should reve The revert logic for the kashi flashloan callback is currently: [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol)) + ```solidity if (amountOver < amountOwing) revert InsufficientOutputAmount(); ``` Instead, the revert should also happen on the equality case: + ```solidity if (amountOver <= amountOwing) revert InsufficientOutputAmount(); ``` @@ -902,7 +920,6 @@ OpenMevRouter should also inherit from IFlashBorrower and IOpenMevRouter aside f Type safety. - ### 2. Informational - The ETHERSCAN_API key is present in plaintext (Jackson) `ETHERSCAN_API` is present in plaintext in test_Swaps.py @@ -911,10 +928,9 @@ Type safety. Malicious use of your Etherscan API key. - ### 3. Informational - SafeTransferLib does not match Solmate's main branch (Jackson) -The SafeTransferLib does not match Solmate's latest implementation. Consider whether an update would be useful or save gas. +The SafeTransferLib does not match Solmate's latest implementation. Consider whether an update would be useful or save gas. #### Impact @@ -946,14 +962,16 @@ Constant variables should be used in place of magic numbers to prevent typos. Fo #### Proof of concept There are many instances of the value 1000. Consider replacing this magic number with a constant internal variable named MINIMUM_LIQUIDITY [like Uniswap does](/Uniswap/v2-core/blob/8b82b04a0b9e696c0e83f8b2f00e5d7be6888c79/contracts/UniswapV2Pair.sol#L15): -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol#L57-L58) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol#L57-L58) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevZapper.sol) Other instances of magic numbers are found in `calcCoeffs()`: -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/OpenMevLibrary.sol-427) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/OpenMevLibrary.sol-427) #### Impact @@ -969,8 +987,8 @@ Use constant variables instead of magic numbers #### Proof of concept -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/OpenMevLibrary.sol#L28) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/OpenMevLibrary.sol#L28) #### Impact @@ -1006,12 +1024,14 @@ There is one inconsistent instance of WETH transfer. Consider using a consistent #### Proof of concept The one instance of a WETH transfer with `require(IWETH(weth).transfer(pair, amount));` -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) All other instances use `IWETH(weth).deposit{ value: amount }();` -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) #### Impact @@ -1035,12 +1055,14 @@ Furthermore, the `safeApprove()` function is deprecated per OpenZeppelin docs: #### Proof of concept One relevant `safeApprove()` call was found: -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) Permit is used in several functions in OpenMevRouter.sol: -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) #### Impact @@ -1074,7 +1096,8 @@ The list of tokens that can be flashloaned with Kashi is assumed to be the same #### Proof of concept The logic to backrun a swap happens if either there is sufficient token balance in the router that no flashloan is needed, or the token can be flashloaned from Aave. There is no separate list of Kashi-supported flashloanable tokens. Only a list of Aave flashloanable tokens exists. -- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) + +- [ref](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/OpenMevRouter.sol) #### Impact @@ -1084,14 +1107,15 @@ Informational Add a list of Kashi flashloanable tokens to allow profitable backruns if Kashi supports more flashloanable tokens than Aave. -### 12. Informational - (engn33r) +### 12. Informational - (engn33r) The `add512x512()` additional function has a comment copied from `sub512x512()` which reads "Calculates the difference of two uint512". It should instead read "Calculates the sum of two uint512". #### Proof of concept Incorrect comment for `add512x512()`: -- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/Uint512.sol#L67 + +- [link](manifoldfinance/OpenMevRouter/blob/8648277c0a89d0091f959948682543bdcf0c280b/contracts/libraries/Uint512.sol#L67 #### Impact @@ -1109,11 +1133,10 @@ The custom logic around the backrun to capture MEV and the corresponding whitepa ### Jackson -This is one of those ideas that you think "why didn't I think of that?". I'm excited for it to go into production and see what the effects will be for both users and holders of Sushi. The number, type, and breadth of tests give me confidence in the correctness of the implementation. My only concerns are around whether we missed something related to the intention of the implementation as most of the high and medium findings seem to suggest. - +This is one of those ideas that you think "why didn't I think of that?". I'm excited for it to go into production and see what the effects will be for both users and holders of Sushi. The number, type, and breadth of tests give me confidence in the correctness of the implementation. My only concerns are around whether we missed something related to the intention of the implementation as most of the high and medium findings seem to suggest. ## About yAcademy -yAcademy is an ecosystem initiative started by Yearn Finance and its ecosystem partners to bootstrap sustainable and collaborative blockchain security reviews and to nurture aspiring security talent. yAcademy includes a fellowship program and a residents program. In the fellowship program, fellows perform a series of periodic security reviews and presentations during the program. Residents are past fellows who continue to gain experience by performing security reviews of contracts submitted to yAcademy for review (such as this contract). +yAcademy is an ecosystem initiative started by Yearn Finance and its ecosystem partners to bootstrap sustainable and collaborative blockchain security reviews and to nurture aspiring security talent. yAcademy includes a fellowship program and a residents program. In the fellowship program, fellows perform a series of periodic security reviews and presentations during the program. Residents are past fellows who continue to gain experience by performing security reviews of contracts submitted to yAcademy for review (such as this contract). ## Appendix and FAQ diff --git a/docs/router/index.md b/docs/router/index.md new file mode 100644 index 0000000..b6a718f --- /dev/null +++ b/docs/router/index.md @@ -0,0 +1,87 @@ +--- +id: doc-openmev +title: OpenMEV +hide_title: false +hide_table_of_contents: false +sidebar_label: OpenMEV +sidebar_position: 1 +pagination_label: Introduction +description: OpenMEV Specification +keywords: + - technical + - specification + - openmev + - flashbots + - mev +--- + +# OpenMEV Protocol Overview + +🕵️ Full privacy <br /> 🛡️ Front running protection <br /> 💰 No more costly reverts <br /> 💰 Get rebated most of your +transaction cost back <br /> + +### How OpenMEV works + +The client publishes the serialized transaction signed (via `eth_sign` or `eth_signTransaction`) by the user to our +backend using the backend repeatedly publishes the transaction, each block, to participating miners, this includes Eden +Network and Flash bots. Transaction status updates can be requested via JSON-RPC or automatically relayed to the client +with the SDK. A user can cancel an unconfirmed transaction at any time for free, and reverted transactions cost no gas + +### Platform Documentation + +- Strategy and Implementation details +- End User information +- Help Desk and Troubleshooting +- Searcher Integration +- Formulas and Proofs +- Technical: Technical overview on specific category + +### What is OpenMEV? + +OpenMEV provides a trading proxy engine that is used to protect your transactions and maximize profits on the blockchain +network. It aims to provide traders, arbitrageurs and block producers with an accessible, convenient and secure +infrastructure for transactions. + +- More accessible: allow ordinary users to easily discover the trading risk and value on the blockchain network + +- More convenient: enable the arbitrage traders more opportunities to increase profits at a low-cost More secure: make + transactions on the blockchain network more secure and private. + +### What public services does OpenMEV provide? + +**Trading Proxy**: A private trading proxy that supports private communication between traders and block producers, can +be used for efficient transaction protection and value maximization. + +**OpenMEV Explorer**: A set of tools used to improve the transparency of profit opportunities on the blockchain network +and reduce information asymmetry. + +## Status of Services + +[Check our statuspage via status.manifoldfinance.com](https://status.manifoldfinance.com/) + +## SushiSwap + +The SushiSwap integration provides a service that realizes profit by transaction batching for the purposes of arbitrage +by controlling transaction ordering. + +Right now every user sends a transaction directly to the network mempool and thus give away the arbitrage, +front-running, back-running opportunities to miners(or random bots). + +OpenMEV provides a credibly neutral platform that enables aggregation of transactions (batching) for the purposes of +extracting MEV profits and returning them back to the traders. + +### What is `credible neutrality`? + +> "...that it is not just neutrality that is required here, it is credible neutrality. That is, it is not just enough +> for a mechanism to not be designed to favor specific people or outcomes over others; it’s also crucially important for +> a mechanism to be able to convince a large and diverse group of people that the mechanism at least makes that basic +> effort to be fair." +> +> - Vitalik Buterin, [credible neutrality as a guiding principle](https://nakamoto.com/credible-neutrality/) + +This ethos is at the heart of OpenMEV. Part of establishing credible neutrality is having a clear and comprehensive rule +book that regulates off-chain behavior and activities. Our assumption concerning governance is that methods and +processes that work in legacy markets may not be applicable in adversarial environments such as permissionless +blockchains. With that understanding it is important not to rely solely on such systems and mechanics long term. + +Discuss this and more on our [discourse forums](https://forums.manifoldfinance.com) diff --git a/docs/router/interfaces/IBentoBoxV1.md b/docs/router/interfaces/IBentoBoxV1.md new file mode 100644 index 0000000..2cb153f --- /dev/null +++ b/docs/router/interfaces/IBentoBoxV1.md @@ -0,0 +1,40 @@ +# IBentoBoxV1 + +Minimal interface for BentoBox token vault (V1) interactions + +## Methods + +### flashLoan + +```solidity +function flashLoan(contract IFlashBorrower borrower, address receiver, address token, uint256 amount, bytes data) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| -------- | ----------------------- | ----------- | +| borrower | contract IFlashBorrower | undefined | +| receiver | address | undefined | +| token | address | undefined | +| amount | uint256 | undefined | +| data | bytes | undefined | + +### totals + +```solidity +function totals(address token) external nonpayable returns (uint128 elastic, uint128 base) +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| token | address | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| elastic | uint128 | undefined | +| base | uint128 | undefined | diff --git a/docs/router/interfaces/IFlashBorrower.md b/docs/router/interfaces/IFlashBorrower.md new file mode 100644 index 0000000..793af79 --- /dev/null +++ b/docs/router/interfaces/IFlashBorrower.md @@ -0,0 +1,21 @@ +# IFlashBorrower + +## Methods + +### onFlashLoan + +```solidity +function onFlashLoan(address sender, address token, uint256 amount, uint256 fee, bytes data) external nonpayable +``` + +The flashloan callback. `amount` + `fee` needs to repayed to msg.sender before this call returns. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ------------------------------------------------------------------------------------ | +| sender | address | The address of the invoker of this flashloan. | +| token | address | The address of the token that is loaned. | +| amount | uint256 | of the `token` that is loaned. | +| fee | uint256 | The fee that needs to be paid on top for this loan. Needs to be the same as `token`. | +| data | bytes | Additional data that was passed to the flashloan function. | diff --git a/docs/router/interfaces/ILendingPool.md b/docs/router/interfaces/ILendingPool.md new file mode 100644 index 0000000..ddec46a --- /dev/null +++ b/docs/router/interfaces/ILendingPool.md @@ -0,0 +1,37 @@ +# ILendingPool + +## Methods + +### flashLoan + +```solidity +function flashLoan(address receiverAddress, address[] assets, uint256[] amounts, uint256[] modes, address onBehalfOf, bytes params, uint16 referralCode) external nonpayable +``` + +_Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a +fee is returned. IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept +into consideration. For further details please visit https://developers.aave.com_ + +#### Parameters + +| Name | Type | Description | +| --------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| receiverAddress | address | The address of the contract receiving the funds, implementing the IFlashLoanReceiver interface | +| assets | address[] | The addresses of the assets being flash-borrowed | +| amounts | uint256[] | The amounts amounts being flash-borrowed | +| modes | uint256[] | Types of the debt to open if the flash loan is not returned: 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address | +| onBehalfOf | address | The address that will receive the debt in the case of using on `modes` 1 or 2 | +| params | bytes | Variadic packed params to pass to the receiver as extra information | +| referralCode | uint16 | Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without any middle-man\* | + +### getReservesList + +```solidity +function getReservesList() external view returns (address[]) +``` + +#### Returns + +| Name | Type | Description | +| ---- | --------- | ----------- | +| \_0 | address[] | undefined | diff --git a/docs/router/interfaces/ILendingPoolAddressesProvider.md b/docs/router/interfaces/ILendingPoolAddressesProvider.md new file mode 100644 index 0000000..3416572 --- /dev/null +++ b/docs/router/interfaces/ILendingPoolAddressesProvider.md @@ -0,0 +1,335 @@ +# ILendingPoolAddressesProvider + +\*Aave\*\* + +> LendingPoolAddressesProvider contract + +_Main registry of addresses part of or connected to the protocol, including permissioned roles - Acting also as factory +of proxies and admin of those, so with right to change its implementations - Owned by the Aave Governance_ + +## Methods + +### getAddress + +```solidity +function getAddress(bytes32 id) external view returns (address) +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| id | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getEmergencyAdmin + +```solidity +function getEmergencyAdmin() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getLendingPool + +```solidity +function getLendingPool() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getLendingPoolCollateralManager + +```solidity +function getLendingPoolCollateralManager() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getLendingPoolConfigurator + +```solidity +function getLendingPoolConfigurator() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getLendingRateOracle + +```solidity +function getLendingRateOracle() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getPoolAdmin + +```solidity +function getPoolAdmin() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getPriceOracle + +```solidity +function getPriceOracle() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### setAddress + +```solidity +function setAddress(bytes32 id, address newAddress) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| id | bytes32 | undefined | +| newAddress | address | undefined | + +### setAddressAsProxy + +```solidity +function setAddressAsProxy(bytes32 id, address impl) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| id | bytes32 | undefined | +| impl | address | undefined | + +### setEmergencyAdmin + +```solidity +function setEmergencyAdmin(address admin) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| admin | address | undefined | + +### setLendingPoolCollateralManager + +```solidity +function setLendingPoolCollateralManager(address manager) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ----------- | +| manager | address | undefined | + +### setLendingPoolConfiguratorImpl + +```solidity +function setLendingPoolConfiguratorImpl(address configurator) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | ------- | ----------- | +| configurator | address | undefined | + +### setLendingPoolImpl + +```solidity +function setLendingPoolImpl(address pool) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| pool | address | undefined | + +### setLendingRateOracle + +```solidity +function setLendingRateOracle(address lendingRateOracle) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ----------------- | ------- | ----------- | +| lendingRateOracle | address | undefined | + +### setPoolAdmin + +```solidity +function setPoolAdmin(address admin) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| admin | address | undefined | + +### setPriceOracle + +```solidity +function setPriceOracle(address priceOracle) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| priceOracle | address | undefined | + +## Events + +### AddressSet + +```solidity +event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| id | bytes32 | undefined | +| newAddress `indexed` | address | undefined | +| hasProxy | bool | undefined | + +### ConfigurationAdminUpdated + +```solidity +event ConfigurationAdminUpdated(address indexed newAddress) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| newAddress `indexed` | address | undefined | + +### EmergencyAdminUpdated + +```solidity +event EmergencyAdminUpdated(address indexed newAddress) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| newAddress `indexed` | address | undefined | + +### LendingPoolCollateralManagerUpdated + +```solidity +event LendingPoolCollateralManagerUpdated(address indexed newAddress) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| newAddress `indexed` | address | undefined | + +### LendingPoolConfiguratorUpdated + +```solidity +event LendingPoolConfiguratorUpdated(address indexed newAddress) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| newAddress `indexed` | address | undefined | + +### LendingPoolUpdated + +```solidity +event LendingPoolUpdated(address indexed newAddress) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| newAddress `indexed` | address | undefined | + +### LendingRateOracleUpdated + +```solidity +event LendingRateOracleUpdated(address indexed newAddress) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| newAddress `indexed` | address | undefined | + +### PriceOracleUpdated + +```solidity +event PriceOracleUpdated(address indexed newAddress) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| newAddress `indexed` | address | undefined | + +### ProxyCreated + +```solidity +event ProxyCreated(bytes32 id, address indexed newAddress) +``` + +#### Parameters + +| Name | Type | Description | +| -------------------- | ------- | ----------- | +| id | bytes32 | undefined | +| newAddress `indexed` | address | undefined | diff --git a/docs/router/interfaces/IOpenMevRouter.md b/docs/router/interfaces/IOpenMevRouter.md new file mode 100644 index 0000000..c9eb327 --- /dev/null +++ b/docs/router/interfaces/IOpenMevRouter.md @@ -0,0 +1,500 @@ +# IOpenMevRouter + +## Methods + +### addLiquidity + +```solidity +function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external nonpayable returns (uint256 amountA, uint256 amountB, uint256 liquidity) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| amountADesired | uint256 | undefined | +| amountBDesired | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | +| liquidity | uint256 | undefined | + +### addLiquidityETH + +```solidity +function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) +``` + +#### Parameters + +| Name | Type | Description | +| ------------------ | ------- | ----------- | +| token | address | undefined | +| amountTokenDesired | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | +| liquidity | uint256 | undefined | + +### getAmountIn + +```solidity +function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amountOut | uint256 | undefined | +| reserveIn | uint256 | undefined | +| reserveOut | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| -------- | ------- | ----------- | +| amountIn | uint256 | undefined | + +### getAmountOut + +```solidity +function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amountIn | uint256 | undefined | +| reserveIn | uint256 | undefined | +| reserveOut | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountOut | uint256 | undefined | + +### getAmountsIn + +```solidity +function getAmountsIn(uint256 amountOut, address[] path) external view returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| path | address[] | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### getAmountsOut + +```solidity +function getAmountsOut(uint256 amountIn, address[] path) external view returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | --------- | ----------- | +| amountIn | uint256 | undefined | +| path | address[] | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### harvest + +```solidity +function harvest(uint256 percentage, address[] tokens, address[] receivers) external payable +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | --------- | ----------- | +| percentage | uint256 | undefined | +| tokens | address[] | undefined | +| receivers | address[] | undefined | + +### quote + +```solidity +function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | ------- | ----------- | +| amountA | uint256 | undefined | +| reserveA | uint256 | undefined | +| reserveB | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountB | uint256 | undefined | + +### removeLiquidity + +```solidity +function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external nonpayable returns (uint256 amountA, uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| liquidity | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | + +### removeLiquidityETH + +```solidity +function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external nonpayable returns (uint256 amountToken, uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | + +### removeLiquidityETHSupportingFeeOnTransferTokens + +```solidity +function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external nonpayable returns (uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountETH | uint256 | undefined | + +### removeLiquidityETHWithPermit + +```solidity +function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountToken, uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | +| approveMax | bool | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | + +### removeLiquidityETHWithPermitSupportingFeeOnTransferTokens + +```solidity +function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | +| approveMax | bool | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountETH | uint256 | undefined | + +### removeLiquidityWithPermit + +```solidity +function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountA, uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| liquidity | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | +| approveMax | bool | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | + +### swapETHForExactTokens + +```solidity +function swapETHForExactTokens(uint256 amountOut, address[] path, address to, uint256 deadline) external payable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactETHForTokens + +```solidity +function swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) external payable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactETHForTokensSupportingFeeOnTransferTokens + +```solidity +function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) external payable +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +### swapExactTokensForETH + +```solidity +function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactTokensForETHSupportingFeeOnTransferTokens + +```solidity +function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +### swapExactTokensForTokens + +```solidity +function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactTokensForTokensSupportingFeeOnTransferTokens + +```solidity +function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +### swapTokensForExactETH + +```solidity +function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| amountInMax | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapTokensForExactTokens + +```solidity +function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| amountInMax | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | diff --git a/docs/router/interfaces/IProtocolDataProvider.md b/docs/router/interfaces/IProtocolDataProvider.md new file mode 100644 index 0000000..3f99629 --- /dev/null +++ b/docs/router/interfaces/IProtocolDataProvider.md @@ -0,0 +1,21 @@ +# IProtocolDataProvider + +## Methods + +### getReserveData + +```solidity +function getReserveData(address asset) external view returns (uint256 availableLiquidity) +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| asset | address | undefined | + +#### Returns + +| Name | Type | Description | +| ------------------ | ------- | ----------- | +| availableLiquidity | uint256 | undefined | diff --git a/docs/router/interfaces/IUniswapV2Factory.md b/docs/router/interfaces/IUniswapV2Factory.md new file mode 100644 index 0000000..f18d23f --- /dev/null +++ b/docs/router/interfaces/IUniswapV2Factory.md @@ -0,0 +1,136 @@ +# IUniswapV2Factory + +## Methods + +### allPairs + +```solidity +function allPairs(uint256) external view returns (address pair) +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| pair | address | undefined | + +### allPairsLength + +```solidity +function allPairsLength() external view returns (uint256) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### createPair + +```solidity +function createPair(address tokenA, address tokenB) external nonpayable returns (address pair) +``` + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| pair | address | undefined | + +### feeTo + +```solidity +function feeTo() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### feeToSetter + +```solidity +function feeToSetter() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getPair + +```solidity +function getPair(address tokenA, address tokenB) external view returns (address pair) +``` + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| pair | address | undefined | + +### setFeeTo + +```solidity +function setFeeTo(address) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### setFeeToSetter + +```solidity +function setFeeToSetter(address) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +## Events + +### PairCreated + +```solidity +event PairCreated(address indexed token0, address indexed token1, address pair, uint256) +``` + +#### Parameters + +| Name | Type | Description | +| ---------------- | ------- | ----------- | +| token0 `indexed` | address | undefined | +| token1 `indexed` | address | undefined | +| pair | address | undefined | +| \_3 | uint256 | undefined | diff --git a/docs/router/interfaces/IUniswapV2Pair.md b/docs/router/interfaces/IUniswapV2Pair.md new file mode 100644 index 0000000..39585dd --- /dev/null +++ b/docs/router/interfaces/IUniswapV2Pair.md @@ -0,0 +1,476 @@ +# IUniswapV2Pair + +## Methods + +### DOMAIN_SEPARATOR + +```solidity +function DOMAIN_SEPARATOR() external view returns (bytes32) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | bytes32 | undefined | + +### MINIMUM_LIQUIDITY + +```solidity +function MINIMUM_LIQUIDITY() external pure returns (uint256) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### PERMIT_TYPEHASH + +```solidity +function PERMIT_TYPEHASH() external pure returns (bytes32) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | bytes32 | undefined | + +### allowance + +```solidity +function allowance(address owner, address spender) external view returns (uint256) +``` + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ----------- | +| owner | address | undefined | +| spender | address | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### approve + +```solidity +function approve(address spender, uint256 value) external nonpayable returns (bool) +``` + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ----------- | +| spender | address | undefined | +| value | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ---- | ----------- | +| \_0 | bool | undefined | + +### balanceOf + +```solidity +function balanceOf(address owner) external view returns (uint256) +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| owner | address | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### burn + +```solidity +function burn(address to) external nonpayable returns (uint256 amount0, uint256 amount1) +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| to | address | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amount0 | uint256 | undefined | +| amount1 | uint256 | undefined | + +### decimals + +```solidity +function decimals() external pure returns (uint8) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ----- | ----------- | +| \_0 | uint8 | undefined | + +### factory + +```solidity +function factory() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getReserves + +```solidity +function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) +``` + +#### Returns + +| Name | Type | Description | +| ------------------ | ------- | ----------- | +| reserve0 | uint112 | undefined | +| reserve1 | uint112 | undefined | +| blockTimestampLast | uint32 | undefined | + +### initialize + +```solidity +function initialize(address, address) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | +| \_1 | address | undefined | + +### kLast + +```solidity +function kLast() external view returns (uint256) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### mint + +```solidity +function mint(address to) external nonpayable returns (uint256 liquidity) +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| to | address | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| liquidity | uint256 | undefined | + +### name + +```solidity +function name() external pure returns (string) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------ | ----------- | +| \_0 | string | undefined | + +### nonces + +```solidity +function nonces(address owner) external view returns (uint256) +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| owner | address | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### permit + +```solidity +function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| -------- | ------- | ----------- | +| owner | address | undefined | +| spender | address | undefined | +| value | uint256 | undefined | +| deadline | uint256 | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +### price0CumulativeLast + +```solidity +function price0CumulativeLast() external view returns (uint256) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### price1CumulativeLast + +```solidity +function price1CumulativeLast() external view returns (uint256) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### skim + +```solidity +function skim(address to) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| to | address | undefined | + +### swap + +```solidity +function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amount0Out | uint256 | undefined | +| amount1Out | uint256 | undefined | +| to | address | undefined | +| data | bytes | undefined | + +### symbol + +```solidity +function symbol() external pure returns (string) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------ | ----------- | +| \_0 | string | undefined | + +### sync + +```solidity +function sync() external nonpayable +``` + +### token0 + +```solidity +function token0() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### token1 + +```solidity +function token1() external view returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### totalSupply + +```solidity +function totalSupply() external view returns (uint256) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | + +### transfer + +```solidity +function transfer(address to, uint256 value) external nonpayable returns (bool) +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| to | address | undefined | +| value | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ---- | ----------- | +| \_0 | bool | undefined | + +### transferFrom + +```solidity +function transferFrom(address from, address to, uint256 value) external nonpayable returns (bool) +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| from | address | undefined | +| to | address | undefined | +| value | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ---- | ----------- | +| \_0 | bool | undefined | + +## Events + +### Approval + +```solidity +event Approval(address indexed owner, address indexed spender, uint256 value) +``` + +#### Parameters + +| Name | Type | Description | +| ----------------- | ------- | ----------- | +| owner `indexed` | address | undefined | +| spender `indexed` | address | undefined | +| value | uint256 | undefined | + +### Burn + +```solidity +event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to) +``` + +#### Parameters + +| Name | Type | Description | +| ---------------- | ------- | ----------- | +| sender `indexed` | address | undefined | +| amount0 | uint256 | undefined | +| amount1 | uint256 | undefined | +| to `indexed` | address | undefined | + +### Mint + +```solidity +event Mint(address indexed sender, uint256 amount0, uint256 amount1) +``` + +#### Parameters + +| Name | Type | Description | +| ---------------- | ------- | ----------- | +| sender `indexed` | address | undefined | +| amount0 | uint256 | undefined | +| amount1 | uint256 | undefined | + +### Swap + +```solidity +event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to) +``` + +#### Parameters + +| Name | Type | Description | +| ---------------- | ------- | ----------- | +| sender `indexed` | address | undefined | +| amount0In | uint256 | undefined | +| amount1In | uint256 | undefined | +| amount0Out | uint256 | undefined | +| amount1Out | uint256 | undefined | +| to `indexed` | address | undefined | + +### Sync + +```solidity +event Sync(uint112 reserve0, uint112 reserve1) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | ------- | ----------- | +| reserve0 | uint112 | undefined | +| reserve1 | uint112 | undefined | + +### Transfer + +```solidity +event Transfer(address indexed from, address indexed to, uint256 value) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| from `indexed` | address | undefined | +| to `indexed` | address | undefined | +| value | uint256 | undefined | diff --git a/docs/router/interfaces/IUniswapV2Router01.md b/docs/router/interfaces/IUniswapV2Router01.md new file mode 100644 index 0000000..6c6a0d3 --- /dev/null +++ b/docs/router/interfaces/IUniswapV2Router01.md @@ -0,0 +1,413 @@ +# IUniswapV2Router01 + +## Methods + +### WETH9 + +```solidity +function WETH9() external pure returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### addLiquidity + +```solidity +function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external nonpayable returns (uint256 amountA, uint256 amountB, uint256 liquidity) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| amountADesired | uint256 | undefined | +| amountBDesired | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | +| liquidity | uint256 | undefined | + +### addLiquidityETH + +```solidity +function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) +``` + +#### Parameters + +| Name | Type | Description | +| ------------------ | ------- | ----------- | +| token | address | undefined | +| amountTokenDesired | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | +| liquidity | uint256 | undefined | + +### factory + +```solidity +function factory() external pure returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getAmountIn + +```solidity +function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amountOut | uint256 | undefined | +| reserveIn | uint256 | undefined | +| reserveOut | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| -------- | ------- | ----------- | +| amountIn | uint256 | undefined | + +### getAmountOut + +```solidity +function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amountIn | uint256 | undefined | +| reserveIn | uint256 | undefined | +| reserveOut | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountOut | uint256 | undefined | + +### getAmountsIn + +```solidity +function getAmountsIn(uint256 amountOut, address[] path) external view returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| path | address[] | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### getAmountsOut + +```solidity +function getAmountsOut(uint256 amountIn, address[] path) external view returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | --------- | ----------- | +| amountIn | uint256 | undefined | +| path | address[] | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### quote + +```solidity +function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | ------- | ----------- | +| amountA | uint256 | undefined | +| reserveA | uint256 | undefined | +| reserveB | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountB | uint256 | undefined | + +### removeLiquidity + +```solidity +function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external nonpayable returns (uint256 amountA, uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| liquidity | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | + +### removeLiquidityETH + +```solidity +function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external nonpayable returns (uint256 amountToken, uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | + +### removeLiquidityETHWithPermit + +```solidity +function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountToken, uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | +| approveMax | bool | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | + +### removeLiquidityWithPermit + +```solidity +function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountA, uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| liquidity | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | +| approveMax | bool | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | + +### swapETHForExactTokens + +```solidity +function swapETHForExactTokens(uint256 amountOut, address[] path, address to, uint256 deadline) external payable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactETHForTokens + +```solidity +function swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) external payable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactTokensForETH + +```solidity +function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactTokensForTokens + +```solidity +function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapTokensForExactETH + +```solidity +function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| amountInMax | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapTokensForExactTokens + +```solidity +function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| amountInMax | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | diff --git a/docs/router/interfaces/IUniswapV2Router02.md b/docs/router/interfaces/IUniswapV2Router02.md new file mode 100644 index 0000000..1c7cc21 --- /dev/null +++ b/docs/router/interfaces/IUniswapV2Router02.md @@ -0,0 +1,510 @@ +# IUniswapV2Router02 + +## Methods + +### WETH9 + +```solidity +function WETH9() external pure returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### addLiquidity + +```solidity +function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external nonpayable returns (uint256 amountA, uint256 amountB, uint256 liquidity) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| amountADesired | uint256 | undefined | +| amountBDesired | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | +| liquidity | uint256 | undefined | + +### addLiquidityETH + +```solidity +function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) +``` + +#### Parameters + +| Name | Type | Description | +| ------------------ | ------- | ----------- | +| token | address | undefined | +| amountTokenDesired | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | +| liquidity | uint256 | undefined | + +### factory + +```solidity +function factory() external pure returns (address) +``` + +#### Returns + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | address | undefined | + +### getAmountIn + +```solidity +function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amountOut | uint256 | undefined | +| reserveIn | uint256 | undefined | +| reserveOut | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| -------- | ------- | ----------- | +| amountIn | uint256 | undefined | + +### getAmountOut + +```solidity +function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| amountIn | uint256 | undefined | +| reserveIn | uint256 | undefined | +| reserveOut | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountOut | uint256 | undefined | + +### getAmountsIn + +```solidity +function getAmountsIn(uint256 amountOut, address[] path) external view returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| path | address[] | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### getAmountsOut + +```solidity +function getAmountsOut(uint256 amountIn, address[] path) external view returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | --------- | ----------- | +| amountIn | uint256 | undefined | +| path | address[] | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### quote + +```solidity +function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| -------- | ------- | ----------- | +| amountA | uint256 | undefined | +| reserveA | uint256 | undefined | +| reserveB | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountB | uint256 | undefined | + +### removeLiquidity + +```solidity +function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external nonpayable returns (uint256 amountA, uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| liquidity | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | + +### removeLiquidityETH + +```solidity +function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external nonpayable returns (uint256 amountToken, uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | + +### removeLiquidityETHSupportingFeeOnTransferTokens + +```solidity +function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external nonpayable returns (uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountETH | uint256 | undefined | + +### removeLiquidityETHWithPermit + +```solidity +function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountToken, uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | +| approveMax | bool | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| ----------- | ------- | ----------- | +| amountToken | uint256 | undefined | +| amountETH | uint256 | undefined | + +### removeLiquidityETHWithPermitSupportingFeeOnTransferTokens + +```solidity +function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountETH) +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ----------- | +| token | address | undefined | +| liquidity | uint256 | undefined | +| amountTokenMin | uint256 | undefined | +| amountETHMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | +| approveMax | bool | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| --------- | ------- | ----------- | +| amountETH | uint256 | undefined | + +### removeLiquidityWithPermit + +```solidity +function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external nonpayable returns (uint256 amountA, uint256 amountB) +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------- | +| tokenA | address | undefined | +| tokenB | address | undefined | +| liquidity | uint256 | undefined | +| amountAMin | uint256 | undefined | +| amountBMin | uint256 | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | +| approveMax | bool | undefined | +| v | uint8 | undefined | +| r | bytes32 | undefined | +| s | bytes32 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | ------- | ----------- | +| amountA | uint256 | undefined | +| amountB | uint256 | undefined | + +### swapETHForExactTokens + +```solidity +function swapETHForExactTokens(uint256 amountOut, address[] path, address to, uint256 deadline) external payable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| --------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactETHForTokens + +```solidity +function swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) external payable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactETHForTokensSupportingFeeOnTransferTokens + +```solidity +function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) external payable +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +### swapExactTokensForETH + +```solidity +function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactTokensForETHSupportingFeeOnTransferTokens + +```solidity +function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +### swapExactTokensForTokens + +```solidity +function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapExactTokensForTokensSupportingFeeOnTransferTokens + +```solidity +function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ------------ | --------- | ----------- | +| amountIn | uint256 | undefined | +| amountOutMin | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +### swapTokensForExactETH + +```solidity +function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| amountInMax | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | + +### swapTokensForExactTokens + +```solidity +function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) external nonpayable returns (uint256[] amounts) +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | --------- | ----------- | +| amountOut | uint256 | undefined | +| amountInMax | uint256 | undefined | +| path | address[] | undefined | +| to | address | undefined | +| deadline | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ------- | --------- | ----------- | +| amounts | uint256[] | undefined | diff --git a/docs/router/interfaces/IWETH.md b/docs/router/interfaces/IWETH.md new file mode 100644 index 0000000..d6f744c --- /dev/null +++ b/docs/router/interfaces/IWETH.md @@ -0,0 +1,40 @@ +# IWETH + +## Methods + +### deposit + +```solidity +function deposit() external payable +``` + +### transfer + +```solidity +function transfer(address to, uint256 value) external nonpayable returns (bool) +``` + +#### Parameters + +| Name | Type | Description | +| ----- | ------- | ----------- | +| to | address | undefined | +| value | uint256 | undefined | + +#### Returns + +| Name | Type | Description | +| ---- | ---- | ----------- | +| \_0 | bool | undefined | + +### withdraw + +```solidity +function withdraw(uint256) external nonpayable +``` + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ----------- | +| \_0 | uint256 | undefined | diff --git a/docs/router/libraries/Babylonian.md b/docs/router/libraries/Babylonian.md new file mode 100644 index 0000000..5b7353b --- /dev/null +++ b/docs/router/libraries/Babylonian.md @@ -0,0 +1 @@ +# Babylonian diff --git a/docs/router/libraries/OpenMevLibrary.md b/docs/router/libraries/OpenMevLibrary.md new file mode 100644 index 0000000..cd6190d --- /dev/null +++ b/docs/router/libraries/OpenMevLibrary.md @@ -0,0 +1,45 @@ +# OpenMevLibrary + +_Sandy Bradley <sandy@manifoldx.com>, Sam Bacha <sam@manifoldfinance.com>_ + +> OpenMevLibrary + +Optimal MEV library to support OpenMevRouter + +## Errors + +### IdenticalAddresses + +```solidity +error IdenticalAddresses() +``` + +### InsufficientLiquidity + +```solidity +error InsufficientLiquidity() +``` + +### InvalidPath + +```solidity +error InvalidPath() +``` + +### Overflow + +```solidity +error Overflow() +``` + +### ZeroAddress + +```solidity +error ZeroAddress() +``` + +### ZeroAmount + +```solidity +error ZeroAmount() +``` diff --git a/docs/router/libraries/SafeTransferLib.md b/docs/router/libraries/SafeTransferLib.md new file mode 100644 index 0000000..3cb4281 --- /dev/null +++ b/docs/router/libraries/SafeTransferLib.md @@ -0,0 +1,10 @@ +# SafeTransferLib + +_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)Modified from Gnosis +(https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol)_ + +Safe ETH and ERC20 transfer library that gracefully handles missing return values. + +_Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory +pointer.Note that none of the functions in this library check that a token has code at all! That responsibility is +delegated to the caller._ diff --git a/docs/router/libraries/Uint512.md b/docs/router/libraries/Uint512.md new file mode 100644 index 0000000..1ef24e7 --- /dev/null +++ b/docs/router/libraries/Uint512.md @@ -0,0 +1 @@ +# Uint512 diff --git a/docs/simple-api.md b/docs/simple-api.md index e6f5999..7c83761 100644 --- a/docs/simple-api.md +++ b/docs/simple-api.md @@ -12,8 +12,8 @@ OpenMEV provides HTTP endpoints to interact with the reputation service and HTTP This is a Quick Start like guide, please see the official reference API specification for a full rundown. -:::tip -If you want to use the OpenMEV APIs with a JavaScript library you can also use the npm package [`libmev`](https://github.com/manifoldfinance/libmev). +:::tip +If you want to use the OpenMEV APIs with a JavaScript library you can also use the npm package [`libmev`](https://github.com/manifoldfinance/libmev). ::: ## Block parameters: @@ -31,11 +31,11 @@ The block parameter can have the following values: Use `eth_subscribe` to create subscriptions for the following event types: -- New headers -- Logs -- Pending transactions -- Dropped transactions -- Synchronizing +- New headers +- Logs +- Pending transactions +- Dropped transactions +- Synchronizing > TIP Use `mev_subscribe` to create subscriptions for logs on private transactions. @@ -143,45 +143,45 @@ curl -X POST 'https://api.sushirelay.com/v1' \ ```jsonc { - "id": "83", - "jsonrpc": "2.0", - "result": "0xdef739" + "id": "83", + "jsonrpc": "2.0", + "result": "0xdef739" } ``` #### Example: Javascript `eth_blockNumber` ```javascript -const axios = require('axios'); +const axios = require("axios"); let data = JSON.stringify({ - jsonrpc: '2.0', - method: 'eth_blockNumber', - params: [], - id: 83, + jsonrpc: "2.0", + method: "eth_blockNumber", + params: [], + id: 83, }); const config = { - method: 'post', - url: 'https://api.sushirelay.com/v1', - headers: { - 'Content-Type': 'application/json', - }, - timeout: 1000, - data: data, + method: "post", + url: "https://api.sushirelay.com/v1", + headers: { + "Content-Type": "application/json", + }, + timeout: 1000, + data: data, }; axios(config) - .then(function (response) { - console.log(JSON.stringify(response.data)); - }) - .catch(function (error) { - console.log(error); - }); + .then(function (response) { + console.log(JSON.stringify(response.data)); + }) + .catch(function (error) { + console.log(error); + }); ``` ### OpenMEV Transaction -Same signature as `eth_sendRawTransaction` but the tx is eligible for arb and goes into our OpenMEV workflow (e.g. gas rebate). +Same signature as `eth_sendRawTransaction` but the tx is eligible for arb and goes into our OpenMEV workflow (e.g. gas rebate). **Anything received via `eth_sendRawTransaction` will be submitted normally/relayed** diff --git a/docs/technical-reference/RPC/eth_getTransactionCount.md b/docs/technical-reference/RPC/eth_getTransactionCount.md new file mode 100644 index 0000000..d2c3e8a --- /dev/null +++ b/docs/technical-reference/RPC/eth_getTransactionCount.md @@ -0,0 +1,35 @@ +#### eth_getTransactionCount + +##### Description + +Returns the number of transactions sent from an address + +##### Parameters + +| # | Type | Description | +| --- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | {[`Data`](#data)} | address to query for sent transactions | +| 2 | {[`Quantity`](#quantity)\|`string`\|[`Block Identifier`](#block-identifier)} | block number, or one of `"latest"`, `"earliest"` or `"pending"`, or a block identifier as described in [`Block Identifier`](#block-identifier) | + +##### Returns + +{[`Quantity`](#quantity)} - number of transactions sent from the specified address + +##### Example + +```sh +# Request +curl -X POST --data '{ + "id": 1337, + "jsonrpc": "2.0", + "method": "eth_getTransactionCount", + "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"] +}' <url> + +# Response +{ + "id": 1337, + "jsonrpc": "2.0", + "result": "0x1" +} +``` diff --git a/docs/Ethereum-API/eth_getTransactionReceipt.md b/docs/technical-reference/RPC/eth_getTransactionReceipt.md similarity index 56% rename from docs/Ethereum-API/eth_getTransactionReceipt.md rename to docs/technical-reference/RPC/eth_getTransactionReceipt.md index 818e3b4..e5bf335 100644 --- a/docs/Ethereum-API/eth_getTransactionReceipt.md +++ b/docs/technical-reference/RPC/eth_getTransactionReceipt.md @@ -1,7 +1,7 @@ --- title: eth_getTransactionReceipt version: 2022.04 -tags: ['json rpc', 'gateway', 'api'] +tags: ["json rpc", "gateway", "api"] --- #### eth_getTransactionReceipt @@ -22,18 +22,18 @@ Returns the receipt of a transaction specified by hash {`null|object`} - `null` if no transaction is found, otherwise a transaction receipt object with the following members: -- {[`Data`](#data)} `blockHash` - hash of block containing this transaction -- {[`Data`](#data)} `contractAddress` - address of new contract or `null` if no contract was created -- {[`Data`](#data)} `from` - transaction sender -- {[`Data`](#data)} `logsBloom` - logs bloom filter -- {[`Data`](#data)} `to` - transaction recipient or `null` if deploying a contract -- {[`Data`](#data)} `transactionHash` - hash of this transaction -- {[`Quantity`](#quantity)} `blockNumber` - number of block containing this transaction -- {[`Quantity`](#quantity)} `cumulativeGasUsed` - gas used by this and all preceding transactions in this block -- {[`Quantity`](#quantity)} `gasUsed` - gas used by this transaction -- {[`Quantity`](#quantity)} `status` - `1` if this transaction was successful or `0` if it failed -- {[`Quantity`](#quantity)} `transactionIndex` - index of this transaction in the block -- {`Array<Log>`} `logs` - list of log objects generated by this transaction +- {[`Data`](#data)} `blockHash` - hash of block containing this transaction +- {[`Data`](#data)} `contractAddress` - address of new contract or `null` if no contract was created +- {[`Data`](#data)} `from` - transaction sender +- {[`Data`](#data)} `logsBloom` - logs bloom filter +- {[`Data`](#data)} `to` - transaction recipient or `null` if deploying a contract +- {[`Data`](#data)} `transactionHash` - hash of this transaction +- {[`Quantity`](#quantity)} `blockNumber` - number of block containing this transaction +- {[`Quantity`](#quantity)} `cumulativeGasUsed` - gas used by this and all preceding transactions in this block +- {[`Quantity`](#quantity)} `gasUsed` - gas used by this transaction +- {[`Quantity`](#quantity)} `status` - `1` if this transaction was successful or `0` if it failed +- {[`Quantity`](#quantity)} `transactionIndex` - index of this transaction in the block +- {`Array<Log>`} `logs` - list of log objects generated by this transaction ##### Example diff --git a/docs/Ethereum-API/eth_getUncleByBlockHashAndIndex.md b/docs/technical-reference/RPC/eth_getUncleByBlockHashAndIndex.md similarity index 58% rename from docs/Ethereum-API/eth_getUncleByBlockHashAndIndex.md rename to docs/technical-reference/RPC/eth_getUncleByBlockHashAndIndex.md index 2b7e89e..1df7998 100644 --- a/docs/Ethereum-API/eth_getUncleByBlockHashAndIndex.md +++ b/docs/technical-reference/RPC/eth_getUncleByBlockHashAndIndex.md @@ -1,7 +1,7 @@ --- title: eth_getUncleByBlockHashAndIndex version: 2022.04 -tags: ['json rpc', 'gateway', 'api'] +tags: ["json rpc", "gateway", "api"] --- #### eth_getUncleByBlockHashAndIndex @@ -21,24 +21,24 @@ Returns information about an uncle specified by block hash and uncle index posit {`null|object`} - `null` if no block or uncle is found, otherwise an uncle object with the following members: -- {[`Data`](#data)} `extraData` - "extra data" field of this block -- {[`Data`](#data)} `hash` - block hash or `null` if pending -- {[`Data`](#data)} `logsBloom` - logs bloom filter or `null` if pending -- {[`Data`](#data)} `miner` - address that received this block's mining rewards -- {[`Data`](#data)} `nonce` - proof-of-work hash or `null` if pending -- {[`Data`](#data)} `parentHash` - parent block hash -- {[`Data`](#data)} `receiptsRoot` -root of the this block's receipts trie -- {[`Data`](#data)} `sha3Uncles` - SHA3 of the uncles data in this block -- {[`Data`](#data)} `stateRoot` - root of this block's final state trie -- {[`Data`](#data)} `transactionsRoot` - root of this block's transaction trie -- {[`Quantity`](#quantity)} `difficulty` - difficulty for this block -- {[`Quantity`](#quantity)} `gasLimit` - maximum gas allowed in this block -- {[`Quantity`](#quantity)} `gasUsed` - total used gas by all transactions in this block -- {[`Quantity`](#quantity)} `number` - block number or `null` if pending -- {[`Quantity`](#quantity)} `size` - size of this block in bytes -- {[`Quantity`](#quantity)} `timestamp` - unix timestamp of when this block was collated -- {[`Quantity`](#quantity)} `totalDifficulty` - total difficulty of the chain until this block -- {`Array<Transaction>`} `uncles` - list of uncle hashes +- {[`Data`](#data)} `extraData` - "extra data" field of this block +- {[`Data`](#data)} `hash` - block hash or `null` if pending +- {[`Data`](#data)} `logsBloom` - logs bloom filter or `null` if pending +- {[`Data`](#data)} `miner` - address that received this block's mining rewards +- {[`Data`](#data)} `nonce` - proof-of-work hash or `null` if pending +- {[`Data`](#data)} `parentHash` - parent block hash +- {[`Data`](#data)} `receiptsRoot` -root of the this block's receipts trie +- {[`Data`](#data)} `sha3Uncles` - SHA3 of the uncles data in this block +- {[`Data`](#data)} `stateRoot` - root of this block's final state trie +- {[`Data`](#data)} `transactionsRoot` - root of this block's transaction trie +- {[`Quantity`](#quantity)} `difficulty` - difficulty for this block +- {[`Quantity`](#quantity)} `gasLimit` - maximum gas allowed in this block +- {[`Quantity`](#quantity)} `gasUsed` - total used gas by all transactions in this block +- {[`Quantity`](#quantity)} `number` - block number or `null` if pending +- {[`Quantity`](#quantity)} `size` - size of this block in bytes +- {[`Quantity`](#quantity)} `timestamp` - unix timestamp of when this block was collated +- {[`Quantity`](#quantity)} `totalDifficulty` - total difficulty of the chain until this block +- {`Array<Transaction>`} `uncles` - list of uncle hashes ##### Example diff --git a/docs/Ethereum-API/eth_getUncleByBlockNumberAndIndex.md b/docs/technical-reference/RPC/eth_getUncleByBlockNumberAndIndex.md similarity index 60% rename from docs/Ethereum-API/eth_getUncleByBlockNumberAndIndex.md rename to docs/technical-reference/RPC/eth_getUncleByBlockNumberAndIndex.md index befb6c2..d012971 100644 --- a/docs/Ethereum-API/eth_getUncleByBlockNumberAndIndex.md +++ b/docs/technical-reference/RPC/eth_getUncleByBlockNumberAndIndex.md @@ -1,7 +1,7 @@ --- title: eth_getUncleByBlockNumberAndIndex version: 2022.04 -tags: ['json rpc', 'gateway', 'api'] +tags: ["json rpc", "gateway", "api"] --- #### eth_getUncleByBlockNumberAndIndex @@ -21,24 +21,24 @@ Returns information about an uncle specified by block number and uncle index pos {`null|object`} - `null` if no block or uncle is found, otherwise an uncle object with the following members: -- {[`Data`](#data)} `extraData` - "extra data" field of this block -- {[`Data`](#data)} `hash` - block hash or `null` if pending -- {[`Data`](#data)} `logsBloom` - logs bloom filter or `null` if pending -- {[`Data`](#data)} `miner` - address that received this block's mining rewards -- {[`Data`](#data)} `nonce` - proof-of-work hash or `null` if pending -- {[`Data`](#data)} `parentHash` - parent block hash -- {[`Data`](#data)} `receiptsRoot` -root of the this block's receipts trie -- {[`Data`](#data)} `sha3Uncles` - SHA3 of the uncles data in this block -- {[`Data`](#data)} `stateRoot` - root of this block's final state trie -- {[`Data`](#data)} `transactionsRoot` - root of this block's transaction trie -- {[`Quantity`](#quantity)} `difficulty` - difficulty for this block -- {[`Quantity`](#quantity)} `gasLimit` - maximum gas allowed in this block -- {[`Quantity`](#quantity)} `gasUsed` - total used gas by all transactions in this block -- {[`Quantity`](#quantity)} `number` - block number or `null` if pending -- {[`Quantity`](#quantity)} `size` - size of this block in bytes -- {[`Quantity`](#quantity)} `timestamp` - unix timestamp of when this block was collated -- {[`Quantity`](#quantity)} `totalDifficulty` - total difficulty of the chain until this block -- {`Array<Transaction>`} `uncles` - list of uncle hashes +- {[`Data`](#data)} `extraData` - "extra data" field of this block +- {[`Data`](#data)} `hash` - block hash or `null` if pending +- {[`Data`](#data)} `logsBloom` - logs bloom filter or `null` if pending +- {[`Data`](#data)} `miner` - address that received this block's mining rewards +- {[`Data`](#data)} `nonce` - proof-of-work hash or `null` if pending +- {[`Data`](#data)} `parentHash` - parent block hash +- {[`Data`](#data)} `receiptsRoot` -root of the this block's receipts trie +- {[`Data`](#data)} `sha3Uncles` - SHA3 of the uncles data in this block +- {[`Data`](#data)} `stateRoot` - root of this block's final state trie +- {[`Data`](#data)} `transactionsRoot` - root of this block's transaction trie +- {[`Quantity`](#quantity)} `difficulty` - difficulty for this block +- {[`Quantity`](#quantity)} `gasLimit` - maximum gas allowed in this block +- {[`Quantity`](#quantity)} `gasUsed` - total used gas by all transactions in this block +- {[`Quantity`](#quantity)} `number` - block number or `null` if pending +- {[`Quantity`](#quantity)} `size` - size of this block in bytes +- {[`Quantity`](#quantity)} `timestamp` - unix timestamp of when this block was collated +- {[`Quantity`](#quantity)} `totalDifficulty` - total difficulty of the chain until this block +- {`Array<Transaction>`} `uncles` - list of uncle hashes ##### Example diff --git a/docs/technical-reference/benchmarking.md b/docs/technical-reference/benchmarking.md index e3e0306..8c4b294 100644 --- a/docs/technical-reference/benchmarking.md +++ b/docs/technical-reference/benchmarking.md @@ -12,10 +12,10 @@ CommodityStream does not recommend using ping time to rpc.securerpc.com (or any CommodityStream services, are not designed as ICMP network testing services -- Rate limiting ICMP in general -- ICMP ping or traceroute traffic can be discarded or delayed en-route to CommodityStream -- The termination point of the TCP/UDP session with CommodityStream may not represent the full network path between a user and the service -- User requests may be served from locations other than the destination of the initial IP termination point +- Rate limiting ICMP in general +- ICMP ping or traceroute traffic can be discarded or delayed en-route to CommodityStream +- The termination point of the TCP/UDP session with CommodityStream may not represent the full network path between a user and the service +- User requests may be served from locations other than the destination of the initial IP termination point Additionally, even a complete lack of response to ICMP traffic may not reflect any sort of issue with CommodityStream service performance. diff --git a/docs/technical-reference/chain-errors.md b/docs/technical-reference/chain-errors.md index 6536f38..a3f7a48 100644 --- a/docs/technical-reference/chain-errors.md +++ b/docs/technical-reference/chain-errors.md @@ -5,21 +5,21 @@ title: Chain Reorgs and Errors ## Status Message Error Decoding -| **HandleId** | **Status Message** | **Description** | -| :-: | :-: | :-: | -| 2 | QUEUED | The default state when initially creating a transaction during the initial API call\. This indicates that this transaction is waiting to be picked up by a background worker\. | -| 3 | PROCESSING | A background worker has started to process this transaction\. | -| 4 | FUNDING | An auxiliary funding transaction is being initiated \(this only applies to non\-Ether transactions\)\. | -| 5 | FUNDED | An auxiliary funding transaction was successful \(this only applies to non\-Ether transactions\)\. | -| 6 | BROADCASTING | The transaction is being announced to the blockchain network nodes\. | -| 7 | BROADCASTED | The transaction was successfully announced to the blockchain network nodes\. | -| 8 | PENDING | The transaction is "pending" / "in the mempool", i\.e\. known to \(some\) blockchain network nodes, and awaiting inclusion/mining into a block\. | -| 9 | CONFIRMING | The transaction was mined into a block, but not enough subsequent blocks have yet been mined to consider that transaction "safe" / confirmed\. | -| 10 | CONFIRMED | The transaction was mined into a block and enough subsequent blocks have been mined to consider that transaction "safe" / confirmed\. | -| 11 | FAILED | The transaction was mined into a block, but the execution of its smart contract code failed\. Several reasons are possible, most notably "out of gas"\. The transaction is still included in a block because its gas is still awarded to the miner who attempted to execute it\. | -| 12 | REJECTED | The transaction was mined into a block but was rejected during the execution of its smart contract code\. Several reasons are possible, most notably Solidity's require\(\) assertions not being satisfied\. The transaction is still included in a block because it's gas is still awarded to the miner who attempted to execute it\. | -| 13 | UN-PROCESSABLE | An unrecoverable error occurred which prevents us from getting this transaction onto the blockchain\. We have given up \(or the customer requested us not to retry\)\. | -| 14 | RETRYING | A temporary/recoverable error occurred, and this transaction was re\-queued as to try getting this transaction onto the blockchain at a later time\. This state is more or less equivalent to QUEUED, but its name is more telling\. | +| **HandleId** | **Status Message** | **Description** | +| :----------: | :----------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| 2 | QUEUED | The default state when initially creating a transaction during the initial API call\. This indicates that this transaction is waiting to be picked up by a background worker\. | +| 3 | PROCESSING | A background worker has started to process this transaction\. | +| 4 | FUNDING | An auxiliary funding transaction is being initiated \(this only applies to non\-Ether transactions\)\. | +| 5 | FUNDED | An auxiliary funding transaction was successful \(this only applies to non\-Ether transactions\)\. | +| 6 | BROADCASTING | The transaction is being announced to the blockchain network nodes\. | +| 7 | BROADCASTED | The transaction was successfully announced to the blockchain network nodes\. | +| 8 | PENDING | The transaction is "pending" / "in the mempool", i\.e\. known to \(some\) blockchain network nodes, and awaiting inclusion/mining into a block\. | +| 9 | CONFIRMING | The transaction was mined into a block, but not enough subsequent blocks have yet been mined to consider that transaction "safe" / confirmed\. | +| 10 | CONFIRMED | The transaction was mined into a block and enough subsequent blocks have been mined to consider that transaction "safe" / confirmed\. | +| 11 | FAILED | The transaction was mined into a block, but the execution of its smart contract code failed\. Several reasons are possible, most notably "out of gas"\. The transaction is still included in a block because its gas is still awarded to the miner who attempted to execute it\. | +| 12 | REJECTED | The transaction was mined into a block but was rejected during the execution of its smart contract code\. Several reasons are possible, most notably Solidity's require\(\) assertions not being satisfied\. The transaction is still included in a block because it's gas is still awarded to the miner who attempted to execute it\. | +| 13 | UN-PROCESSABLE | An unrecoverable error occurred which prevents us from getting this transaction onto the blockchain\. We have given up \(or the customer requested us not to retry\)\. | +| 14 | RETRYING | A temporary/recoverable error occurred, and this transaction was re\-queued as to try getting this transaction onto the blockchain at a later time\. This state is more or less equivalent to QUEUED, but its name is more telling\. | ### Chain Reorgs @@ -42,11 +42,11 @@ In the case that a reorg has been encountered it would trace backwards up the pa ## Block Tags -| Block Tags | Description | -|---|---| -| earliest | The lowest numbered block the client has available | -| finalized | The most recent crypto-economically secure block cannot be re-orged outside of manual intervention driven by community coordination | -| safe | The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions | -| unsafe | The most recent block in the canonical chain observed by the client this block can be re-orged out of the canonical chain | -| pending | A sample next block built by the client on top of unsafe and containing the set of transactions usually taken from local mempool | -| latest | DEPRECATED Currently an alias for unsafe will be removed at some point in the future | +| Block Tags | Description | +| ---------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| earliest | The lowest numbered block the client has available | +| finalized | The most recent crypto-economically secure block cannot be re-orged outside of manual intervention driven by community coordination | +| safe | The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions | +| unsafe | The most recent block in the canonical chain observed by the client this block can be re-orged out of the canonical chain | +| pending | A sample next block built by the client on top of unsafe and containing the set of transactions usually taken from local mempool | +| latest | DEPRECATED Currently an alias for unsafe will be removed at some point in the future | diff --git a/docs/technical-reference/intro.md b/docs/technical-reference/intro.md index bf8f5e6..fd0cc64 100644 --- a/docs/technical-reference/intro.md +++ b/docs/technical-reference/intro.md @@ -5,7 +5,7 @@ title: Introduction # Technical overview -- OpenMEV Routing Contract -- SecureRPC Gateway Endpoint -- OpenMEV reputation semaphore groups -- Transaction Rebating Functions +- OpenMEV Routing Contract +- SecureRPC Gateway Endpoint +- OpenMEV reputation semaphore groups +- Transaction Rebating Functions diff --git a/docs/technical-reference/latency.md b/docs/technical-reference/latency.md index aa1f371..7c72fe9 100644 --- a/docs/technical-reference/latency.md +++ b/docs/technical-reference/latency.md @@ -12,12 +12,12 @@ SecureRPC optimizes the content delivery path to users based on a number of metr SecureRPC does not recommend using ping time to `api.securerpc.com` (or any other SecureRPC service, including OpenMEV RPC Gateaway) as a measure of the actual performance of SecureRPC services for the following reasons: -- SecureRPC services, are not designed as ICMP network testing services -- Many networks, including SecureRPC, rate limit ICMP -- ICMP ping or traceroute traffic can be discarded or delayed en-route to SecureRPC -- The termination point of the TCP/UDP session with SecureRPC may not represent the full network path between a user and the service -- User requests may be served from locations other than the destination of the initial IP termination point -- Even a complete lack of response to ICMP traffic may not reflect any sort of issue with SecureRPC service performance. +- SecureRPC services, are not designed as ICMP network testing services +- Many networks, including SecureRPC, rate limit ICMP +- ICMP ping or traceroute traffic can be discarded or delayed en-route to SecureRPC +- The termination point of the TCP/UDP session with SecureRPC may not represent the full network path between a user and the service +- User requests may be served from locations other than the destination of the initial IP termination point +- Even a complete lack of response to ICMP traffic may not reflect any sort of issue with SecureRPC service performance. #### What is the content delivery path that SecureRPC optimizes? @@ -32,10 +32,11 @@ Individual RPC requests or responses may have content served from a number of di We face certain legal limitations to providing validator nodes in some countries, Generally, if a network operator or ISP meets our policies and operates in a country where we don’t face restrictions, we can deploy validator nodes. ### Referenes - - RFC2622, “Routing Policy Specification Language (RPSL)”: Describes the basic RPSL object syntax RFC4012 -- “Routing Policy Specification Language next generation (RPSLng)”: Describes useful additions to the RPSL language such as IPv6 route6 objects RFC2650 +- RFC2622, “Routing Policy Specification Language (RPSL)”: Describes the basic RPSL object syntax RFC4012 -- “Using RPSL in Practice”: A tutorial on generating RPSL objects, much like this article RFC7682 +- “Routing Policy Specification Language next generation (RPSLng)”: Describes useful additions to the RPSL language such as IPv6 route6 objects RFC2650 -- “Considerations for Internet Routing Registries (IRRs) and Routing Policy Configuration: Some of the problems and lessons learned about the IRR system +- “Using RPSL in Practice”: A tutorial on generating RPSL objects, much like this article RFC7682 + +- “Considerations for Internet Routing Registries (IRRs) and Routing Policy Configuration: Some of the problems and lessons learned about the IRR system diff --git a/docs/technical-reference/maxPriorityFee.md b/docs/technical-reference/maxPriorityFee.md index 5def34f..6ff06e2 100644 --- a/docs/technical-reference/maxPriorityFee.md +++ b/docs/technical-reference/maxPriorityFee.md @@ -4,7 +4,7 @@ source: https://notes.ethereum.org/@barnabe/rk5ue1WF_ title: maxPriorityFee Calculations --- -# maxPriorityFee +# maxPriorityFee `maxPriorityFee` is calculated using the methodology below. @@ -18,9 +18,9 @@ For implemntations such as that used in the Sushiswap frontend, it is currently > NOTE. Both Ethersjs and Web3js hardcode this value, [see issue for ethersjs](https://github.com/ethers-io/ethers.js/issues/1817), and [for web3js this issue](https://github.com/ChainSafe/web3.js/pull/4277) -## Methodology +## Methodology -> Uncle risk/MEV miner fee calculation - Call `T_` the transaction fees netted by MEV transactions +> Uncle risk/MEV miner fee calculation - Call `T_` the transaction fees netted by MEV transactions - Call $T_{MEV}$ the transaction fees netted by MEV transactions (in Gwei) - MEV transactions use an amount of gas $g_{MEV}$ @@ -61,4 +61,4 @@ _With $p = 2.0 \times 10^{-9}$_ ## Citations Barnabe Monnot, Ethereum Foundation: "Uncle risk/MEV miner fee calculation", <br /> - <https://notes.ethereum.org/@barnabe/rk5ue1WF>; Accessed 2022 June 14th. +<https://notes.ethereum.org/@barnabe/rk5ue1WF>; Accessed 2022 June 14th. diff --git a/docs/transaction-status.md b/docs/transaction-status.md index 3fb98ef..c2fedc0 100644 --- a/docs/transaction-status.md +++ b/docs/transaction-status.md @@ -18,11 +18,11 @@ This documentation refers to the latest version of OpenMEV ([v2.0.0-draft](#)), ## Potential statuses -- `PENDING` - The transaction was received and is currently being submitted to miners -- `INCLUDED` - The transaction was included on-chain -- `FAILED` - The transaction was submitted for 25 blocks and failed to be included on-chain -- `CANCELLED` - The transaction was cancelled by the user and not included on-chain -- `UNKNOWN` - The transaction was not received +- `PENDING` - The transaction was received and is currently being submitted to miners +- `INCLUDED` - The transaction was included on-chain +- `FAILED` - The transaction was submitted for 25 blocks and failed to be included on-chain +- `CANCELLED` - The transaction was cancelled by the user and not included on-chain +- `UNKNOWN` - The transaction was not received ## Privacy @@ -36,18 +36,18 @@ To check the status of your transactions query the OpenMEV API Endpoint. Respons ```json { - "status": "PENDING", - "hash": "YOUR_TX_HASH", - "maxBlockNumber": "latest", - "transaction": { - "from": "<SENDER>", - "to": "<RECEIVER>", - "gasLimit": "23000", - "maxFeePerGas": "300", - "maxPriorityFeePerGas": "10", - "nonce": "42", - "value": "1333333333337" - } + "status": "PENDING", + "hash": "YOUR_TX_HASH", + "maxBlockNumber": "latest", + "transaction": { + "from": "<SENDER>", + "to": "<RECEIVER>", + "gasLimit": "23000", + "maxFeePerGas": "300", + "maxPriorityFeePerGas": "10", + "nonce": "42", + "value": "1333333333337" + } } ``` @@ -74,9 +74,9 @@ To check the status of your transactions query the OpenMEV API Endpoint. Respons * @interface JsonRpcError */ export interface JsonRpcError { - code: number; - message: string; - data?: unknown; + code: number; + message: string; + data?: unknown; } /** @@ -85,34 +85,33 @@ export interface JsonRpcError { * @template T */ export interface JsonRpcResponse<T> { - jsonrpc: '2.0'; - id?: number | string | null; - result?: T; - error?: JsonRpcError; + jsonrpc: "2.0"; + id?: number | string | null; + result?: T; + error?: JsonRpcError; } export enum PrivateTxState { - UNCHECKED = 'UNCHECKED', - PROCESSING = 'PROCESSING', - OK = 'OK', - INDETERMINATE = 'INDETERMINATE', - ERROR = 'ERROR', + UNCHECKED = "UNCHECKED", + PROCESSING = "PROCESSING", + OK = "OK", + INDETERMINATE = "INDETERMINATE", + ERROR = "ERROR", } export type RelayResponses = Record<string, RelayResponse>; export interface RelayResponse { - response: JsonRpcResponse<any>; - error?: string; + response: JsonRpcResponse<any>; + error?: string; } export interface PrivateTxStatus { - transactionHash: string; - receivedAt: string; - relayedAt?: string; - minedAt?: string; - relayFailure?: boolean; - relayResponses?: RelayResponses; + transactionHash: string; + receivedAt: string; + relayedAt?: string; + minedAt?: string; + relayFailure?: boolean; + relayResponses?: RelayResponses; } ``` - diff --git a/docusaurus.config.js b/docusaurus.config.js index 3033034..db0f95f 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -37,7 +37,7 @@ module.exports = { [ 'docusaurus-preset-shiki-twoslash', { - themes: ["min-light", "nord"], + themes: ["light-plus", "dark-plus"], } ] ], diff --git a/external/libsushi b/external/libsushi deleted file mode 160000 index 71a07cb..0000000 --- a/external/libsushi +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 71a07cb361b9677369e1ea9961ddb46f440ec2a6 diff --git a/package.json b/package.json index 1d8b4ee..47be52c 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "dependencies": { "@algolia/client-search": "^4.9.1", "@cmfcmf/docusaurus-search-local": "^0.10.0", - "@docusaurus/core": "2.0.0-beta.18", - "@docusaurus/preset-classic": "2.0.0-beta.18", + "@docusaurus/core": "^2.0.0-beta.21", + "@docusaurus/preset-classic": "^2.0.0-beta.21", "@mdx-js/react": "^1.6.22", "clsx": "^1.1.1", "docusaurus-plugin-typedoc": "^0.17.5", diff --git a/yarn.lock b/yarn.lock index 6dcd49a..3b1ea7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.5.2": - version "1.5.2" - resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.2.tgz" - integrity sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A== - dependencies: - "@algolia/autocomplete-shared" "1.5.2" - "@algolia/autocomplete-core@1.6.2": version "1.6.2" resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.6.2.tgz#54324a558efc2438559bb3e79fd2f2ae4acef0dd" @@ -16,6 +9,13 @@ dependencies: "@algolia/autocomplete-shared" "1.6.2" +"@algolia/autocomplete-core@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.6.3.tgz#76832fffb6405ac2c87bac5a040b8a31a1cdef80" + integrity sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA== + dependencies: + "@algolia/autocomplete-shared" "1.6.3" + "@algolia/autocomplete-js@^1.5.1": version "1.6.2" resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.6.2.tgz#b7a3ef38513f24f732b896bc0e75b70a9be388bb" @@ -27,13 +27,6 @@ htm "^3.0.0" preact "^10.0.0" -"@algolia/autocomplete-preset-algolia@1.5.2": - version "1.5.2" - resolved "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.2.tgz" - integrity sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw== - dependencies: - "@algolia/autocomplete-shared" "1.5.2" - "@algolia/autocomplete-preset-algolia@1.6.2": version "1.6.2" resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.6.2.tgz#22ce3979c13b912d293d4f23fd1b2008a304096a" @@ -41,16 +34,16 @@ dependencies: "@algolia/autocomplete-shared" "1.6.2" -"@algolia/autocomplete-shared@1.5.2": - version "1.5.2" - resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.2.tgz" - integrity sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug== - "@algolia/autocomplete-shared@1.6.2": version "1.6.2" resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.6.2.tgz#27ad6d8fa7825c6146933e11eebc5936ca12f569" integrity sha512-Js7N8EgKsRgaclDde70rF07VOdC+Zb6VLXTIWkJnO6+EI9zbXm/mT2StGVcpNuQ+UN8ZF/bVZLjuVBypOk8bUQ== +"@algolia/autocomplete-shared@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.6.3.tgz#52085ce89a755977841ed0a463aa31ce8f1dea97" + integrity sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg== + "@algolia/autocomplete-theme-classic@^1.5.1": version "1.6.2" resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.6.2.tgz#44ffcc869f7e9976037e3b661bcf28dd8640b209" @@ -70,6 +63,13 @@ dependencies: "@algolia/cache-common" "4.13.0" +"@algolia/cache-browser-local-storage@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.13.1.tgz#ffacb9230119f77de1a6f163b83680be999110e4" + integrity sha512-UAUVG2PEfwd/FfudsZtYnidJ9eSCpS+LW9cQiesePQLz41NAcddKxBak6eP2GErqyFagSlnVXe/w2E9h2m2ttg== + dependencies: + "@algolia/cache-common" "4.13.1" + "@algolia/cache-common@4.10.5": version "4.10.5" resolved "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.5.tgz" @@ -99,6 +99,13 @@ dependencies: "@algolia/cache-common" "4.13.0" +"@algolia/cache-in-memory@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.13.1.tgz#c19baa67b4597e1a93e987350613ab3b88768832" + integrity sha512-pZzybCDGApfA/nutsFK1P0Sbsq6fYJU3DwIvyKg4pURerlJM4qZbB9bfLRef0FkzfQu7W11E4cVLCIOWmyZeuQ== + dependencies: + "@algolia/cache-common" "4.13.1" + "@algolia/client-account@4.10.5": version "4.10.5" resolved "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.5.tgz" @@ -117,6 +124,15 @@ "@algolia/client-search" "4.13.0" "@algolia/transporter" "4.13.0" +"@algolia/client-account@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.13.1.tgz#fea591943665477a23922ab31863ad0732e26c66" + integrity sha512-TFLiZ1KqMiir3FNHU+h3b0MArmyaHG+eT8Iojio6TdpeFcAQ1Aiy+2gb3SZk3+pgRJa/BxGmDkRUwE5E/lv3QQ== + dependencies: + "@algolia/client-common" "4.13.1" + "@algolia/client-search" "4.13.1" + "@algolia/transporter" "4.13.1" + "@algolia/client-analytics@4.10.5": version "4.10.5" resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.5.tgz" @@ -137,6 +153,16 @@ "@algolia/requester-common" "4.13.0" "@algolia/transporter" "4.13.0" +"@algolia/client-analytics@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.13.1.tgz#5275956b2d0d16997148f2085f1701b6c39ecc32" + integrity sha512-iOS1JBqh7xaL5x00M5zyluZ9+9Uy9GqtYHv/2SMuzNW1qP7/0doz1lbcsP3S7KBbZANJTFHUOfuqyRLPk91iFA== + dependencies: + "@algolia/client-common" "4.13.1" + "@algolia/client-search" "4.13.1" + "@algolia/requester-common" "4.13.1" + "@algolia/transporter" "4.13.1" + "@algolia/client-common@4.10.5": version "4.10.5" resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.5.tgz" @@ -179,6 +205,15 @@ "@algolia/requester-common" "4.13.0" "@algolia/transporter" "4.13.0" +"@algolia/client-personalization@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.13.1.tgz#438a1f58576ef19c4ad4addb8417bdacfe2fce2e" + integrity sha512-1CqrOW1ypVrB4Lssh02hP//YxluoIYXAQCpg03L+/RiXJlCs+uIqlzC0ctpQPmxSlTK6h07kr50JQoYH/TIM9w== + dependencies: + "@algolia/client-common" "4.13.1" + "@algolia/requester-common" "4.13.1" + "@algolia/transporter" "4.13.1" + "@algolia/client-search@4.10.5": version "4.10.5" resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.5.tgz" @@ -197,7 +232,7 @@ "@algolia/requester-common" "4.13.0" "@algolia/transporter" "4.13.0" -"@algolia/client-search@^4.9.1": +"@algolia/client-search@4.13.1", "@algolia/client-search@^4.9.1": version "4.13.1" resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.13.1.tgz#5501deed01e23c33d4aaa9f9eb96a849f0fce313" integrity sha512-YQKYA83MNRz3FgTNM+4eRYbSmHi0WWpo019s5SeYcL3HUan/i5R09VO9dk3evELDFJYciiydSjbsmhBzbpPP2A== @@ -240,6 +275,13 @@ dependencies: "@algolia/logger-common" "4.13.0" +"@algolia/logger-console@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.13.1.tgz#423d358e4992dd4bceab0d9a4e99d1fd68107043" + integrity sha512-7jQOTftfeeLlnb3YqF8bNgA2GZht7rdKkJ31OCeSH2/61haO0tWPoNRjZq9XLlgMQZH276pPo0NdiArcYPHjCA== + dependencies: + "@algolia/logger-common" "4.13.1" + "@algolia/requester-browser-xhr@4.10.5": version "4.10.5" resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.5.tgz" @@ -254,6 +296,13 @@ dependencies: "@algolia/requester-common" "4.13.0" +"@algolia/requester-browser-xhr@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.13.1.tgz#f8ea79233cf6f0392feaf31e35a6b40d68c5bc9e" + integrity sha512-oa0CKr1iH6Nc7CmU6RE7TnXMjHnlyp7S80pP/LvZVABeJHX3p/BcSCKovNYWWltgTxUg0U1o+2uuy8BpMKljwA== + dependencies: + "@algolia/requester-common" "4.13.1" + "@algolia/requester-common@4.10.5": version "4.10.5" resolved "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.5.tgz" @@ -283,6 +332,13 @@ dependencies: "@algolia/requester-common" "4.13.0" +"@algolia/requester-node-http@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.13.1.tgz#32c63d4c009f22d97e396406de7af9b66fb8e89d" + integrity sha512-7C0skwtLdCz5heKTVe/vjvrqgL/eJxmiEjHqXdtypcE5GCQCYI15cb+wC4ytYioZDMiuDGeVYmCYImPoEgUGPw== + dependencies: + "@algolia/requester-common" "4.13.1" + "@algolia/transporter@4.10.5": version "4.10.5" resolved "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.5.tgz" @@ -341,6 +397,11 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz" integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== +"@babel/compat-data@^7.17.10": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" + integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz" @@ -363,7 +424,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.15.5", "@babel/core@^7.17.8": +"@babel/core@^7.15.5": version "7.17.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz" integrity sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw== @@ -384,6 +445,27 @@ json5 "^2.2.1" semver "^6.3.0" +"@babel/core@^7.18.2": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" + integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.18.2" + "@babel/helper-compilation-targets" "^7.18.2" + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helpers" "^7.18.2" + "@babel/parser" "^7.18.5" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.5" + "@babel/types" "^7.18.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + "@babel/generator@^7.12.5", "@babel/generator@^7.15.4": version "7.15.4" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz" @@ -393,7 +475,7 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.17.7", "@babel/generator@^7.17.9": +"@babel/generator@^7.17.9": version "7.17.9" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz" integrity sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ== @@ -402,6 +484,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" + integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== + dependencies: + "@babel/types" "^7.18.2" + "@jridgewell/gen-mapping" "^0.3.0" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.14.5": version "7.15.4" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz" @@ -444,6 +535,16 @@ browserslist "^4.17.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" + integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.20.2" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": version "7.17.9" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz" @@ -457,6 +558,19 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" + integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-member-expression-to-functions" "^7.17.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-create-regexp-features-plugin@^7.14.5": version "7.14.5" resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz" @@ -473,6 +587,14 @@ "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^5.0.1" +"@babel/helper-create-regexp-features-plugin@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd" + integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" + "@babel/helper-define-polyfill-provider@^0.3.1": version "0.3.1" resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz" @@ -494,6 +616,11 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-environment-visitor@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" + integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== + "@babel/helper-explode-assignable-expression@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz" @@ -595,6 +722,20 @@ "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" +"@babel/helper-module-transforms@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" + integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.0" + "@babel/types" "^7.18.0" + "@babel/helper-optimise-call-expression@^7.15.4": version "7.15.4" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz" @@ -624,6 +765,11 @@ resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== +"@babel/helper-plugin-utils@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" + integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== + "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz" @@ -654,6 +800,17 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-replace-supers@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0" + integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== + dependencies: + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-member-expression-to-functions" "^7.17.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.18.2" + "@babel/types" "^7.18.2" + "@babel/helper-simple-access@^7.15.4": version "7.15.4" resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz" @@ -668,6 +825,13 @@ dependencies: "@babel/types" "^7.17.0" +"@babel/helper-simple-access@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" + integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== + dependencies: + "@babel/types" "^7.18.2" + "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz" @@ -737,6 +901,15 @@ "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" +"@babel/helpers@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" + integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.2" + "@babel/types" "^7.18.2" + "@babel/highlight@^7.14.5": version "7.14.5" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" @@ -760,11 +933,16 @@ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.15.5.tgz" integrity sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg== -"@babel/parser@^7.16.7", "@babel/parser@^7.17.8", "@babel/parser@^7.17.9": +"@babel/parser@^7.16.7", "@babel/parser@^7.17.9": version "7.17.9" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz" integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== +"@babel/parser@^7.18.3", "@babel/parser@^7.18.5": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" + integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz" @@ -772,6 +950,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" + integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz" @@ -781,6 +966,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753" + integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-async-generator-functions@^7.16.8": version "7.16.8" resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz" @@ -790,6 +984,15 @@ "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" +"@babel/plugin-proposal-async-generator-functions@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03" + integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-class-properties@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz" @@ -798,6 +1001,14 @@ "@babel/helper-create-class-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-class-properties@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4" + integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-proposal-class-static-block@^7.16.7": version "7.17.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz" @@ -807,6 +1018,15 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" +"@babel/plugin-proposal-class-static-block@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz#7d02253156e3c3793bdb9f2faac3a1c05f0ba710" + integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-proposal-dynamic-import@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz" @@ -823,6 +1043,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378" + integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz" @@ -831,6 +1059,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/plugin-proposal-json-strings@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664" + integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-proposal-logical-assignment-operators@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz" @@ -839,6 +1075,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23" + integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz" @@ -847,6 +1091,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be" + integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz" @@ -875,6 +1127,17 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.16.7" +"@babel/plugin-proposal-object-rest-spread@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8" + integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-compilation-targets" "^7.17.10" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.17.12" + "@babel/plugin-proposal-optional-catch-binding@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz" @@ -892,6 +1155,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174" + integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-private-methods@^7.16.11": version "7.16.11" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz" @@ -900,6 +1172,14 @@ "@babel/helper-create-class-features-plugin" "^7.16.10" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-private-methods@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c" + integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-proposal-private-property-in-object@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz" @@ -910,6 +1190,16 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" + integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz" @@ -918,6 +1208,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-unicode-property-regex@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d" + integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.14.5" resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz" @@ -961,6 +1259,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-import-assertions@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz#58096a92b11b2e4e54b24c6a0cc0e5e607abcedd" + integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" @@ -982,6 +1287,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-syntax-jsx@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47" + integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" @@ -1045,6 +1357,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-syntax-typescript@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz#b54fc3be6de734a56b87508f99d6428b5b605a7b" + integrity sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-arrow-functions@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz" @@ -1052,6 +1371,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-arrow-functions@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45" + integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-async-to-generator@^7.16.8": version "7.16.8" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz" @@ -1061,6 +1387,15 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" +"@babel/plugin-transform-async-to-generator@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832" + integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz" @@ -1075,6 +1410,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-block-scoping@^7.17.12": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz#7988627b3e9186a13e4d7735dc9c34a056613fb9" + integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-classes@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz" @@ -1089,6 +1431,20 @@ "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.17.12": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz#51310b812a090b846c784e47087fa6457baef814" + integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-replace-supers" "^7.18.2" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz" @@ -1096,6 +1452,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-computed-properties@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f" + integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-destructuring@^7.16.7": version "7.17.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz" @@ -1103,6 +1466,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-destructuring@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz#dc4f92587e291b4daa78aa20cc2d7a63aa11e858" + integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-dotall-regex@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz" @@ -1126,6 +1496,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-duplicate-keys@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c" + integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-exponentiation-operator@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz" @@ -1141,6 +1518,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-for-of@^7.18.1": + version "7.18.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz#ed14b657e162b72afbbb2b4cdad277bf2bb32036" + integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-function-name@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz" @@ -1157,6 +1541,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-literals@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae" + integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-member-expression-literals@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz" @@ -1173,6 +1564,15 @@ "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz#7ef1002e67e36da3155edc8bf1ac9398064c02ed" + integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.16.8": version "7.17.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz" @@ -1183,6 +1583,16 @@ "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz#1aa8efa2e2a6e818b6a7f2235fceaf09bdb31e9e" + integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-simple-access" "^7.18.2" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.16.7": version "7.17.8" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz" @@ -1194,6 +1604,17 @@ "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.18.0": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz#87f11c44fbfd3657be000d4897e192d9cb535996" + integrity sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-umd@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz" @@ -1202,6 +1623,14 @@ "@babel/helper-module-transforms" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-modules-umd@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz#56aac64a2c2a1922341129a4597d1fd5c3ff020f" + integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": version "7.16.8" resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz" @@ -1209,6 +1638,14 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.7" +"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931" + integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-new-target@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz" @@ -1216,6 +1653,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-new-target@^7.17.12": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz#8c228c4a07501dd12c95c5f23d1622131cc23931" + integrity sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-object-super@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz" @@ -1238,6 +1682,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-parameters@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766" + integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-property-literals@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz" @@ -1277,6 +1728,17 @@ "@babel/plugin-syntax-jsx" "^7.16.7" "@babel/types" "^7.17.0" +"@babel/plugin-transform-react-jsx@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba" + integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/types" "^7.17.12" + "@babel/plugin-transform-react-pure-annotations@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz" @@ -1292,6 +1754,14 @@ dependencies: regenerator-transform "^0.15.0" +"@babel/plugin-transform-regenerator@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz#44274d655eb3f1af3f3a574ba819d3f48caf99d5" + integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + regenerator-transform "^0.15.0" + "@babel/plugin-transform-reserved-words@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz" @@ -1299,13 +1769,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-runtime@^7.17.0": - version "7.17.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz" - integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== +"@babel/plugin-transform-reserved-words@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f" + integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-runtime@^7.18.2": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz#f4d3188ba6a8815793993c71c2c225d0ee1d7743" + integrity sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA== dependencies: "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" babel-plugin-polyfill-corejs2 "^0.3.0" babel-plugin-polyfill-corejs3 "^0.5.0" babel-plugin-polyfill-regenerator "^0.3.0" @@ -1326,6 +1803,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" +"@babel/plugin-transform-spread@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5" + integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-transform-sticky-regex@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz" @@ -1340,6 +1825,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-template-literals@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz#31ed6915721864847c48b656281d0098ea1add28" + integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-typeof-symbol@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz" @@ -1347,6 +1839,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-typeof-symbol@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889" + integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-typescript@^7.16.7": version "7.16.8" resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz" @@ -1356,6 +1855,15 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-typescript" "^7.16.7" +"@babel/plugin-transform-typescript@^7.17.12": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz#587eaf6a39edb8c06215e550dc939faeadd750bf" + integrity sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-typescript" "^7.17.12" + "@babel/plugin-transform-unicode-escapes@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz" @@ -1371,7 +1879,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/preset-env@^7.15.6", "@babel/preset-env@^7.16.11": +"@babel/preset-env@^7.15.6": version "7.16.11" resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz" integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== @@ -1451,6 +1959,87 @@ core-js-compat "^3.20.2" semver "^6.3.0" +"@babel/preset-env@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a" + integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-compilation-targets" "^7.18.2" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-async-generator-functions" "^7.17.12" + "@babel/plugin-proposal-class-properties" "^7.17.12" + "@babel/plugin-proposal-class-static-block" "^7.18.0" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.17.12" + "@babel/plugin-proposal-json-strings" "^7.17.12" + "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.18.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-private-methods" "^7.17.12" + "@babel/plugin-proposal-private-property-in-object" "^7.17.12" + "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.17.12" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.17.12" + "@babel/plugin-transform-async-to-generator" "^7.17.12" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.17.12" + "@babel/plugin-transform-classes" "^7.17.12" + "@babel/plugin-transform-computed-properties" "^7.17.12" + "@babel/plugin-transform-destructuring" "^7.18.0" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.17.12" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.18.1" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.17.12" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.18.0" + "@babel/plugin-transform-modules-commonjs" "^7.18.2" + "@babel/plugin-transform-modules-systemjs" "^7.18.0" + "@babel/plugin-transform-modules-umd" "^7.18.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" + "@babel/plugin-transform-new-target" "^7.17.12" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.17.12" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.18.0" + "@babel/plugin-transform-reserved-words" "^7.17.12" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.17.12" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.18.2" + "@babel/plugin-transform-typeof-symbol" "^7.17.12" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.2" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.22.1" + semver "^6.3.0" + "@babel/preset-modules@^0.1.5": version "0.1.5" resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" @@ -1462,7 +2051,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.14.5", "@babel/preset-react@^7.16.7": +"@babel/preset-react@^7.14.5": version "7.16.7" resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz" integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== @@ -1474,7 +2063,19 @@ "@babel/plugin-transform-react-jsx-development" "^7.16.7" "@babel/plugin-transform-react-pure-annotations" "^7.16.7" -"@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.16.7": +"@babel/preset-react@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d" + integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-react-display-name" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.17.12" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + +"@babel/preset-typescript@^7.15.0": version "7.16.7" resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz" integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== @@ -1483,10 +2084,19 @@ "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-typescript" "^7.16.7" -"@babel/runtime-corejs3@^7.17.8": - version "7.17.9" - resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz" - integrity sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw== +"@babel/preset-typescript@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz#40269e0a0084d56fc5731b6c40febe1c9a4a3e8c" + integrity sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.17.12" + +"@babel/runtime-corejs3@^7.18.3": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz#52f0241a31e0ec61a6187530af6227c2846bd60c" + integrity sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" @@ -1498,10 +2108,10 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.17.8": - version "7.17.9" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz" - integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== +"@babel/runtime@^7.18.3": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" + integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== dependencies: regenerator-runtime "^0.13.4" @@ -1554,6 +2164,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" + integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.18.2" + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.18.5" + "@babel/types" "^7.18.4" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.12.7", "@babel/types@^7.15.4", "@babel/types@^7.4.4": version "7.15.4" resolved "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz" @@ -1570,6 +2196,14 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" + integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@cmfcmf/docusaurus-search-local@^0.10.0": version "0.10.0" resolved "https://registry.yarnpkg.com/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-0.10.0.tgz#0a77847641ec490f4663666e5eee07416f5a0c63" @@ -1584,138 +2218,142 @@ lunr-languages "^1.4.0" mark.js "^8.11.1" -"@docsearch/css@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0.tgz" - integrity sha512-1kkV7tkAsiuEd0shunYRByKJe3xQDG2q7wYg24SOw1nV9/2lwEd4WrUYRJC/ukGTl2/kHeFxsaUvtiOy0y6fFA== +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@docsearch/react@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0.tgz" - integrity sha512-yhMacqS6TVQYoBh/o603zszIb5Bl8MIXuOc6Vy617I74pirisDzzcNh0NEaYQt50fVVR3khUbeEhUEWEWipESg== +"@docsearch/css@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.1.0.tgz#6781cad43fc2e034d012ee44beddf8f93ba21f19" + integrity sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA== + +"@docsearch/react@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.1.0.tgz#da943a64c01ee82b04e53b691806469272f943f7" + integrity sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg== dependencies: - "@algolia/autocomplete-core" "1.5.2" - "@algolia/autocomplete-preset-algolia" "1.5.2" - "@docsearch/css" "3.0.0" + "@algolia/autocomplete-core" "1.6.3" + "@docsearch/css" "3.1.0" algoliasearch "^4.0.0" -"@docusaurus/core@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.18.tgz" - integrity sha512-puV7l+0/BPSi07Xmr8tVktfs1BzhC8P5pm6Bs2CfvysCJ4nefNCD1CosPc1PGBWy901KqeeEJ1aoGwj9tU3AUA== +"@docusaurus/core@2.0.0-beta.21", "@docusaurus/core@^2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.21.tgz#50897317b22dbd94b1bf91bb30c2a0fddd15a806" + integrity sha512-qysDMVp1M5UozK3u/qOxsEZsHF7jeBvJDS+5ItMPYmNKvMbNKeYZGA0g6S7F9hRDwjIlEbvo7BaX0UMDcmTAWA== dependencies: - "@babel/core" "^7.17.8" - "@babel/generator" "^7.17.7" + "@babel/core" "^7.18.2" + "@babel/generator" "^7.18.2" "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.17.0" - "@babel/preset-env" "^7.16.11" - "@babel/preset-react" "^7.16.7" - "@babel/preset-typescript" "^7.16.7" - "@babel/runtime" "^7.17.8" - "@babel/runtime-corejs3" "^7.17.8" - "@babel/traverse" "^7.17.3" - "@docusaurus/cssnano-preset" "2.0.0-beta.18" - "@docusaurus/logger" "2.0.0-beta.18" - "@docusaurus/mdx-loader" "2.0.0-beta.18" + "@babel/plugin-transform-runtime" "^7.18.2" + "@babel/preset-env" "^7.18.2" + "@babel/preset-react" "^7.17.12" + "@babel/preset-typescript" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@babel/runtime-corejs3" "^7.18.3" + "@babel/traverse" "^7.18.2" + "@docusaurus/cssnano-preset" "2.0.0-beta.21" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/mdx-loader" "2.0.0-beta.21" "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "2.0.0-beta.18" - "@docusaurus/utils-common" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" + "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/utils-common" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" "@slorber/static-site-generator-webpack-plugin" "^4.0.4" "@svgr/webpack" "^6.2.1" - autoprefixer "^10.4.4" - babel-loader "^8.2.4" - babel-plugin-dynamic-import-node "2.3.0" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" boxen "^6.2.1" + chalk "^4.1.2" chokidar "^3.5.3" - clean-css "^5.2.4" - cli-table3 "^0.6.1" + clean-css "^5.3.0" + cli-table3 "^0.6.2" combine-promises "^1.1.0" commander "^5.1.0" - copy-webpack-plugin "^10.2.4" - core-js "^3.21.1" + copy-webpack-plugin "^11.0.0" + core-js "^3.22.7" css-loader "^6.7.1" - css-minimizer-webpack-plugin "^3.4.1" - cssnano "^5.1.5" - del "^6.0.0" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.9" + del "^6.1.1" detect-port "^1.3.0" escape-html "^1.0.3" eta "^1.12.3" file-loader "^6.2.0" - fs-extra "^10.0.1" + fs-extra "^10.1.0" html-minifier-terser "^6.1.0" - html-tags "^3.1.0" + html-tags "^3.2.0" html-webpack-plugin "^5.5.0" import-fresh "^3.3.0" - is-root "^2.1.0" leven "^3.1.0" lodash "^4.17.21" mini-css-extract-plugin "^2.6.0" - nprogress "^0.2.0" - postcss "^8.4.12" - postcss-loader "^6.2.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" prompts "^2.4.2" - react-dev-utils "^12.0.0" - react-helmet-async "^1.2.3" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" react-loadable "npm:@docusaurus/react-loadable@5.5.2" react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.2.0" + react-router "^5.3.3" react-router-config "^5.1.1" - react-router-dom "^5.2.0" + react-router-dom "^5.3.3" remark-admonitions "^1.2.1" rtl-detect "^1.0.4" - semver "^7.3.5" + semver "^7.3.7" serve-handler "^6.1.3" shelljs "^0.8.5" terser-webpack-plugin "^5.3.1" - tslib "^2.3.1" + tslib "^2.4.0" update-notifier "^5.1.0" url-loader "^4.1.1" wait-on "^6.0.1" - webpack "^5.70.0" + webpack "^5.72.1" webpack-bundle-analyzer "^4.5.0" - webpack-dev-server "^4.7.4" + webpack-dev-server "^4.9.0" webpack-merge "^5.8.0" webpackbar "^5.0.2" -"@docusaurus/cssnano-preset@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.18.tgz" - integrity sha512-VxhYmpyx16Wv00W9TUfLVv0NgEK/BwP7pOdWoaiELEIAMV7SO1+6iB8gsFUhtfKZ31I4uPVLMKrCyWWakoFeFA== +"@docusaurus/cssnano-preset@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.21.tgz#38113877a5857c3f9d493522085d20909dcec474" + integrity sha512-fhTZrg1vc6zYYZIIMXpe1TnEVGEjqscBo0s1uomSwKjjtMgu7wkzc1KKJYY7BndsSA+fVVkZ+OmL/kAsmK7xxw== dependencies: - cssnano-preset-advanced "^5.3.1" - postcss "^8.4.12" + cssnano-preset-advanced "^5.3.5" + postcss "^8.4.14" postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" -"@docusaurus/logger@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.18.tgz" - integrity sha512-frNe5vhH3mbPmH980Lvzaz45+n1PQl3TkslzWYXQeJOkFX17zUd3e3U7F9kR1+DocmAqHkgAoWuXVcvEoN29fg== +"@docusaurus/logger@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-beta.21.tgz#f6ab4133917965349ae03fd9111a940b24d4fd12" + integrity sha512-HTFp8FsSMrAj7Uxl5p72U+P7rjYU/LRRBazEoJbs9RaqoKEdtZuhv8MYPOCh46K9TekaoquRYqag2o23Qt4ggA== dependencies: chalk "^4.1.2" - tslib "^2.3.1" + tslib "^2.4.0" -"@docusaurus/mdx-loader@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.18.tgz" - integrity sha512-pOmAQM4Y1jhuZTbEhjh4ilQa74Mh6Q0pMZn1xgIuyYDdqvIOrOlM/H0i34YBn3+WYuwsGim4/X0qynJMLDUA4A== +"@docusaurus/mdx-loader@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.21.tgz#52af341e21f22be882d2155a7349bea10f5d77a3" + integrity sha512-AI+4obJnpOaBOAYV6df2ux5Y1YJCBS+MhXFf0yhED12sVLJi2vffZgdamYd/d/FwvWDw6QLs/VD2jebd7P50yQ== dependencies: - "@babel/parser" "^7.17.8" - "@babel/traverse" "^7.17.3" - "@docusaurus/logger" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" + "@babel/parser" "^7.18.3" + "@babel/traverse" "^7.18.2" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" "@mdx-js/mdx" "^1.6.22" escape-html "^1.0.3" file-loader "^6.2.0" - fs-extra "^10.0.1" + fs-extra "^10.1.0" image-size "^1.0.1" mdast-util-to-string "^2.0.0" - remark-emoji "^2.1.0" + remark-emoji "^2.2.0" stringify-object "^3.3.0" - tslib "^2.3.1" - unist-util-visit "^2.0.2" + tslib "^2.4.0" + unist-util-visit "^2.0.3" url-loader "^4.1.1" - webpack "^5.70.0" + webpack "^5.72.1" "@docusaurus/module-type-aliases@2.0.0-beta.18": version "2.0.0-beta.18" @@ -1728,119 +2366,132 @@ "@types/react-router-dom" "*" react-helmet-async "*" -"@docusaurus/plugin-content-blog@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.18.tgz" - integrity sha512-qzK83DgB+mxklk3PQC2nuTGPQD/8ogw1nXSmaQpyXAyhzcz4CXAZ9Swl/Ee9A/bvPwQGnSHSP3xqIYl8OkFtfw== - dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/logger" "2.0.0-beta.18" - "@docusaurus/mdx-loader" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" - "@docusaurus/utils-common" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" - cheerio "^1.0.0-rc.10" +"@docusaurus/module-type-aliases@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.21.tgz#345f1c1a99407775d1d3ffc1a90c2df93d50a9b8" + integrity sha512-gRkWICgQZiqSJgrwRKWjXm5gAB+9IcfYdUbCG0PRPP/G8sNs9zBIOY4uT4Z5ox2CWFEm44U3RTTxj7BiLVMBXw== + dependencies: + "@docusaurus/types" "2.0.0-beta.21" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + +"@docusaurus/plugin-content-blog@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.21.tgz#86211deeea901ddcd77ca387778e121e93ee8d01" + integrity sha512-IP21yJViP3oBmgsWBU5LhrG1MZXV4mYCQSoCAboimESmy1Z11RCNP2tXaqizE3iTmXOwZZL+SNBk06ajKCEzWg== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/mdx-loader" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/utils-common" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" + cheerio "^1.0.0-rc.11" feed "^4.2.2" - fs-extra "^10.0.1" + fs-extra "^10.1.0" lodash "^4.17.21" reading-time "^1.5.0" remark-admonitions "^1.2.1" - tslib "^2.3.1" + tslib "^2.4.0" + unist-util-visit "^2.0.3" utility-types "^3.10.0" - webpack "^5.70.0" - -"@docusaurus/plugin-content-docs@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.18.tgz" - integrity sha512-z4LFGBJuzn4XQiUA7OEA2SZTqlp+IYVjd3NrCk/ZUfNi1tsTJS36ATkk9Y6d0Nsp7K2kRXqaXPsz4adDgeIU+Q== - dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/logger" "2.0.0-beta.18" - "@docusaurus/mdx-loader" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" + webpack "^5.72.1" + +"@docusaurus/plugin-content-docs@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.21.tgz#b3171fa9aed99e367b6eb7111187bd0e3dcf2949" + integrity sha512-aa4vrzJy4xRy81wNskyhE3wzRf3AgcESZ1nfKh8xgHUkT7fDTZ1UWlg50Jb3LBCQFFyQG2XQB9N6llskI/KUnw== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/mdx-loader" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" combine-promises "^1.1.0" - fs-extra "^10.0.1" + fs-extra "^10.1.0" import-fresh "^3.3.0" js-yaml "^4.1.0" lodash "^4.17.21" remark-admonitions "^1.2.1" - tslib "^2.3.1" + tslib "^2.4.0" utility-types "^3.10.0" - webpack "^5.70.0" - -"@docusaurus/plugin-content-pages@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.18.tgz" - integrity sha512-CJ2Xeb9hQrMeF4DGywSDVX2TFKsQpc8ZA7czyeBAAbSFsoRyxXPYeSh8aWljqR4F1u/EKGSKy0Shk/D4wumaHw== - dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/mdx-loader" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" - fs-extra "^10.0.1" + webpack "^5.72.1" + +"@docusaurus/plugin-content-pages@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.21.tgz#df6b4c5c4cde8a0ea491a30002e84941ca7bf0cf" + integrity sha512-DmXOXjqNI+7X5hISzCvt54QIK6XBugu2MOxjxzuqI7q92Lk/EVdraEj5mthlH8IaEH/VlpWYJ1O9TzLqX5vH2g== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/mdx-loader" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" + fs-extra "^10.1.0" remark-admonitions "^1.2.1" - tslib "^2.3.1" - webpack "^5.70.0" + tslib "^2.4.0" + webpack "^5.72.1" -"@docusaurus/plugin-debug@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.18.tgz" - integrity sha512-inLnLERgG7q0WlVmK6nYGHwVqREz13ivkynmNygEibJZToFRdgnIPW+OwD8QzgC5MpQTJw7+uYjcitpBumy1Gw== +"@docusaurus/plugin-debug@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.21.tgz#dfa212fd90fe2f54439aacdc8c143e8ce96b0d27" + integrity sha512-P54J4q4ecsyWW0Jy4zbimSIHna999AfbxpXGmF1IjyHrjoA3PtuakV1Ai51XrGEAaIq9q6qMQkEhbUd3CffGAw== dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" - fs-extra "^10.0.1" + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + fs-extra "^10.1.0" react-json-view "^1.21.3" - tslib "^2.3.1" - -"@docusaurus/plugin-google-analytics@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.18.tgz" - integrity sha512-s9dRBWDrZ1uu3wFXPCF7yVLo/+5LUFAeoxpXxzory8gn9GYDt8ZDj80h5DUyCLxiy72OG6bXWNOYS/Vc6cOPXQ== - dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" - tslib "^2.3.1" - -"@docusaurus/plugin-google-gtag@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.18.tgz" - integrity sha512-h7vPuLVo/9pHmbFcvb4tCpjg4SxxX4k+nfVDyippR254FM++Z/nA5pRB0WvvIJ3ZTe0ioOb5Wlx2xdzJIBHUNg== - dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" - tslib "^2.3.1" - -"@docusaurus/plugin-sitemap@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.18.tgz" - integrity sha512-Klonht0Ye3FivdBpS80hkVYNOH+8lL/1rbCPEV92rKhwYdwnIejqhdKct4tUTCl8TYwWiyeUFQqobC/5FNVZPQ== - dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" - "@docusaurus/utils-common" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" - fs-extra "^10.0.1" + tslib "^2.4.0" + +"@docusaurus/plugin-google-analytics@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.21.tgz#5475c58fb23603badf41d84298569f6c46b4e6b2" + integrity sha512-+5MS0PeGaJRgPuNZlbd/WMdQSpOACaxEz7A81HAxm6kE+tIASTW3l8jgj1eWFy/PGPzaLnQrEjxI1McAfnYmQw== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.21.tgz#a4a101089994a7103c1cc7cddb15170427b185d6" + integrity sha512-4zxKZOnf0rfh6myXLG7a6YZfQcxYDMBsWqANEjCX77H5gPdK+GHZuDrxK6sjFvRBv4liYCrNjo7HJ4DpPoT0zA== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" + tslib "^2.4.0" + +"@docusaurus/plugin-sitemap@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.21.tgz#8bfa695eada2ec95c9376a884641237ffca5dd3d" + integrity sha512-/ynWbcXZXcYZ6sT2X6vAJbnfqcPxwdGEybd0rcRZi4gBHq6adMofYI25AqELmnbBDxt0If+vlAeUHFRG5ueP7Q== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/utils-common" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" + fs-extra "^10.1.0" sitemap "^7.1.1" - tslib "^2.3.1" - -"@docusaurus/preset-classic@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.18.tgz" - integrity sha512-TfDulvFt/vLWr/Yy7O0yXgwHtJhdkZ739bTlFNwEkRMAy8ggi650e52I1I0T79s67llecb4JihgHPW+mwiVkCQ== - dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/plugin-content-blog" "2.0.0-beta.18" - "@docusaurus/plugin-content-docs" "2.0.0-beta.18" - "@docusaurus/plugin-content-pages" "2.0.0-beta.18" - "@docusaurus/plugin-debug" "2.0.0-beta.18" - "@docusaurus/plugin-google-analytics" "2.0.0-beta.18" - "@docusaurus/plugin-google-gtag" "2.0.0-beta.18" - "@docusaurus/plugin-sitemap" "2.0.0-beta.18" - "@docusaurus/theme-classic" "2.0.0-beta.18" - "@docusaurus/theme-common" "2.0.0-beta.18" - "@docusaurus/theme-search-algolia" "2.0.0-beta.18" + tslib "^2.4.0" + +"@docusaurus/preset-classic@^2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.21.tgz#1362d8650ebed22633db411caaba80075f7c86ce" + integrity sha512-KvBnIUu7y69pNTJ9UhX6SdNlK6prR//J3L4rhN897tb8xx04xHHILlPXko2Il+C3Xzgh3OCgyvkoz9K6YlFTDw== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/plugin-content-blog" "2.0.0-beta.21" + "@docusaurus/plugin-content-docs" "2.0.0-beta.21" + "@docusaurus/plugin-content-pages" "2.0.0-beta.21" + "@docusaurus/plugin-debug" "2.0.0-beta.21" + "@docusaurus/plugin-google-analytics" "2.0.0-beta.21" + "@docusaurus/plugin-google-gtag" "2.0.0-beta.21" + "@docusaurus/plugin-sitemap" "2.0.0-beta.21" + "@docusaurus/theme-classic" "2.0.0-beta.21" + "@docusaurus/theme-common" "2.0.0-beta.21" + "@docusaurus/theme-search-algolia" "2.0.0-beta.21" "@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" @@ -1850,75 +2501,77 @@ "@types/react" "*" prop-types "^15.6.2" -"@docusaurus/theme-classic@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.18.tgz" - integrity sha512-WJWofvSGKC4Luidk0lyUwkLnO3DDynBBHwmt4QrV+aAVWWSOHUjA2mPOF6GLGuzkZd3KfL9EvAfsU0aGE1Hh5g== - dependencies: - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/plugin-content-blog" "2.0.0-beta.18" - "@docusaurus/plugin-content-docs" "2.0.0-beta.18" - "@docusaurus/plugin-content-pages" "2.0.0-beta.18" - "@docusaurus/theme-common" "2.0.0-beta.18" - "@docusaurus/theme-translations" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" - "@docusaurus/utils-common" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" +"@docusaurus/theme-classic@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.21.tgz#6df5b9ea2d389dafb6f59badeabb3eda060b5017" + integrity sha512-Ge0WNdTefD0VDQfaIMRRWa8tWMG9+8/OlBRd5MK88/TZfqdBq7b/gnCSaalQlvZwwkj6notkKhHx72+MKwWUJA== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/plugin-content-blog" "2.0.0-beta.21" + "@docusaurus/plugin-content-docs" "2.0.0-beta.21" + "@docusaurus/plugin-content-pages" "2.0.0-beta.21" + "@docusaurus/theme-common" "2.0.0-beta.21" + "@docusaurus/theme-translations" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/utils-common" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" "@mdx-js/react" "^1.6.22" clsx "^1.1.1" copy-text-to-clipboard "^3.0.1" - infima "0.2.0-alpha.38" + infima "0.2.0-alpha.39" lodash "^4.17.21" - postcss "^8.4.12" - prism-react-renderer "^1.3.1" - prismjs "^1.27.0" - react-router-dom "^5.2.0" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.3" + prismjs "^1.28.0" + react-router-dom "^5.3.3" rtlcss "^3.5.0" + tslib "^2.4.0" -"@docusaurus/theme-common@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.18.tgz" - integrity sha512-3pI2Q6ttScDVTDbuUKAx+TdC8wmwZ2hfWk8cyXxksvC9bBHcyzXhSgcK8LTsszn2aANyZ3e3QY2eNSOikTFyng== +"@docusaurus/theme-common@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.21.tgz#508478251982d01655ef505ccb2420db38623db8" + integrity sha512-fTKoTLRfjuFG6c3iwnVjIIOensxWMgdBKLfyE5iih3Lq7tQgkE7NyTGG9BKLrnTJ7cAD2UXdXM9xbB7tBf1qzg== dependencies: - "@docusaurus/module-type-aliases" "2.0.0-beta.18" - "@docusaurus/plugin-content-blog" "2.0.0-beta.18" - "@docusaurus/plugin-content-docs" "2.0.0-beta.18" - "@docusaurus/plugin-content-pages" "2.0.0-beta.18" + "@docusaurus/module-type-aliases" "2.0.0-beta.21" + "@docusaurus/plugin-content-blog" "2.0.0-beta.21" + "@docusaurus/plugin-content-docs" "2.0.0-beta.21" + "@docusaurus/plugin-content-pages" "2.0.0-beta.21" clsx "^1.1.1" parse-numeric-range "^1.3.0" - prism-react-renderer "^1.3.1" - tslib "^2.3.1" + prism-react-renderer "^1.3.3" + tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.18.tgz" - integrity sha512-2w97KO/gnjI49WVtYQqENpQ8iO1Sem0yaTxw7/qv/ndlmIAQD0syU4yx6GsA7bTQCOGwKOWWzZSetCgUmTnWgA== - dependencies: - "@docsearch/react" "^3.0.0" - "@docusaurus/core" "2.0.0-beta.18" - "@docusaurus/logger" "2.0.0-beta.18" - "@docusaurus/plugin-content-docs" "2.0.0-beta.18" - "@docusaurus/theme-common" "2.0.0-beta.18" - "@docusaurus/theme-translations" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" - "@docusaurus/utils-validation" "2.0.0-beta.18" - algoliasearch "^4.13.0" - algoliasearch-helper "^3.7.4" +"@docusaurus/theme-search-algolia@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.21.tgz#2891f11372e2542e4e1426c3100b72c2d30d4d68" + integrity sha512-T1jKT8MVSSfnztSqeebUOpWHPoHKtwDXtKYE0xC99JWoZ+mMfv8AFhVSoSddn54jLJjV36mxg841eHQIySMCpQ== + dependencies: + "@docsearch/react" "^3.1.0" + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/plugin-content-docs" "2.0.0-beta.21" + "@docusaurus/theme-common" "2.0.0-beta.21" + "@docusaurus/theme-translations" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.8.2" clsx "^1.1.1" eta "^1.12.3" - fs-extra "^10.0.1" + fs-extra "^10.1.0" lodash "^4.17.21" - tslib "^2.3.1" + tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.18.tgz" - integrity sha512-1uTEUXlKC9nco1Lx9H5eOwzB+LP4yXJG5wfv1PMLE++kJEdZ40IVorlUi3nJnaa9/lJNq5vFvvUDrmeNWsxy/Q== +"@docusaurus/theme-translations@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.21.tgz#5da60ffc58de256b96316c5e0fe2733c1e83f22c" + integrity sha512-dLVT9OIIBs6MpzMb1bAy+C0DPJK3e3DNctG+ES0EP45gzEqQxzs4IsghpT+QDaOsuhNnAlosgJpFWX3rqxF9xA== dependencies: - fs-extra "^10.0.1" - tslib "^2.3.1" + fs-extra "^10.1.0" + tslib "^2.4.0" "@docusaurus/types@2.0.0-beta.18": version "2.0.0-beta.18" @@ -1931,33 +2584,46 @@ webpack "^5.70.0" webpack-merge "^5.8.0" -"@docusaurus/utils-common@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.18.tgz" - integrity sha512-pK83EcOIiKCLGhrTwukZMo5jqd1sqqqhQwOVyxyvg+x9SY/lsnNzScA96OEfm+qQLBwK1OABA7Xc1wfkgkUxvw== +"@docusaurus/types@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.21.tgz#36659c6c012663040dcd4cbc97b5d7a555dae229" + integrity sha512-/GH6Npmq81eQfMC/ikS00QSv9jNyO1RXEpNSx5GLA3sFX8Iib26g2YI2zqNplM8nyxzZ2jVBuvUoeODTIbTchQ== + dependencies: + commander "^5.1.0" + history "^4.9.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.72.1" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.21.tgz#81e86ed04ad62b75e9ba6a5e7689dc23d5f36a0a" + integrity sha512-5w+6KQuJb6pUR2M8xyVuTMvO5NFQm/p8TOTDFTx60wt3p0P1rRX00v6FYsD4PK6pgmuoKjt2+Ls8dtSXc4qFpQ== dependencies: - tslib "^2.3.1" + tslib "^2.4.0" -"@docusaurus/utils-validation@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.18.tgz" - integrity sha512-3aDrXjJJ8Cw2MAYEk5JMNnr8UHPxmVNbPU/PIHFWmWK09nJvs3IQ8nc9+8I30aIjRdIyc/BIOCxgvAcJ4hsxTA== +"@docusaurus/utils-validation@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.21.tgz#10169661be5f8a233f4c12202ee5802ccb77400f" + integrity sha512-6NG1FHTRjv1MFzqW//292z7uCs77vntpWEbZBHk3n67aB1HoMn5SOwjLPtRDjbCgn6HCHFmdiJr6euCbjhYolg== dependencies: - "@docusaurus/logger" "2.0.0-beta.18" - "@docusaurus/utils" "2.0.0-beta.18" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" joi "^17.6.0" js-yaml "^4.1.0" - tslib "^2.3.1" + tslib "^2.4.0" -"@docusaurus/utils@2.0.0-beta.18": - version "2.0.0-beta.18" - resolved "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.18.tgz" - integrity sha512-v2vBmH7xSbPwx3+GB90HgLSQdj+Rh5ELtZWy7M20w907k0ROzDmPQ/8Ke2DK3o5r4pZPGnCrsB3SaYI83AEmAA== +"@docusaurus/utils@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.21.tgz#8fc4499c4cfedd29805025d930f8008cad255044" + integrity sha512-M/BrVCDmmUPZLxtiStBgzpQ4I5hqkggcpnQmEN+LbvbohjbtVnnnZQ0vptIziv1w8jry/woY+ePsyOO7O/yeLQ== dependencies: - "@docusaurus/logger" "2.0.0-beta.18" + "@docusaurus/logger" "2.0.0-beta.21" "@svgr/webpack" "^6.2.1" file-loader "^6.2.0" - fs-extra "^10.0.1" + fs-extra "^10.1.0" github-slugger "^1.4.0" globby "^11.1.0" gray-matter "^4.0.3" @@ -1966,9 +2632,9 @@ micromatch "^4.0.5" resolve-pathname "^3.0.0" shelljs "^0.8.5" - tslib "^2.3.1" + tslib "^2.4.0" url-loader "^4.1.1" - webpack "^5.70.0" + webpack "^5.72.1" "@ethersproject/abi@5.6.3", "@ethersproject/abi@^5.6.3": version "5.6.3" @@ -2323,11 +2989,25 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" + integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.5" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz" integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== +"@jridgewell/set-array@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" + integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.11" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz" @@ -2341,6 +3021,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" + integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.3" resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz" @@ -2550,11 +3238,6 @@ dependencies: defer-to-connect "^1.0.1" -"@trysound/sax@0.1.1": - version "0.1.1" - resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz" - integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== - "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" @@ -2801,7 +3484,7 @@ dependencies: "@types/express" "*" -"@types/serve-static@*": +"@types/serve-static@*", "@types/serve-static@^1.13.10": version "1.13.10" resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== @@ -3075,10 +3758,10 @@ ajv@^8.0.0, ajv@^8.8.0: require-from-string "^2.0.2" uri-js "^4.2.2" -algoliasearch-helper@^3.7.4: - version "3.8.2" - resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.8.2.tgz" - integrity sha512-AXxiF0zT9oYwl8ZBgU/eRXvfYhz7cBA5YrLPlw9inZHdaYF0QEya/f1Zp1mPYMXc1v6VkHwBq4pk6/vayBLICg== +algoliasearch-helper@^3.8.2: + version "3.9.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.9.0.tgz#1e99d351ecdcff48449644157a8d250c7c592828" + integrity sha512-siWWl8QYJ3sh1yzJf9h/cHHpZC8wuPoPdVx5OtQ8X62ruUembTwvsLYoicrL7pF7fsYxdyvJfV9Yb2/nrVGrfg== dependencies: "@algolia/events" "^4.0.1" @@ -3102,7 +3785,7 @@ algoliasearch@^4.0.0: "@algolia/requester-node-http" "4.10.5" "@algolia/transporter" "4.10.5" -algoliasearch@^4.12.0, algoliasearch@^4.13.0: +algoliasearch@^4.12.0: version "4.13.0" resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.13.0.tgz" integrity sha512-oHv4faI1Vl2s+YC0YquwkK/TsaJs79g2JFg5FDm2rKN12VItPTAeQ7hyJMHarOPPYuCnNC5kixbtcqvb21wchw== @@ -3122,10 +3805,25 @@ algoliasearch@^4.12.0, algoliasearch@^4.13.0: "@algolia/requester-node-http" "4.13.0" "@algolia/transporter" "4.13.0" -alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= +algoliasearch@^4.13.1: + version "4.13.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.13.1.tgz#54195c41c9e4bd13ed64982248cf49d4576974fe" + integrity sha512-dtHUSE0caWTCE7liE1xaL+19AFf6kWEcyn76uhcitWpntqvicFHXKFoZe5JJcv9whQOTRM6+B8qJz6sFj+rDJA== + dependencies: + "@algolia/cache-browser-local-storage" "4.13.1" + "@algolia/cache-common" "4.13.1" + "@algolia/cache-in-memory" "4.13.1" + "@algolia/client-account" "4.13.1" + "@algolia/client-analytics" "4.13.1" + "@algolia/client-common" "4.13.1" + "@algolia/client-personalization" "4.13.1" + "@algolia/client-search" "4.13.1" + "@algolia/logger-common" "4.13.1" + "@algolia/logger-console" "4.13.1" + "@algolia/requester-browser-xhr" "4.13.1" + "@algolia/requester-common" "4.13.1" + "@algolia/requester-node-http" "4.13.1" + "@algolia/transporter" "4.13.1" ansi-align@^3.0.0: version "3.0.0" @@ -3225,29 +3923,17 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-union@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz" - integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== - asap@~2.0.3: version "2.0.6" resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -async@^2.6.2: - version "2.6.3" - resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -autoprefixer@^10.3.7, autoprefixer@^10.4.4: +autoprefixer@^10.3.7: version "10.4.4" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz" integrity sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA== @@ -3259,6 +3945,18 @@ autoprefixer@^10.3.7, autoprefixer@^10.4.4: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +autoprefixer@^10.4.7: + version "10.4.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.7.tgz#1db8d195f41a52ca5069b7593be167618edbbedf" + integrity sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA== + dependencies: + browserslist "^4.20.3" + caniuse-lite "^1.0.30001335" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + axios@^0.25.0: version "0.25.0" resolved "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz" @@ -3266,10 +3964,10 @@ axios@^0.25.0: dependencies: follow-redirects "^1.14.7" -babel-loader@^8.2.4: - version "8.2.4" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.4.tgz" - integrity sha512-8dytA3gcvPPPv4Grjhnt8b5IIiTcq/zeXOPk4iTYI0SVXcsmuGg7JtBRDp8S9X+gJfhQ8ektjXZlDu1Bb33U8A== +babel-loader@^8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== dependencies: find-cache-dir "^3.3.1" loader-utils "^2.0.0" @@ -3284,13 +3982,6 @@ babel-plugin-apply-mdx-type-prop@1.6.22: "@babel/helper-plugin-utils" "7.10.4" "@mdx-js/util" "1.6.22" -babel-plugin-dynamic-import-node@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" @@ -3465,7 +4156,7 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.6: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6: version "4.17.0" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz" integrity sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g== @@ -3487,6 +4178,16 @@ browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^4.19.1, browserslist@^ node-releases "^2.0.2" picocolors "^1.0.0" +browserslist@^4.20.3, browserslist@^4.21.0: + version "4.21.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe" + integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA== + dependencies: + caniuse-lite "^1.0.30001358" + electron-to-chromium "^1.4.164" + node-releases "^2.0.5" + update-browserslist-db "^1.0.0" + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" @@ -3566,6 +4267,11 @@ caniuse-lite@^1.0.30001317: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz" integrity sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w== +caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001358: + version "1.0.30001359" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz#a1c1cbe1c2da9e689638813618b4219acbd4925e" + integrity sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw== + ccount@^1.0.0, ccount@^1.0.3: version "1.1.0" resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" @@ -3614,6 +4320,18 @@ cheerio-select@^1.5.0: domhandler "^4.3.1" domutils "^2.8.0" +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + cheerio@^0.22.0: version "0.22.0" resolved "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz" @@ -3636,7 +4354,21 @@ cheerio@^0.22.0: lodash.reject "^4.4.0" lodash.some "^4.4.0" -cheerio@^1.0.0-rc.10, cheerio@^1.0.0-rc.9: +cheerio@^1.0.0-rc.11: + version "1.0.0-rc.11" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.11.tgz#1be84be1a126958366bcc57a11648cd9b30a60c2" + integrity sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + tslib "^2.4.0" + +cheerio@^1.0.0-rc.9: version "1.0.0-rc.10" resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz" integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw== @@ -3674,7 +4406,7 @@ ci-info@^2.0.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -clean-css@^5.2.2, clean-css@^5.2.4: +clean-css@^5.2.2, clean-css@^5.3.0: version "5.3.0" resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz" integrity sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ== @@ -3696,14 +4428,14 @@ cli-boxes@^3.0.0: resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== -cli-table3@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz" - integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA== +cli-table3@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== dependencies: string-width "^4.2.0" optionalDependencies: - colors "1.4.0" + "@colors/colors" "1.5.0" clone-deep@^4.0.1: version "4.0.1" @@ -3755,17 +4487,12 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colord@^2.0.1, colord@^2.6: - version "2.7.0" - resolved "https://registry.npmjs.org/colord/-/colord-2.7.0.tgz" - integrity sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q== - colord@^2.9.1: version "2.9.2" resolved "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz" integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== -colorette@^1.2.2, colorette@^1.3.0: +colorette@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== @@ -3775,11 +4502,6 @@ colorette@^2.0.10: resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== -colors@1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - combine-promises@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz" @@ -3901,14 +4623,14 @@ copy-text-to-clipboard@^3.0.1: resolved "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz" integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== -copy-webpack-plugin@^10.2.4: - version "10.2.4" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz" - integrity sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg== +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== dependencies: - fast-glob "^3.2.7" + fast-glob "^3.2.11" glob-parent "^6.0.1" - globby "^12.0.2" + globby "^13.1.1" normalize-path "^3.0.0" schema-utils "^4.0.0" serialize-javascript "^6.0.0" @@ -3921,15 +4643,23 @@ core-js-compat@^3.20.2, core-js-compat@^3.21.0: browserslist "^4.19.1" semver "7.0.0" +core-js-compat@^3.22.1: + version "3.23.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" + integrity sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw== + dependencies: + browserslist "^4.21.0" + semver "7.0.0" + core-js-pure@^3.20.2: version "3.21.1" resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz" integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== -core-js@^3.21.1: - version "3.21.1" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz" - integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig== +core-js@^3.22.7: + version "3.23.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.3.tgz#3b977612b15da6da0c9cc4aec487e8d24f371112" + integrity sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q== core-util-is@~1.0.0: version "1.0.3" @@ -3976,25 +4706,13 @@ cross-spawn@^7.0.3: crypto-random-string@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-color-names@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz" - integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== - -css-declaration-sorter@^6.0.3: - version "6.1.3" - resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.3.tgz" - integrity sha512-SvjQjNRZgh4ULK1LDJ2AduPKUKxIqmtU7ZAyi47BTV+M90Qvxr9AB6lKlLbDUfXqI9IQeYA8LbAsCZPpJEV3aA== - dependencies: - timsort "^0.3.0" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-declaration-sorter@^6.2.2: - version "6.2.2" - resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz" - integrity sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg== +css-declaration-sorter@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz#72ebd995c8f4532ff0036631f7365cce9759df14" + integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og== css-loader@^6.7.1: version "6.7.1" @@ -4010,14 +4728,14 @@ css-loader@^6.7.1: postcss-value-parser "^4.2.0" semver "^7.3.5" -css-minimizer-webpack-plugin@^3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz" - integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== +css-minimizer-webpack-plugin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz#e11800388c19c2b7442c39cc78ac8ae3675c9605" + integrity sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA== dependencies: - cssnano "^5.0.6" - jest-worker "^27.0.2" - postcss "^8.3.5" + cssnano "^5.1.8" + jest-worker "^27.5.1" + postcss "^8.4.13" schema-utils "^4.0.0" serialize-javascript "^6.0.0" source-map "^0.6.1" @@ -4044,6 +4762,17 @@ css-select@^4.3.0: domutils "^2.8.0" nth-check "^2.0.1" +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz" @@ -4072,7 +4801,7 @@ css-what@^5.0.0: resolved "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz" integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== -css-what@^6.0.1: +css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== @@ -4082,114 +4811,64 @@ cssesc@^3.0.0: resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-advanced@^5.3.1: - version "5.3.3" - resolved "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.3.tgz" - integrity sha512-AB9SmTSC2Gd8T7PpKUsXFJ3eNsg7dc4CTZ0+XAJ29MNxyJsrCEk7N1lw31bpHrsQH2PVJr21bbWgGAfA9j0dIA== +cssnano-preset-advanced@^5.3.5: + version "5.3.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz#027b1d05ef896d908178c483f0ec4190cb50ef9a" + integrity sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg== dependencies: autoprefixer "^10.3.7" - cssnano-preset-default "^5.2.7" + cssnano-preset-default "^5.2.12" postcss-discard-unused "^5.1.0" postcss-merge-idents "^5.1.1" postcss-reduce-idents "^5.2.0" postcss-zindex "^5.1.0" -cssnano-preset-default@^5.1.4: - version "5.1.4" - resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.4.tgz" - integrity sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ== - dependencies: - css-declaration-sorter "^6.0.3" - cssnano-utils "^2.0.1" - postcss-calc "^8.0.0" - postcss-colormin "^5.2.0" - postcss-convert-values "^5.0.1" - postcss-discard-comments "^5.0.1" - postcss-discard-duplicates "^5.0.1" - postcss-discard-empty "^5.0.1" - postcss-discard-overridden "^5.0.1" - postcss-merge-longhand "^5.0.2" - postcss-merge-rules "^5.0.2" - postcss-minify-font-values "^5.0.1" - postcss-minify-gradients "^5.0.2" - postcss-minify-params "^5.0.1" - postcss-minify-selectors "^5.1.0" - postcss-normalize-charset "^5.0.1" - postcss-normalize-display-values "^5.0.1" - postcss-normalize-positions "^5.0.1" - postcss-normalize-repeat-style "^5.0.1" - postcss-normalize-string "^5.0.1" - postcss-normalize-timing-functions "^5.0.1" - postcss-normalize-unicode "^5.0.1" - postcss-normalize-url "^5.0.2" - postcss-normalize-whitespace "^5.0.1" - postcss-ordered-values "^5.0.2" - postcss-reduce-initial "^5.0.1" - postcss-reduce-transforms "^5.0.1" - postcss-svgo "^5.0.2" - postcss-unique-selectors "^5.0.1" - -cssnano-preset-default@^5.2.7: - version "5.2.7" - resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz" - integrity sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA== - dependencies: - css-declaration-sorter "^6.2.2" +cssnano-preset-default@^5.2.12: + version "5.2.12" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97" + integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== + dependencies: + css-declaration-sorter "^6.3.0" cssnano-utils "^3.1.0" postcss-calc "^8.2.3" postcss-colormin "^5.3.0" - postcss-convert-values "^5.1.0" - postcss-discard-comments "^5.1.1" + postcss-convert-values "^5.1.2" + postcss-discard-comments "^5.1.2" postcss-discard-duplicates "^5.1.0" postcss-discard-empty "^5.1.1" postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.4" - postcss-merge-rules "^5.1.1" + postcss-merge-longhand "^5.1.6" + postcss-merge-rules "^5.1.2" postcss-minify-font-values "^5.1.0" postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.2" - postcss-minify-selectors "^5.2.0" + postcss-minify-params "^5.1.3" + postcss-minify-selectors "^5.2.1" postcss-normalize-charset "^5.1.0" postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.0" - postcss-normalize-repeat-style "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" postcss-normalize-string "^5.1.0" postcss-normalize-timing-functions "^5.1.0" postcss-normalize-unicode "^5.1.0" postcss-normalize-url "^5.1.0" postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.1" + postcss-ordered-values "^5.1.3" postcss-reduce-initial "^5.1.0" postcss-reduce-transforms "^5.1.0" postcss-svgo "^5.1.0" postcss-unique-selectors "^5.1.1" -cssnano-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz" - integrity sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ== - cssnano-utils@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano@^5.0.6: - version "5.0.8" - resolved "https://registry.npmjs.org/cssnano/-/cssnano-5.0.8.tgz" - integrity sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg== - dependencies: - cssnano-preset-default "^5.1.4" - is-resolvable "^1.1.0" - lilconfig "^2.0.3" - yaml "^1.10.2" - -cssnano@^5.1.5: - version "5.1.7" - resolved "https://registry.npmjs.org/cssnano/-/cssnano-5.1.7.tgz" - integrity sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg== +cssnano@^5.1.8, cssnano@^5.1.9: + version "5.1.12" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.12.tgz#bcd0b64d6be8692de79332c501daa7ece969816c" + integrity sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ== dependencies: - cssnano-preset-default "^5.2.7" + cssnano-preset-default "^5.2.12" lilconfig "^2.0.3" yaml "^1.10.2" @@ -4212,13 +4891,6 @@ debug@2.6.9, debug@^2.6.0: dependencies: ms "2.0.0" -debug@^3.1.1: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - debug@^4.1.0, debug@^4.1.1: version "4.3.2" resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" @@ -4267,10 +4939,10 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -del@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/del/-/del-6.0.0.tgz" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== dependencies: globby "^11.0.1" graceful-fs "^4.2.4" @@ -4376,6 +5048,15 @@ dom-serializer@^1.0.1, dom-serializer@^1.3.2: domhandler "^4.2.0" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + dom-serializer@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz" @@ -4394,6 +5075,11 @@ domelementtype@^2.0.1, domelementtype@^2.2.0: resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + domhandler@^2.3.0: version "2.4.2" resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz" @@ -4415,6 +5101,13 @@ domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domutils@1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz" @@ -4440,6 +5133,15 @@ domutils@^2.5.2, domutils@^2.6.0, domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" @@ -4480,6 +5182,11 @@ electron-to-chromium@^1.3.830: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.833.tgz" integrity sha512-h+9aVaUHjyunLqtCjJF2jrJ73tYcJqo2cCGKtVAXH9WmnBsb8hiChRQ0P1uXjdxR6Wcfxibephy41c1YlZA/pA== +electron-to-chromium@^1.4.164: + version "1.4.170" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz#0415fc489402e09bfbe1f0c99bbf4d73f31d48d4" + integrity sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw== + electron-to-chromium@^1.4.84: version "1.4.106" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz" @@ -4543,6 +5250,14 @@ enhanced-resolve@^5.9.2: graceful-fs "^4.2.4" tapable "^2.2.0" +enhanced-resolve@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" + integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + entities@^1.1.1, entities@~1.1.1: version "1.1.2" resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz" @@ -4558,6 +5273,11 @@ entities@^3.0.1: resolved "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== +entities@^4.2.0, entities@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.0.tgz#62915f08d67353bb4eb67e3d62641a4059aec656" + integrity sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" @@ -4773,7 +5493,7 @@ fast-glob@^3.1.1: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -4964,10 +5684,10 @@ fresh@0.5.2: resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -fs-extra@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz" - integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -5153,15 +5873,14 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^12.0.2: - version "12.2.0" - resolved "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz" - integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA== +globby@^13.1.1: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== dependencies: - array-union "^3.0.1" dir-glob "^3.0.1" - fast-glob "^3.2.7" - ignore "^5.1.9" + fast-glob "^3.2.11" + ignore "^5.2.0" merge2 "^1.4.1" slash "^4.0.0" @@ -5416,10 +6135,10 @@ html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: relateurl "^0.2.7" terser "^5.10.0" -html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== +html-tags@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" + integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== html-void-elements@^1.0.0: version "1.0.5" @@ -5459,6 +6178,16 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +htmlparser2@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" @@ -5537,7 +6266,7 @@ ignore@^5.1.4: resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -ignore@^5.1.9, ignore@^5.2.0: +ignore@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -5577,10 +6306,10 @@ indent-string@^4.0.0: resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infima@0.2.0-alpha.38: - version "0.2.0-alpha.38" - resolved "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.38.tgz" - integrity sha512-1WsmqSMI5IqzrUx3goq+miJznHBonbE3aoqZ1AR/i/oHhroxNeSV6Awv5VoVfXBhfTzLSnxkHaRI2qpAMYcCzw== +infima@0.2.0-alpha.39: + version "0.2.0-alpha.39" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.39.tgz#054b13ac44f3e9a42bc083988f1a1586add2f59c" + integrity sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw== inflight@^1.0.4: version "1.0.6" @@ -5637,11 +6366,6 @@ ipaddr.js@^2.0.1: resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - is-alphabetical@1.0.4, is-alphabetical@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" @@ -5795,11 +6519,6 @@ is-regexp@^1.0.0: resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-resolvable@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - is-root@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz" @@ -5857,7 +6576,7 @@ isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -jest-worker@^27.0.2, jest-worker@^27.0.6: +jest-worker@^27.0.6: version "27.1.1" resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.1.tgz" integrity sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA== @@ -5866,7 +6585,7 @@ jest-worker@^27.0.2, jest-worker@^27.0.6: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^27.4.5: +jest-worker@^27.4.5, jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -5931,7 +6650,7 @@ json-parse-better-errors@^1.0.2: resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -6142,7 +6861,7 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0: resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6425,13 +7144,6 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -6442,7 +7154,7 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -6455,16 +7167,16 @@ multicast-dns@^7.2.4: dns-packet "^5.2.2" thunky "^1.0.2" -nanoid@^3.1.23: - version "3.1.25" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz" - integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== - nanoid@^3.3.1: version "3.3.2" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz" integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA== +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + negotiator@0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" @@ -6515,6 +7227,11 @@ node-releases@^2.0.2: resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz" integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== +node-releases@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" + integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -6759,6 +7476,14 @@ parse5-htmlparser2-tree-adapter@^6.0.1: dependencies: parse5 "^6.0.1" +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + parse5@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" @@ -6769,6 +7494,13 @@ parse5@^6.0.0, parse5@^6.0.1: resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" + integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== + dependencies: + entities "^4.3.0" + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" @@ -6863,23 +7595,6 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -portfinder@^1.0.28: - version "1.0.28" - resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -postcss-calc@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz" - integrity sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g== - dependencies: - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - postcss-calc@^8.2.3: version "8.2.4" resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz" @@ -6888,16 +7603,6 @@ postcss-calc@^8.2.3: postcss-selector-parser "^6.0.9" postcss-value-parser "^4.2.0" -postcss-colormin@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz" - integrity sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - colord "^2.0.1" - postcss-value-parser "^4.1.0" - postcss-colormin@^5.3.0: version "5.3.0" resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz" @@ -6908,55 +7613,29 @@ postcss-colormin@^5.3.0: colord "^2.9.1" postcss-value-parser "^4.2.0" -postcss-convert-values@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz" - integrity sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg== - dependencies: - postcss-value-parser "^4.1.0" - -postcss-convert-values@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz" - integrity sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g== +postcss-convert-values@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" + integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== dependencies: + browserslist "^4.20.3" postcss-value-parser "^4.2.0" -postcss-discard-comments@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz" - integrity sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg== - -postcss-discard-comments@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz" - integrity sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ== - -postcss-discard-duplicates@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz" - integrity sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA== +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== postcss-discard-duplicates@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== -postcss-discard-empty@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz" - integrity sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw== - postcss-discard-empty@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== -postcss-discard-overridden@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz" - integrity sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q== - postcss-discard-overridden@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" @@ -6969,14 +7648,14 @@ postcss-discard-unused@^5.1.0: dependencies: postcss-selector-parser "^6.0.5" -postcss-loader@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== +postcss-loader@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.0.tgz#367d10eb1c5f1d93700e6b399683a6dc7c3af396" + integrity sha512-IDyttebFzTSY6DI24KuHUcBjbAev1i+RyICoPEWcAstZsj03r533uMXtDn506l6/wlsRYiS5XBdx7TpccCsyUg== dependencies: cosmiconfig "^7.0.0" klona "^2.0.5" - semver "^7.3.5" + semver "^7.3.7" postcss-merge-idents@^5.1.1: version "5.1.1" @@ -6986,51 +7665,24 @@ postcss-merge-idents@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-merge-longhand@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz" - integrity sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw== - dependencies: - css-color-names "^1.0.1" - postcss-value-parser "^4.1.0" - stylehacks "^5.0.1" - -postcss-merge-longhand@^5.1.4: - version "5.1.4" - resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz" - integrity sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA== +postcss-merge-longhand@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" + integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== dependencies: postcss-value-parser "^4.2.0" stylehacks "^5.1.0" -postcss-merge-rules@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz" - integrity sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - cssnano-utils "^2.0.1" - postcss-selector-parser "^6.0.5" - vendors "^1.0.3" - -postcss-merge-rules@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz" - integrity sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww== +postcss-merge-rules@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" + integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== dependencies: browserslist "^4.16.6" caniuse-api "^3.0.0" cssnano-utils "^3.1.0" postcss-selector-parser "^6.0.5" -postcss-minify-font-values@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz" - integrity sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA== - dependencies: - postcss-value-parser "^4.1.0" - postcss-minify-font-values@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" @@ -7038,15 +7690,6 @@ postcss-minify-font-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.2.tgz" - integrity sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ== - dependencies: - colord "^2.6" - cssnano-utils "^2.0.1" - postcss-value-parser "^4.1.0" - postcss-minify-gradients@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" @@ -7056,38 +7699,19 @@ postcss-minify-gradients@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-params@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz" - integrity sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw== - dependencies: - alphanum-sort "^1.0.2" - browserslist "^4.16.0" - cssnano-utils "^2.0.1" - postcss-value-parser "^4.1.0" - uniqs "^2.0.0" - -postcss-minify-params@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz" - integrity sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g== +postcss-minify-params@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" + integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== dependencies: browserslist "^4.16.6" cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz" - integrity sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og== - dependencies: - alphanum-sort "^1.0.2" - postcss-selector-parser "^6.0.5" - -postcss-minify-selectors@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz" - integrity sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA== +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== dependencies: postcss-selector-parser "^6.0.5" @@ -7119,24 +7743,11 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-normalize-charset@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz" - integrity sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg== - postcss-normalize-charset@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== -postcss-normalize-display-values@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz" - integrity sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ== - dependencies: - cssnano-utils "^2.0.1" - postcss-value-parser "^4.1.0" - postcss-normalize-display-values@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" @@ -7144,42 +7755,20 @@ postcss-normalize-display-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz" - integrity sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg== - dependencies: - postcss-value-parser "^4.1.0" - -postcss-normalize-positions@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz" - integrity sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ== +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz" - integrity sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w== - dependencies: - cssnano-utils "^2.0.1" - postcss-value-parser "^4.1.0" - -postcss-normalize-repeat-style@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz" - integrity sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw== +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz" - integrity sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA== - dependencies: - postcss-value-parser "^4.1.0" - postcss-normalize-string@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" @@ -7187,14 +7776,6 @@ postcss-normalize-string@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz" - integrity sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q== - dependencies: - cssnano-utils "^2.0.1" - postcss-value-parser "^4.1.0" - postcss-normalize-timing-functions@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" @@ -7202,14 +7783,6 @@ postcss-normalize-timing-functions@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz" - integrity sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA== - dependencies: - browserslist "^4.16.0" - postcss-value-parser "^4.1.0" - postcss-normalize-unicode@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz" @@ -7218,15 +7791,6 @@ postcss-normalize-unicode@^5.1.0: browserslist "^4.16.6" postcss-value-parser "^4.2.0" -postcss-normalize-url@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz" - integrity sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ== - dependencies: - is-absolute-url "^3.0.3" - normalize-url "^6.0.1" - postcss-value-parser "^4.1.0" - postcss-normalize-url@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" @@ -7235,13 +7799,6 @@ postcss-normalize-url@^5.1.0: normalize-url "^6.0.1" postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz" - integrity sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA== - dependencies: - postcss-value-parser "^4.1.0" - postcss-normalize-whitespace@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" @@ -7249,18 +7806,10 @@ postcss-normalize-whitespace@^5.1.1: dependencies: postcss-value-parser "^4.2.0" -postcss-ordered-values@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz" - integrity sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ== - dependencies: - cssnano-utils "^2.0.1" - postcss-value-parser "^4.1.0" - -postcss-ordered-values@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz" - integrity sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw== +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== dependencies: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" @@ -7272,14 +7821,6 @@ postcss-reduce-idents@^5.2.0: dependencies: postcss-value-parser "^4.2.0" -postcss-reduce-initial@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz" - integrity sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw== - dependencies: - browserslist "^4.16.0" - caniuse-api "^3.0.0" - postcss-reduce-initial@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz" @@ -7288,14 +7829,6 @@ postcss-reduce-initial@^5.1.0: browserslist "^4.16.6" caniuse-api "^3.0.0" -postcss-reduce-transforms@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz" - integrity sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA== - dependencies: - cssnano-utils "^2.0.1" - postcss-value-parser "^4.1.0" - postcss-reduce-transforms@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" @@ -7326,14 +7859,6 @@ postcss-sort-media-queries@^4.2.1: dependencies: sort-css-media-queries "2.0.4" -postcss-svgo@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz" - integrity sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A== - dependencies: - postcss-value-parser "^4.1.0" - svgo "^2.3.0" - postcss-svgo@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz" @@ -7342,15 +7867,6 @@ postcss-svgo@^5.1.0: postcss-value-parser "^4.2.0" svgo "^2.7.0" -postcss-unique-selectors@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz" - integrity sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w== - dependencies: - alphanum-sort "^1.0.2" - postcss-selector-parser "^6.0.5" - uniqs "^2.0.0" - postcss-unique-selectors@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" @@ -7358,7 +7874,7 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== @@ -7373,7 +7889,7 @@ postcss-zindex@^5.1.0: resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== -postcss@^8.3.11, postcss@^8.4.12, postcss@^8.4.7: +postcss@^8.3.11, postcss@^8.4.7: version "8.4.12" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz" integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== @@ -7382,14 +7898,14 @@ postcss@^8.3.11, postcss@^8.4.12, postcss@^8.4.7: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.3.5: - version "8.3.6" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz" - integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== +postcss@^8.4.13, postcss@^8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map-js "^0.6.2" + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" preact@^10.0.0: version "10.7.1" @@ -7424,10 +7940,15 @@ prism-react-renderer@^1.3.1: resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz" integrity sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ== -prismjs@^1.27.0: - version "1.27.0" - resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz" - integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== +prism-react-renderer@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz#9b5a4211a6756eee3c96fee9a05733abc0b0805c" + integrity sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ== + +prismjs@^1.28.0: + version "1.28.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.28.0.tgz#0d8f561fa0f7cf6ebca901747828b149147044b6" + integrity sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw== process-nextick-args@~2.0.0: version "2.0.1" @@ -7567,10 +8088,10 @@ react-base16-styling@^0.6.0: lodash.flow "^3.3.0" pure-color "^1.2.0" -react-dev-utils@^12.0.0: - version "12.0.0" - resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz" - integrity sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ== +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== dependencies: "@babel/code-frame" "^7.16.0" address "^1.1.2" @@ -7591,7 +8112,7 @@ react-dev-utils@^12.0.0: open "^8.4.0" pkg-up "^3.1.0" prompts "^2.4.2" - react-error-overlay "^6.0.10" + react-error-overlay "^6.0.11" recursive-readdir "^2.2.2" shell-quote "^1.7.3" strip-ansi "^6.0.1" @@ -7606,17 +8127,17 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" -react-error-overlay@^6.0.10: - version "6.0.10" - resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz" - integrity sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA== +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== react-fast-compare@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== -react-helmet-async@*, react-helmet-async@^1.2.3: +react-helmet-async@*: version "1.2.3" resolved "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.2.3.tgz" integrity sha512-mCk2silF53Tq/YaYdkl2sB+/tDoPnaxN7dFS/6ZLJb/rhUY2EWGI5Xj2b4jHppScMqY45MbgPSwTxDchKpZ5Kw== @@ -7627,6 +8148,17 @@ react-helmet-async@*, react-helmet-async@^1.2.3: react-fast-compare "^3.2.0" shallowequal "^1.1.0" +react-helmet-async@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" @@ -7661,23 +8193,23 @@ react-router-config@^5.1.1: dependencies: "@babel/runtime" "^7.1.2" -react-router-dom@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.0.tgz" - integrity sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ== +react-router-dom@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.3.tgz#8779fc28e6691d07afcaf98406d3812fe6f11199" + integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.2.1" + react-router "5.3.3" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.2.1, react-router@^5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/react-router/-/react-router-5.2.1.tgz" - integrity sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ== +react-router@5.3.3, react-router@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.3.tgz#8e3841f4089e728cf82a429d92cdcaa5e4a3a288" + integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" @@ -7871,9 +8403,9 @@ remark-admonitions@^1.2.1: unified "^8.4.2" unist-util-visit "^2.0.1" -remark-emoji@^2.1.0: +remark-emoji@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== dependencies: emoticon "^3.2.0" @@ -8171,6 +8703,13 @@ semver@^7.3.4, semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + send@0.17.2: version "0.17.2" resolved "https://registry.npmjs.org/send/-/send-0.17.2.tgz" @@ -8354,13 +8893,13 @@ slash@^4.0.0: resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" - uuid "^3.4.0" + uuid "^8.3.2" websocket-driver "^0.7.4" sort-css-media-queries@2.0.4: @@ -8373,11 +8912,6 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== - source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" @@ -8572,14 +9106,6 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" -stylehacks@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz" - integrity sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA== - dependencies: - browserslist "^4.16.0" - postcss-selector-parser "^6.0.4" - stylehacks@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz" @@ -8614,19 +9140,6 @@ svg-parser@^2.0.2: resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@^2.3.0: - version "2.5.0" - resolved "https://registry.npmjs.org/svgo/-/svgo-2.5.0.tgz" - integrity sha512-FSdBOOo271VyF/qZnOn1PgwCdt1v4Dx0Sey+U1jgqm1vqRYjPGdip0RGrFW6ItwtkBB8rHgHk26dlVr0uCs82Q== - dependencies: - "@trysound/sax" "0.1.1" - colorette "^1.3.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - stable "^0.1.8" - svgo@^2.5.0, svgo@^2.7.0: version "2.8.0" resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" @@ -8702,11 +9215,6 @@ thunky@^1.0.2: resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - tiny-invariant@^1.0.2: version "1.1.0" resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz" @@ -8769,11 +9277,16 @@ tslib@2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.1: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0: version "2.3.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" @@ -8914,11 +9427,6 @@ unified@^8.4.2: trough "^1.0.0" vfile "^4.0.0" -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - unique-string@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" @@ -8975,7 +9483,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" -unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.1, unist-util-visit@^2.0.2, unist-util-visit@^2.0.3: +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.1, unist-util-visit@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz" integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== @@ -8994,6 +9502,14 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +update-browserslist-db@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" + integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + update-notifier@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz" @@ -9076,10 +9592,10 @@ utils-merge@1.0.1: resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== value-equal@^1.0.1: version "1.0.1" @@ -9091,11 +9607,6 @@ vary@~1.1.2: resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -vendors@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - vfile-location@^3.0.0, vfile-location@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz" @@ -9186,15 +9697,16 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.7.4: - version "4.8.1" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.8.1.tgz" - integrity sha512-dwld70gkgNJa33czmcj/PlKY/nOy/BimbrgZRaR9vDATBQAYgLzggR0nxDtPLJiLrMgZwbE6RRfJ5vnBBasTyg== +webpack-dev-server@^4.9.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz#c188db28c7bff12f87deda2a5595679ebbc3c9bc" + integrity sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" "@types/express" "^4.17.13" "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" "@types/sockjs" "^0.3.33" "@types/ws" "^8.5.1" ansi-html-community "^0.0.8" @@ -9211,12 +9723,11 @@ webpack-dev-server@^4.7.4: ipaddr.js "^2.0.1" open "^8.0.9" p-retry "^4.5.0" - portfinder "^1.0.28" rimraf "^3.0.2" schema-utils "^4.0.0" selfsigned "^2.0.1" serve-index "^1.9.1" - sockjs "^0.3.21" + sockjs "^0.3.24" spdy "^4.0.2" webpack-dev-middleware "^5.3.1" ws "^8.4.2" @@ -9272,6 +9783,36 @@ webpack@^5.70.0: watchpack "^2.3.1" webpack-sources "^3.2.3" +webpack@^5.72.1: + version "5.73.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" + integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.9.3" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.3.1" + webpack-sources "^3.2.3" + webpackbar@^5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz"